1. 条件语句

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

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

// 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 循环的简单例子:

// 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 循环的简单例子:

// 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 循环的简单例子:

// 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)进行许可,使用时请注明出处。

Author: mengbin

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意

腾讯云开发者社区:孟斯特