80 votes

Comment "sortir" d'une instruction if ?

J'ai une déclaration "si" dont je veux me défaire. J'ai cru comprendre que la rupture n'est vraiment possible que pour les boucles. Quelqu'un peut-il m'aider ?

Pour ceux qui ont besoin d'un exemple de ce que j'essaie de faire :

if( color == red )
{
...
if( car == hyundai ) break;
...
}

84voto

phoog Points 22667

Des "ifs" imbriqués :

if (condition)
{
    // half-massive amount of code here

    if (!breakOutCondition)
    {
        //half-massive amount of code here
    }
}

Au risque de me faire rétrograder -- cela m'est déjà arrivé par le passé -- je mentionnerai qu'une autre option (impopulaire) serait bien sûr la redoutable goto une déclaration de rupture est juste un goto déguisé.

Enfin, je me ferai l'écho du sentiment général selon lequel votre conception pourrait probablement être améliorée de manière à ce que l'imposante déclaration "si" ne soit pas nécessaire, sans parler du fait qu'il faille s'en affranchir. Au moins, vous devriez être capable d'extraire quelques méthodes et d'utiliser un retour :

if (condition)
{
    ExtractedMethod1();

    if (breakOutCondition)
        return;

    ExtractedMethod2();
}

47voto

Matt Phillips Points 4520
if (test)
{
    ...
    goto jmp;
    ...
}
jmp:

Oh pourquoi pas :)

23voto

Arkadiy Points 10567

Vous devez probablement diviser votre déclaration "si" en plus petits morceaux. Ceci étant dit, vous pouvez faire deux choses :

  • envelopper la déclaration dans do {} while (false) et utiliser de vrais break (déconseillé ! !! énorme gâchis ! !!)

  • mettre la déclaration dans sa propre sous-routine et utiliser return C'est peut-être la première étape pour améliorer votre code.

3voto

Nim Points 22570

Je ne connais pas vos conditions de test, mais une bonne vieille switch pourrait fonctionner

switch(colour)
{
  case red:
  {
    switch(car)
    { 
      case hyundai: 
      {
        break;
      }
      :
    }
    break;
  }
  :
}

3voto

DipSwitch Points 1774

Vous ne pouvez pas sortir d'une instruction if, sauf si vous utilisez goto.

if (true)
{
      int var = 0;
      var++;
      if (var == 1)
          goto finished;
      var++;
}

finished:
printf("var = %d\n", var);

Cela donnerait comme résultat "var = 1".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X