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

本文深入探讨了Solidity中的控制结构和表达式,包括条件语句、循环语句及表达式的构成与计算规则,同时讲解了输入输出参数的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

一、控制结构

在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++和区块链感兴趣,欢迎关注:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值