مشخصات مقاله
-
0.0
-
731
-
0
-
0
حلقه Loop Control در سالیدیتی
Solidity کنترل کاملی را برای مدیریت حلقهها و عبارات سوئیچ فراهم میکند. ممکن است شرایطی پیش بیاید که لازم باشد از یک حلقه خارج شوید بدون اینکه به انتهای آن برسید. همچنین ممکن است شرایطی پیش بیاید که بخواهید بخشی از بلوک کد خود را رد کنید و تکرار بعدی حلقه را شروع نمایید. برای رسیدگی به چنین موقعیتهایی، 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);
}
}
خروجی
0: string: 3
دستور continue
دستور continue به مفسر می گوید که فوراً تکرار بعدی حلقه را شروع و از بلوک کد باقی مانده صرف نظر کند. هنگامی که یک عبارت continue استفاده می شود، جریان برنامه بلافاصله به عبارت بررسی حلقه منتقل می شود و اگر شرط درست باقی بماند، تکرار بعدی را شروع می کند، در غیر این صورت کنترل از حلقه خارج خواهد شد.
این مثال استفاده از عبارت continue با حلقه while را نشان می دهد.
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);
}
}