📅  最后修改于: 2020-11-04 04:25:43             🧑  作者: Mango
函数是一组可重用的代码,可以在程序中的任何位置调用。这样就无需一次又一次编写相同的代码。它可以帮助程序员编写模块化代码。函数使程序员可以将一个大型程序划分为许多小的和可管理的函数。
与任何其他高级编程语言一样,Solidity也支持使用功能编写模块化代码所需的所有功能。本节说明如何在Solidity中编写自己的函数。
在使用函数之前,我们需要对其进行定义。在Solidity中定义函数的最常见方法是使用函数关键字,后跟唯一的函数名称,参数列表(可能为空)以及用花括号括起来的语句块。
基本语法如下所示。
function function-name(parameter-list) scope returns() {
//statements
}
请尝试以下示例。它定义了一个名为getResult的函数,该函数不带任何参数-
pragma solidity ^0.5.0;
contract Test {
function getResult() public view returns(uint){
uint a = 1; // local variable
uint b = 2;
uint result = a + b;
return result;
}
}
要在Contract后面的某个位置调用一个函数,您只需要编写该函数的名称,如以下代码所示。
尝试以下代码以了解字符串在Solidity中的工作方式。
pragma solidity ^0.5.0;
contract SolidityTest {
constructor() public{
}
function getResult() public view returns(string memory){
uint a = 1;
uint b = 2;
uint result = a + b;
return integerToString(result);
}
function integerToString(uint _i) internal pure
returns (string memory) {
if (_i == 0) {
return "0";
}
uint j = _i;
uint len;
while (j != 0) {
len++;
j /= 10;
}
bytes memory bstr = new bytes(len);
uint k = len - 1;
while (_i != 0) {
bstr[k--] = byte(uint8(48 + _i % 10));
_i /= 10;
}
return string(bstr);//access local variable
}
}
使用Solidity First Application一章中提供的步骤运行上述程序。
0: string: 3
到目前为止,我们已经看到了没有参数的函数。但是有一种在调用函数传递不同参数的功能。这些传递的参数可以在函数内部捕获,并且可以对这些参数进行任何操作。一个函数可以采用多个参数,并用逗号分隔。
请尝试以下示例。我们在这里使用了uint2str函数。它需要一个参数。
pragma solidity ^0.5.0;
contract SolidityTest {
constructor() public{
}
function getResult() public view returns(string memory){
uint a = 1;
uint b = 2;
uint result = a + b;
return integerToString(result);
}
function integerToString(uint _i) internal pure
returns (string memory) {
if (_i == 0) {
return "0";
}
uint j = _i;
uint len;
while (j != 0) {
len++;
j /= 10;
}
bytes memory bstr = new bytes(len);
uint k = len - 1;
while (_i != 0) {
bstr[k--] = byte(uint8(48 + _i % 10));
_i /= 10;
}
return string(bstr);//access local variable
}
}
使用Solidity First Application一章中提供的步骤运行上述程序。
0: string: 3
Solidity函数可以具有可选的return语句。如果要从函数返回值,这是必需的。该语句应该是函数的最后一条语句。
如上例所示,我们使用uint2str函数返回字符串。
在Solidity中,一个函数也可以返回多个值。请参阅下面的示例-
pragma solidity ^0.5.0;
contract Test {
function getResult() public view returns(uint product, uint sum){
uint a = 1; // local variable
uint b = 2;
product = a * b;
sum = a + b;
//alternative return statement to return
//multiple values
//return(a*b, a+b);
}
}
使用Solidity First Application一章中提供的步骤运行上述程序。
0: uint256: product 2
1: uint256: sum 3