前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Solidity:控制语句

Solidity:控制语句

作者头像
孟斯特
发布2024-05-28 20:38:31
550
发布2024-05-28 20:38:31
举报
文章被收录于专栏:code人生

1. 条件语句

Solidity 中的条件判断和其他编程语言中的大致相同。它使用 ifelseelse if 语句来执行基于特定条件的代码块。这些语句在智能合约中经常使用,以便在满足某些条件时执行特定的操作。

下面是一个简单的 Solidity 条件判断代码示例:

代码语言:javascript
复制
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;

contract ConditionalTest{
    uint public x = 10;

    function check() public view returns(string memory){
        if(x > 10) {
            return "x is greater than 10";
        } else if(x < 10) {
            return "x is less than 10";
        } else {
            return "x is equal to 10";
        }
    }

    // solidity也支持三目运算符,形式如下:
    // condition ? value_if_true : value_if_false
    function check1() public view returns(uint){
        return x > 10 ? 1 : 2;
    }
}

在这个例子中,我们在智能合约 ConditionalTest 中定义了公共变量 x 并赋值为10。然后我们定义了一个函数 check(),这个函数使用条件判断语句 ifelse ifelse 来基于 x 的值返回不同的字符串;函数 check()1 使用三目运算符来判断 x 是否大于10:大于10返回1,否则返回2。

2. 循环

在 Solidity 中,循环可以通过两种主要的结构来实现: forwhile。这些循环结构用于重复执行一段代码直到满足某个条件。

2.1 for 循环

这种循环有三部分组成:初始化、条件和迭代。初始化运行一次,设定循环变量的起始值。条件是一个表达式,如果返回 true,循环就会继续;如果返回 false,循环就会结束。迭代在每次循环的末尾发生,通常用来更新循环变量。

下面是一个 for 循环的简单例子:

代码语言:javascript
复制
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;

contract LoopExample {
    function ForExample() public pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](10);
        for (uint256 i; i < 10; i++) {
            array[i] = i + 1;
        }
        return array;
    }
}

在这个例子中,我们使用 for 循环创建一个包含从1到10的数字的数组。

2.2 while 循环

这种循环只有一个条件。在每个循环迭代的开始,会检查这个条件。同样,如果条件返回 true,循环就会继续;如果返回 false,循环就会结束。

下面是一个 while 循环的简单例子:

代码语言:javascript
复制
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;

contract LoopExample {
    function WhileExampl() public pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](10);

        uint256 i = 0;
        while (i < 10) {
            array[i] = i + 1;
            i++;
        }
        return array;
    }
}

在这个例子中,我们使用 while 循环创建一个包含从1到10的数字的数组。

2.3 do while 循环

在 Solidity 中,do while 循环是另一种循环控制语句,它的行为稍有不同。在 do while 循环中,循环至少会执行一次,因为在检查条件之前,循环的主体部分至少执行一次。然后,只要条件为 true,循环就会继续。一旦条件为 false,循环就会停止。这就是 do while 循环的主要优势所在:它保证了循环至少执行一次。

下面是一个 do while 循环的简单例子:

代码语言:javascript
复制
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;

contract LoopExample {
    function WhileExampl() public pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](10);

        uint256 i = 0;
        while (i < 10) {
            array[i] = i + 1;
            i++;
        }
        return array;
    }
}

但是,需要注意的是,在实际的 Solidity 代码中并不常见 do while 循环的使用。因为在 Solidity 中,使用 do while 循环可能会引发安全性问题,因为如果条件永远满足,则可能会造成无限循环,并消耗所有的 gas。这就是为什么在 Solidity 中通常推荐使用 forwhile 循环,因为它们在进入循环体之前会检查条件。所以,在使用 do while 循环时,开发人员必须谨慎,并确保他们的条件正确且一定会在某个时刻变为 false

此外,无限循环可以导致交易因为达到了Gas限制而失败,因此编写循环时应确保其有一个可以达到的结束条件。同时,循环中的计算也会消耗Gas,过度使用大量计算的循环会导致交易成本增加。

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)[1]进行许可,使用时请注明出处。 Author: mengbin[2] blog: mengbin[3] Github: mengbin92[4] cnblogs: 恋水无意[5] 腾讯云开发者社区:孟斯特[6]

References

[1] 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0): https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh [2] mengbin: mengbin1992@outlook.com [3] mengbin: https://mengbin.top [4] mengbin92: https://mengbin92.github.io/ [5] 恋水无意: https://www.cnblogs.com/lianshuiwuyi/ [6] 孟斯特: https://cloud.tencent.com/developer/user/6649301

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 孟斯特 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 条件语句
  • 2. 循环
    • 2.1 for 循环
      • 2.2 while 循环
        • 2.3 do while 循环
          • References
          相关产品与服务
          云开发 CloudBase
          云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档