Solidity - 循环控制
Solidity 提供了处理循环和 switch 语句的完全控制。 可能存在这样的情况:您需要在未到达底部的情况下退出循环。 也可能存在这样的情况:您想跳过代码块的一部分并开始循环的下一次迭代。
为了处理所有此类情况,Solidity 提供了 break 和 continue 语句。 这些语句分别用于立即退出任何循环或开始任何循环的下一次迭代。
break 语句
break 语句与 switch 语句一起简要介绍,用于提前退出循环,打破封闭的大括号。
流程图
break 语句的流程图如下所示 −
示例
以下示例说明了 break 语句与 while 循环的使用。
pragma solidity ^0.5.0;
contract SolidityTest {
uint storedData;
constructor() public{
storedData = 10;
}
function getResult() public view returns(string memory){
uint a = 1;
uint b = 2;
uint result = a + b;
return integerToString(result);
}
function integerToString(uint _i) internal pure
returns (string memory) {
if (_i == 0) {
return "0";
}
uint j = _i;
uint len;
while (true) {
len++;
j /= 10;
if(j==0){
break; //using break statement
}
}
bytes memory bstr = new bytes(len);
uint k = len - 1;
while (_i != 0) {
bstr[k--] = byte(uint8(48 + _i % 10));
_i /= 10;
}
return string(bstr);
}
}
使用 Solidity First 应用 章节中提供的步骤运行上述程序。
输出
0: string: 3
Continue 语句
Continue 语句告诉解释器立即开始循环的下一次迭代并跳过剩余的代码块。 当遇到Continue语句时,程序流程立即转到循环检查表达式,如果条件成立,则开始下一次迭代,否则控制退出循环。
示例
此示例说明如何使用带有 while 循环的 Continue 语句。
pragma solidity ^0.5.0;
contract SolidityTest {
uint storedData;
constructor() public{
storedData = 10;
}
function getResult() public view returns(string memory){
uint n = 1;
uint sum = 0;
while( n < 10){
n++;
if(n == 5){
continue; // skip n in sum when it is 5.
}
sum = sum + n;
}
return integerToString(sum);
}
function integerToString(uint _i) internal pure
returns (string memory) {
if (_i == 0) {
return "0";
}
uint j = _i;
uint len;
while (true) {
len++;
j /= 10;
if(j==0){
break; //using break statement
}
}
bytes memory bstr = new bytes(len);
uint k = len - 1;
while (_i != 0) {
bstr[k--] = byte(uint8(48 + _i % 10));
_i /= 10;
}
return string(bstr);
}
}
使用 Solidity First 应用 章节中提供的步骤运行上述程序。
输出
0: string: 49

