一起学智能合约之四表达式和控制结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fpcc/article/details/82954657

一起学智能合约之四表达式和控制结构

 

一、控制结构

在Solidity中,主要有以下控制结构:

1、条件语句:if,if…else

if(msg.sender != admin){

         …….;

}else{

         ……

}

Solidity中不支持从非布尔类型类型到布尔类型的转换,  所以类似if (1){…}这种语句会引起编译错误。

 

2、循环while语句

while (i++ < 20) {

     same1 = i+100;

          if (i > 3){

       break;

}

}

 

continue的用法和break的方法类似。return的方法使用是直接退出当前函数,这个就不再多说了。

3、循环for语句

for (uint i = 0; i < 100; i++){

      num =  i + 1;

}

综合以上,基本上来说,这些语句的语义和常见的编程语言的语义基本相同。但是这里没有switch和goto。

 

二、表达式

表达式是由一个或者多个运算对象构成,运算对象之间可以通过运算符连接起来。对表达式求值最后都会得到一个结果。

Solidity中的表达式同控制结构类似,和其它语言的没有本质的区别,由于Solidity是图灵完备的,所以类似递归等调用,都是支持的(前提是你得有足够的gas)。

表达式的计算顺序是不确定的(准确地说是, 顺序表达式树中的子节点表达式计算顺序是不确定的的, 但他们对节点本身,计算表达式顺序当然是确定的)。只保证语句执行顺序,以及布尔表达式的短路规则。表达式计算的次序和运算符的优先级有很大关联。

看一个递归的例子:

contract example {

  function rec(uint a) returns (uint r) {

 return rec(10);

 }

}

需要说明的是,Solidity中也是支持无名函数的。在后面会专门介绍。

三、输入和输出参数

类似于c语言,输入参数如果未使用,则可以没有名字(c语言在声明函数时,参数可以只有类型没有参数名)。

pragma solidity ^0.4.0;

 

contract Simple {

    //函数的入参如变量的定义方式

    //未使用的参数可以省略变量名

    function InputPara(uint a, uint) {

       a = a + 1;

    }

}

而输出参数则类似于go,如果没有显示指定返回,则推定返回。当然,它们的名字如果没有使用是也是可以省略的。如果没有显示指定返回参数的值,那么它默认是0。

输入参数和输出参数可以在函数体中用作表达式。因此,它们也可用在等号左边被赋值。

pragma solidity ^0.4.16;

 

contract Simple {

    function arithmetics(uint _a, uint _b)

        public

        pure

        returns (uint o_sum, uint o_product)

    {

        o_sum = _a + _b;

        o_product = _a * _b;

}

    //省略返回参数的变量名定义

    function output2(uint a, uint b) returns (uint){

        return a + b;

    }

    //返回多个值

    function returnMul(uint a) returns (uint, uint){

        return (a, a + 1);

    }

}

这个是官网的一个例子,返回值有多个。可能写c的人不太习惯,写Go的就明白好多。

在下面一篇会详细分析一下函数的使用和它的高级用法。

如果你对c++和区块链感兴趣,欢迎关注:

猜你喜欢

转载自blog.csdn.net/fpcc/article/details/82954657