- Solidity 教程
- Solidity - 首页
- Solidity - 概述
- Solidity - 环境搭建
- Solidity - 基本语法
- Solidity - 第一个应用
- Solidity - 注释
- Solidity - 数据类型
- Solidity - 变量
- Solidity - 变量作用域
- Solidity - 运算符
- Solidity - 循环
- Solidity - 条件语句
- Solidity - 字符串
- Solidity - 数组
- Solidity - 枚举
- Solidity - 结构体
- Solidity - 映射
- Solidity - 类型转换
- Solidity - 以太币单位
- Solidity - 特殊变量
- Solidity - 样式指南
- Solidity 函数
- Solidity - 函数
- Solidity - 函数修饰符
- Solidity - View 函数
- Solidity - Pure 函数
- Solidity - 回退函数
- 函数重载
- 数学函数
- 加密函数
- Solidity 常用模式
- Solidity - 提款模式
- Solidity - 访问限制
- Solidity 高级
- Solidity - 合约
- Solidity - 继承
- Solidity - 构造函数
- Solidity - 抽象合约
- Solidity - 接口
- Solidity - 库
- Solidity - 汇编
- Solidity - 事件
- Solidity - 错误处理
- Solidity 有用资源
- Solidity - 快速指南
- Solidity - 有用资源
- Solidity - 讨论
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
广告