智能合约 | 函数的语法与调用

155 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情

智能合约的函数

我们使用remix部署合约后,看到的是一个个可调用的函数,当我们输入参数或者点击函数名按钮时,即是在运行该函数。智能合约的编写和开发中,我们通常使用函数对业务拆分的一个又一个的独立功能进行封装。而且,智能合约不像传统的编程那样,有一个主函数入口这样从上到下的逻辑。因此说,智能合约开发的函数就是提供一个交互的接口。

image.png

  • 语法
function name(paramlist ···) modifiers returns(returnList){
   return ...
}

/* function:函数声明关键字
* name:自定义函数名称
* paramlist:参数列表 语法为:参数类型 参数名称 。可以有0个或多个
* modifers: 函数修饰符(一般用于限制操作对象或公开度)
* returns:返回关键字(结尾有‘s’)
* returnList:返回值列表
* return: 函数体返回数据关键字
**/
  • 代码示例
// 创建getForSum函数
function getForSum() public view returns(uint 256){
//声明变量sum
     uint256 sum=0;
     //for循环
     for(uint256 i;i<10;i++ ){
     //累加
     sum+=i;
     }
     return sum;
     
}

solidity是支持for和while为关键词的循环结构语法的。但是在使用过程中得谨慎,特别是涉及金钱交易,并且在每次调用函数后,只要改变了存储状态,就需要消耗gas,gas可是白花花的银子哦~~~

创建函数进行string类型的比较

在智能合约中,string类型的比较是非常不友好的,因为它不能使用“==”符号进行直接比较字符串,所以这需要我们自己想办法。作为智能合约的开发者,第一时间想到的是hash值,address类型是可以进行比较的,因此我们不如将字符串使用keccak256函数生成一个hash,当hash相等时,字符串也会相等。

  • 代码示例
//在高版本(大于0.5.0)声明在函数内的参数需要使用关键字memory
function isEqual(string memory a,string memory b) public pure  returns(bool){
      //计算a,b的hash
      bytes32 hashA=keccak256(abi.encode(a));
      bytes32 hashB=keccak256(abi.encode(b));
      //返回bool类型
      return hashA==hashB;
    }

  • 使用remix测试

部署之后我们发现: image.png

返回ture。

image.png

则返回false。