网站首页 > 开源技术 正文
函数在所有的语言中都是一种常见类型。Solidity中的函数关键字是function,我们来看一个简单的例子:
这样我们就学会了函数的编写。将上述代码复制到在线的浏览器编译器:https://ethereum.github.io/browser-solidity/ 中运行,就能立即看到效果。
函数的参数
函数的入参定义与变量类似。我们可以省略未使用到的参数变量名,如下例所示:
例子中的参数按变量定义的方式定义了uint a。由于我们在函数中未使用到第二个参数,省略了第二个参数的变量名。
命名参数
函数调用可以使用命名参数。将参数名和参数值这样的键值对以任意顺序放进{}即可。请确认所传参数一定要与定义的一致。下面来看个简单的例子:
通过指定参数名称,实际传入的值为1,2,通过调用f()函数,我们得到了交换顺序后的2,1。
函数的返回值
返回值的定义与参数类似,跟在returns关键字后即可。
上例中,我们定义了一个返回值变量uint r,并在函数内让r = a + b;,从而返回了结果。
return关键字
我们还可以使用return关键字来指定返回的值,使用return时,我们不会用到返回值的变量名称,可以省略。
我们在output1()中使用了return关键字来指定要返回的值;在output2()中我们省略了返回参数的变量名定义;一旦使用了return的定义方式,我们要保证return返回的参数数量要与定义匹配,如output3()所示。从output4()中我们可以看出来,如果同时使用return关键字和变量定义方式,以return为准。
返回多个值
Solidity语言支持在一个函数中返回多个结果。使用return (v0, v1, ... vn);来返回多个值。
上述函数返回了原值,和原值加一后的新值两个结果。
杂项
返回参数会被初始化为0,如果没有被明确的设置值,那么它会一直保持零。
函数的参数和返回值可以在函数体内被用作表达式的一部分。当然他们也可被赋值,由于基本类型是值传递,所以即使变量被修改为新值,也不会影响函数外的调用原值。
我们看到在调用f()时传入了i,并在函数内修改了它的值;但函数f()函数调用完成后,i仍为1。
函数的高级特性
由于Solidity语言本身是一门基于区块链网络的分布式语言。它还支持跨合约函数调用的可见性控制,函数级别货币支付支持,函数级的访问控制等独有特性。我们将在下一节的高级特性中进行进一步的讲解。
关于作者
专注基于以太坊(Ethereum)的相关区块链(Blockchain)技术,了解以太坊,Solidity,Truffle,web3.js。
个人博客: http://me.tryblockchain.org
Solidity翻译: http://solidity.tryblockchain.org
猜你喜欢
- 2024-09-30 「链块技术39期」以太坊智能合约语言(四):Solidity函数(上)
- 2024-09-30 学习 Solidity 智能合约开发 02:合约
- 2024-09-30 「干货」区块链技术分享:Solidity语言(七)
- 2024-09-30 Solidity的整数(solid size)
- 2024-09-30 了解Solidity语言基础知识(sol语言有哪些特点)
- 2024-09-30 solidity基本数据类型使用、主要关键字学习、address使用
- 2024-09-30 「链块技术36期」以太坊智能合约—Solidity概述和开发工具的使用
- 2024-09-30 区块链研究实验室 | 深入解析Solidity合约
- 2024-09-30 【干货】区块链技术分享:Solidity语言
- 2024-09-30 以太坊2.0进展:存款合约已经从Vyper重写为Solidity语言并重新验证
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)