Solidità - Controllo del ciclo
Solidity fornisce il controllo completo per gestire i loop e le istruzioni switch. Potrebbe esserci una situazione in cui è necessario uscire da un loop senza raggiungere il fondo. Potrebbe anche verificarsi una situazione in cui si desidera saltare una parte del blocco di codice e avviare la successiva iterazione del ciclo.
Per gestire tutte queste situazioni, Solidity fornisce break e continuedichiarazioni. Queste istruzioni vengono utilizzate per uscire immediatamente da qualsiasi ciclo o per avviare rispettivamente l'iterazione successiva di qualsiasi ciclo.
La dichiarazione di rottura
Il breakL'istruzione, che è stata introdotta brevemente con l' istruzione switch , viene utilizzata per uscire da un ciclo in anticipo, rompendo le parentesi graffe che lo racchiudono.
Diagramma di flusso
Il diagramma di flusso di un'istruzione break dovrebbe apparire come segue:
Esempio
Il seguente esempio illustra l'uso di un file break istruzione con un ciclo 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);
}
}
Eseguire il programma di cui sopra utilizzando i passaggi forniti nel capitolo Solidity First Application .
Produzione
0: string: 3
La dichiarazione continue
Il continueindica all'interprete di avviare immediatamente la successiva iterazione del ciclo e di saltare il blocco di codice rimanente. Quando uncontinue viene rilevata l'istruzione, il flusso del programma si sposta immediatamente sull'espressione di controllo del ciclo e se la condizione rimane vera, avvia l'iterazione successiva, altrimenti il controllo esce dal ciclo.
Esempio
Questo esempio illustra l'uso di un file continue istruzione con un ciclo 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);
}
}
Eseguire il programma di cui sopra utilizzando i passaggi forniti nel capitolo Solidity First Application .
Produzione
0: string: 49