码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 三、流程控制及循环《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)则成功调用:
    在这里插入图片描述

  • 相关阅读:
    可编程 USB 转串口适配器开发板与振弦传感器测量模块的关系
    Java开发三年四面字节跳动斩获offer,掌握这些题进大厂没压力!
    微服务项目 - SpringBoot 2.x 升级到 SpringBoot 3.2.5,保姆级避坑
    虚拟机查看IP地址
    块设备驱动实现--模拟一个块设备
    study_notebook
    如何实现外网连接公司内网的ERP系统?快解析内网穿透
    Android studio Button的 用法详情
    Spark 3.0 - 7.LR 多分类实现影评预测电影评分与指标评测
    macbook(m1) ubuntu下载,复制粘贴和国内镜像源配置
  • 原文地址:https://blog.csdn.net/A757291228/article/details/126762909
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号