Solidity - 函数



函数是一组可重用的代码,可以在程序的任何地方调用。这避免了重复编写相同代码的需要,有助于程序员编写模块化代码。函数允许程序员将大型程序分解成许多小型且易于管理的函数。

与任何其他高级编程语言一样,Solidity 也支持使用函数编写模块化代码所需的所有功能。本节解释如何在 Solidity 中编写您自己的函数。

函数定义

在使用函数之前,我们需要定义它。在 Solidity 中定义函数最常见的方法是使用 **function** 关键字,后跟唯一的函数名、参数列表(可能为空)以及用大括号括起来的语句块。

语法

基本语法如下所示。

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;
   }
}

调用函数

要在合约中的其他地方调用函数,只需编写该函数的名称,如下面的代码所示。

尝试以下代码来了解字符串在 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 第一个应用章节中提供的步骤运行上述程序。

输出

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 第一个应用章节中提供的步骤运行上述程序。

输出

0: string: 3

return 语句

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 第一个应用章节中提供的步骤运行上述程序。

输出

0: uint256: product 2
1: uint256: sum 3
广告