• 三、流程控制及循环《2022 solidity8.+ 版本教程到实战》


    一、流程控制

    solidity 中使用 if 语句对流程进行控制,用法跟C类风格编程语言类似,例如如下是一个使用 if 语句的示例:

    // SPDX-License-Identifier: GPL-3.0
    pragma solidity ^0.8.0;
    contract IfDemo{
        function checkVal(uint iVal) external pure returns(uint){
            if (iVal>9 && iVal!=10){
                return 1;
            }else if(iVal < 10){
                return 2;
            }else{
                return 3;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在以上代码中,我们还看到了使用 if 语句时可以使用逻辑判断符对其进行多个条件的判断,其函数传入了一个参数 iVal 是uint 类型值,方式也跟 C 语言或者 JS 中类似,在此不再赘述。

    二、循环

    solidity 中循环也跟C和JS 中类似,如下是示例:

    function Floop()external pure returns(uint){
        uint sum=0;
        for(uint i=0;i<10;i++){
            sum+=i;
        }
        return sum;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    当然也支持 while 循环:

    function Wloop()external pure returns(uint){
         uint i=0;
         while(i<10){
             i++;
         }
         return i;
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在此还需要注意,循环会消耗 Gas,循环次数也跟 Gas 消耗成正比,需要谨慎使用,控制运行效率。

    四、错误

    在 solidity 中,可使用 require、revert 进行自定义报错。

    例如在第三点中的示例中,当 i 的值等于 4 时则执行报错:
    在这里插入图片描述
    此时部署合约,点击Floop执行后:
    在这里插入图片描述
    注意,报错后若在之前有状态变量被更改将会回滚数据。

    revert:
    在这里插入图片描述

    节省 Gas 的 err 方法

    err 方法有一种节省 Gas 的方式就是自定义 Err,通过 error 指定一个 error 方法,可接收对应的参数,当满足报错条件后使用 revert 对error 方法进行调用即可:

    error TestError(string info,address caller);
      function ErrDemo(uint i)external view{
          if(i<10){
              revert TestError("value err",msg.sender);
          }
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    此时我们传入 1 后,将会报错:
    在这里插入图片描述

    传入其他值(大于10)则成功调用:
    在这里插入图片描述

  • 相关阅读:
    IDEA操作Sharding-JDBC实战2
    XSS 从 PDF 中窃取数据
    HTTP协议
    密码管理工具-KeePass入门指南
    RK3128适配RTL8723DU
    在 Python 中跨多个文件使用全局变量
    机器视觉在虚拟现实与增强现实中的作用
    数据提取的艺术:如何通过数据治理提高效率
    Arm架构下麒麟操作系统安装配置Mariadb数据库
    低代码、端到端,一小时构建IoT示例场景,声网发布灵隼物联网云平台
  • 原文地址:https://blog.csdn.net/A757291228/article/details/126762909