2016-10-13 2 views
2

Parfois, j'aime utiliser les instructions de retour anticipé pour empêcher l'imbrication si une instruction, que je trouve, rend le code moins lisible.if-else ou early return

Je me demande s'il existe un consensus général objectif ou écrasant en ce qui concerne deux des schémas suivants: une meilleure pratique? Je ne pense pas que ce soit une question subjective, puisque ce que je demande vraiment, c'est une préférence presque objective.

void func() { 
    if (a) { 
     do b 
    }  
    else { 
     do c 
    } 
} 

ou

void func() { 
    if (a) { 
     do b 
     return; 
    } 

    do c 
} 
+0

J'ai toujours supposé que les instructions de retour, si possible, devraient être limitées à être utilisées à la fin de la fonction car elles sont plus faciles à lire et à comprendre. le flux. D'autres peuvent être en désaccord avec cela, mais c'est pourquoi j'opterais pour le premier extrait. – b85411

+0

Je pense que c'est assez similaire avec ce http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement – hakim

Répondre

1

Le premier est meilleur. Autrement dit, cela aide un autre développeur à comprendre que c compile parce que la condition est fausse. Cela empêche également d'autres personnes d'apporter des modifications dommageables à votre code. Cela dit, ils sont tous les deux corrects et fonctionneraient bien tous les deux

1

J'opter pour la première version. On m'a donné une longue explication il y a plusieurs années à ce sujet.

Les deux exemples, tels que vous les avez écrits maintenant, sont fonctionnellement identiques. Si la condition a est vraie, la logique dans la première condition if s'exécutera et la fonction retournera. Cependant, jetez un oeil de plus près le second scénario:

void func() { 
    if (a) { 
     do b 
     return; 
    } 

    do c 
} 

En ce moment, si le premier if feu, la fonction retournerait, sinon c serait exécuter. Cependant, considérons qu'à un moment donné, un programmeur décide de refactoriser la méthode pour une raison quelconque. S'il devait supprimer l'instruction return, la logique pour cs'exécuterait également si a était vraie. Cela peut sembler tiré par les cheveux, mais cela pourrait arriver plus facilement que vous ne le pensez. D'un autre côté, si vous utilisez un if-else complet, alors même un refacteur de la condition if n'aboutirait jamais à l'évaluation logique c en même temps.