1. 条件语句
Solidity 中的条件判断和其他编程语言中的大致相同。它使用 if
,else
和 else 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()
,这个函数使用条件判断语句 if
,else if
和 else
来基于 x
的值返回不同的字符串;函数 check()1
使用三目运算符来判断 x
是否大于10:大于10返回1,否则返回2。
2. 循环
在 Solidity 中,循环可以通过两种主要的结构来实现: for
和 while
。这些循环结构用于重复执行一段代码直到满足某个条件。
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 中通常推荐使用 for
或 while
循环,因为它们在进入循环体之前会检查条件。所以,在使用 do while
循环时,开发人员必须谨慎,并确保他们的条件正确且一定会在某个时刻变为 false
。
此外,无限循环可以导致交易因为达到了Gas限制而失败,因此编写循环时应确保其有一个可以达到的结束条件。同时,循环中的计算也会消耗Gas,过度使用大量计算的循环会导致交易成本增加。
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特