與其他語言類似,Solidity語言支持循環結構,Solidity提供以下循環語句。
while
do ... while
for
- 循環控制語句:
break
、continue
。
Solidity – while循環
語法
Solidity 中, while循環的語法如下:
while (表達式) { 被執行語句(如果表示為真) }
示例
pragma solidity ^0.5.0; contract SolidityTest { uint storedData; constructor() public{ storedData = 10; } function getResult() public view returns(string memory){ uint a = 10; 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 (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (_i != 0) { // while 循環 bstr[k--] = byte(uint8(48 + _i % 10)); _i /= 10; } return string(bstr); } }
Solidity – do…while循環
語法
Solidity 中, do…while循環的語法如下:
do { 被執行語句(如果表示為真) } while (表達式);
注意: 不要漏掉do后面的分號。
示例
pragma solidity ^0.5.0; contract SolidityTest { uint storedData; constructor() public{ storedData = 10; } function getResult() public view returns(string memory){ uint a = 10; 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 (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; do { // do while 循環 bstr[k--] = byte(uint8(48 + _i % 10)); _i /= 10; } while (_i != 0); return string(bstr); } }
Solidity – for循環
語法
Solidity 中, for循環的語法如下:
for (初始化; 測試條件; 迭代語句) { 被執行語句(如果表示為真) }
示例
pragma solidity ^0.5.0; contract SolidityTest { uint storedData; constructor() public{ storedData = 10; } function getResult() public view returns(string memory){ uint a = 10; 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=0; uint len; for (j = _i; j != 0; j /= 10) { //for循環的例子 len++; } 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 – break與contin
continue
– 跳出本次循環,繼續執行接下來的循環break
– 跳出循環(或跳出代碼塊)
break 示例
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; // break 語句跳出循環 } } 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); } }
輸出
0: string: 3
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; // 當n的和是5時,跳過n。 } 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; // break跳出循環 } } 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); } }
輸出
0: string: 49