博客
关于我
一起学智能合约之四表达式和控制结构
阅读量:308 次
发布时间:2019-03-04

本文共 1501 字,大约阅读时间需要 5 分钟。

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

 

一、控制结构

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

你可能感兴趣的文章
ElasicJob分布式定时任务
查看>>
feign调用上传文件接口(MultipartFile)
查看>>
centos 文件格式不对执行报错 || centos查看或者修改文件格式
查看>>
win锁屏界面用户名修改
查看>>
Java设计模式 —— 桥接模式(Bridge)
查看>>
计算机三级 信息安全技术历年真题(二)总共十套 3月底之前更完
查看>>
详解: 最小生成树
查看>>
[编程题]:n头牛中选择满足所有m种特性的牛(百度2021)
查看>>
[数据结构]:红黑树(二)
查看>>
PyCharm安装与配置
查看>>
Docker - 部署 Redis 6.0.8
查看>>
Android - Create dynamic lists with RecyclerView
查看>>
Android - Broadcasts overview(不完整)
查看>>
OrCAD Capture CIS 16.6 - 为元器件添加属性
查看>>
Web API - File - Selecting files using drag and drop
查看>>
Spring Boot - axios upload file(带请求头上传文件,非前后端分离)
查看>>
STL基础梳理 2019.1.19(仿函数,谓词,内建函数对象,适配器,算法)
查看>>
IDEA效率快捷键收集
查看>>
并发情况下三种线程/并发安全
查看>>
希尔排序
查看>>