for
while
do ... while
循环控制语句:continue
/break
。
for (初始化; 测试条件; 迭代语句) {
// 如果表达式的结果为真,就循环执行以下语句
......
}
例子
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract For {
// 输入5 输出15
function test1(uint256 _x) external pure returns (uint256 temp) {
for (uint256 i = 1; i <= _x; i++) {
temp += i;
}
}
}
continue
退出当前迭代- 语句可以用来继续执行(跳过代码块的剩余部分并进入下一循环)。
break
终止循环
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract For {
// 输入5 输出15
function test1(uint256 _x) external pure returns (uint256 temp) {
for (uint256 i = 0; i <= _x; i++) {
temp += i;
}
}
// 输入5 输出7
function test2(uint256 _x) external pure returns (uint256 temp) {
for (uint256 i = 0; i <= _x; i++) {
if (i == 3) {
continue;
}
if (i == 5) {
break;
}
temp += i;
}
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract For {
function test1(uint256 _x) external pure returns (uint256 temp) {
for (uint256 i = 1; i <= _x; i++) {
temp += i;
}
}
function test2(uint256 _x) external pure returns (uint256 temp) {
for (uint256 i = 1; i <= _x; ++i) {
temp += i;
}
}
}
- 运行 test1
// 输入 5 : 23658 gas // 输入 100 : 58713 gas
- 运行 test2
// 输入 5 : 23655 gas // 输入 100 : 58235 gas
while (表达式) {
// 如果表达式的结果为真,就循环执行以下语句
......
}
例子
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract For {
function test1(uint256 _x) external pure returns (uint256 temp) {
uint256 i = 0;
while (i <= _x) {
temp += i;
i++;
}
}
}
do {
// 如果表达式的结果为真,就循环执行以下语句
......
} while (表达式);
例子
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract For {
function test1(uint256 _x) external pure returns (uint256 temp) {
uint256 i = 0;
while (i <= _x) {
temp += i;
i++;
}
}
function test2(uint256 _x) external pure returns (uint256 temp) {
uint256 i = 0;
do {
temp += i;
i++;
} while (i <= _x);
}
}