Solidity入门-函数初级

函数在所有的语言中都是一种常见类型。Solidity中的函数关键字是function,我们先来看一个最简单的例子:

pragma solidity ^0.4.0;
contract SimpleFunc {
    function hello(uint i){
        //todo
    }
}

函数的参数

函数的入参定义与变量类似。我们可以省略未使用到的参数变量名,如下例所示:

pragma solidity ^0.4.0;
contract Simple {
    //函数的入参如变量的定义方式
    //未使用的参数可以省略变量名
    function InputPara(uint a, uint) {
       a = a + 1;
    }
}

例子中我们按变量定义的方式定义了uint a。由于我们在函数中未使用到第二个参数,省略了第二个参数的变量名。

命名参数

函数调用可以使用命名参数。将参数名和参数值这样的键值对以任意顺序放进{}即可。请确认所传参数一定要与定义的一致。下面来看个简单的例子:

pragma solidity ^0.4.0;
contract C {
    //交换传入值的顺序并返回
    function f(uint key, uint value) returns (uint, uint){ 
        return (value, key);
    }

    function g() returns (uint, uint){
        //任意顺序的通过变量名来指定参数值
        return f({value: 2, key: 1});//2,1
    }
}

通过指定参数名称,实际传入的值为1,2,通过调用f()函数,我们得到了交换顺序后的2,1。

函数的返回值

返回值的定义与参数类似,跟在returns关键字后即可。

pragma solidity ^0.4.0;
contract Simple {
    //定义了一个返回值变量`r`
    function outputParameter(uint a, uint b) returns (uint r){
       r = a + b;
    }
}

上例中,我们定义了一个返回值变量uint r,并在函数内让r = a + b;,从而返回了结果。

return关键字

我们还可以使用return关键字来指定返回的值,使用return时,我们不会用到返回值的变量名称时,可以省略。

pragma solidity ^0.4.0;
contract Simple {

    //使用`return`关键字指定返回值
    function output1(uint a, uint b) returns (uint r){
        return a + b;
    }
   
    //省略返回参数的变量名定义
    function output2(uint a, uint b) returns (uint){
        return a + b;
    }
    
    /*
    function output3(uint a, uint b) returns (uint x, uint mul){
        x = a + b;
        mul = a * b;
        //不能混合使用两种定义方式
        //使用`return`时要返回所有定义
        //Untitled3:18:9: Error: Different number of arguments in return statement than in returns declaration.
        return x;
    }
    */
    
    function output4(uint a, uint b) returns (uint mul){
        mul = a * b;
        //不能混合使用两种定义方式
        //使用`return`时要返回所有定义
        //Untitled3:18:9: Error: Different number of arguments in return statement than in returns declaration.
        return 1;//1
    }
}

我们在output1()中使用了return关键字来指定要返回的值;在output2()中我们省略了返回参数的变量名定义;一旦使用了return的定义方式,我们要保证return返回的参数数量要与定义匹配,如output3()所示。从output4()中我们可以看出来,如果同时使用return关键字和变量定义方式,以return为准。

返回多个值

Solidity语言支持在一个函数中返回多个结果。使用return (v0, v1, … vn);来返回多个值。

pragma solidity ^0.4.0;
contract Simple {
    //返回多个值
    function returnMul(uint a) returns (uint, uint){
        return (a, a + 1);
    }
}

上述函数返回了原值,和原值加一后的新值两个结果。

杂项

  • 返回参数会被初始化为0,如果没有被明确的设置值,那么它会一直保持零。
  • 函数的参数和返回值可以在函数体内被用作表达式的一部分。当然他们也可被赋值,由于基本类型是值传递,所以即使变量被修改为新值,也不会影响函数外的调用原值。
pragma solidity ^0.4.0;
contract Simple {
  
    function f(uint a) returns (uint){
        //修改传入的参数变量,并返回
        a = a + 1;
        return a;
    }
    
    function callFun() returns (uint, uint){
        uint i = 1;
        //传入的参数`i`并没有被改变
        uint j = f(i);
        return (i, j);//1,2
    }
}

我们看到在调用f()时传入了i,并在函数内修改了它的值;但函数f()函数调用完成后,i仍为1。

原文链接:https://me.tryblockchain.org/solidity-function.html
关于函数高级开发,请见:
https://me.tryblockchain.org/solidity-function-advanced1.html
发布了16 篇原创文章 · 获赞 4 · 访问量 1774

猜你喜欢

转载自blog.csdn.net/qq_40509206/article/details/104340530
今日推荐