Solidez - Control de bucle

Solidity proporciona un control total para manejar bucles y cambiar declaraciones. Puede haber una situación en la que necesite salir de un bucle sin llegar a su fondo. También puede haber una situación en la que desee omitir una parte de su bloque de código e iniciar la siguiente iteración del ciclo.

Para manejar todas estas situaciones, Solidity proporciona break y continuedeclaraciones. Estas declaraciones se utilizan para salir inmediatamente de cualquier bucle o para iniciar la siguiente iteración de cualquier bucle, respectivamente.

La declaración de descanso

los breakLa instrucción, que se introdujo brevemente con la instrucción switch , se usa para salir de un bucle antes de tiempo, saliendo de las llaves que lo encierran.

Diagrama de flujo

El diagrama de flujo de una declaración de ruptura se vería de la siguiente manera:

Ejemplo

El siguiente ejemplo ilustra el uso de un break declaración con un bucle 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);
   }
}

Ejecute el programa anterior siguiendo los pasos proporcionados en el capítulo Primera aplicación de Solidity.

Salida

0: string: 3

La declaración continue

los continueLa instrucción le dice al intérprete que comience inmediatamente la siguiente iteración del ciclo y salte el bloque de código restante. Cuando unacontinue se encuentra la instrucción, el flujo del programa se mueve a la expresión de verificación del ciclo inmediatamente y si la condición permanece verdadera, entonces comienza la siguiente iteración; de lo contrario, el control sale del ciclo.

Ejemplo

Este ejemplo ilustra el uso de un continue declaración con un bucle 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);
   }
}

Ejecute el programa anterior siguiendo los pasos proporcionados en el capítulo Primera aplicación de Solidity.

Salida

0: string: 49