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