Solidité - Contrôle de boucle

Solidity offre un contrôle total pour gérer les boucles et les instructions de commutation. Il peut y avoir une situation où vous devez sortir d'une boucle sans atteindre son fond. Il se peut également que vous souhaitiez ignorer une partie de votre bloc de code et démarrer la prochaine itération de la boucle.

Pour gérer toutes ces situations, Solidity fournit break et continuedéclarations. Ces instructions sont utilisées pour sortir immédiatement de n'importe quelle boucle ou pour démarrer la prochaine itération de n'importe quelle boucle respectivement.

La déclaration de rupture

le break, qui a été brièvement introduite avec l' instruction switch , est utilisée pour quitter une boucle tôt, en sortant des accolades englobantes.

Organigramme

L'organigramme d'une instruction break ressemblerait à ceci:

Exemple

L'exemple suivant illustre l'utilisation d'un break instruction avec une boucle 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);
   }
}

Exécutez le programme ci-dessus en suivant les étapes fournies dans le chapitre Application Solidity First .

Production

0: string: 3

La déclaration continue

le continueindique à l'interpréteur de démarrer immédiatement l'itération suivante de la boucle et d'ignorer le bloc de code restant. Lorsqu'uncontinue est rencontrée, le flux du programme passe immédiatement à l'expression de vérification de boucle et si la condition reste vraie, alors il démarre l'itération suivante, sinon le contrôle sort de la boucle.

Exemple

Cet exemple illustre l'utilisation d'un continue instruction avec une boucle 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);
   }
}

Exécutez le programme ci-dessus en suivant les étapes fournies dans le chapitre Application Solidity First .

Production

0: string: 49