183 votes

Si-Else-Return ou juste si-Return?

Supposons que j'ai une déclaration if avec un return . Du point de vue de l'efficacité, devrais-je utiliser

 if(A > B):
    return A+1
return A-1
 

ou

 if(A > B):
    return A+1
else:
    return A-1
 

Quelqu'un peut-il m'expliquer la différence? Existe-t-il une différence entre un langage compilé (par exemple C) et un langage interprété (par exemple Python)?

237voto

Frédéric Hamidi Points 123646

Etant donné que l'instruction return met fin à l'exécution de la fonction actuelle, les deux formes sont équivalentes (bien que la seconde soit sans doute plus lisible que la première).

L'efficacité des deux formes est comparable, le code machine sous-jacent doit effectuer un saut si la condition if est fausse de toute façon.

Notez que Python supporte une syntaxe qui vous permet d’utiliser une seule déclaration return dans votre cas:

 return A+1 if A > B else A-1
 

5voto

Lundin Points 21616

Concernant le style de codage:

La plupart des normes de codage peu importe la langue interdiction de plusieurs instructions return à partir d'une seule fonction comme une mauvaise pratique.

(Bien que, personnellement, je dirais qu'il y a plusieurs cas où plusieurs instructions return font sens: texte/protocole de données des analyseurs, avec des fonctions étendues de gestion d'erreur, etc)

Le consensus de l'ensemble de ces industrie normes de codage est que l'expression devrait être écrit comme:

int result;

if(A > B)
{
  result = A+1;
}
else
{
  result = A-1;
}
return result;

Concernant l'efficacité énergétique:

L'exemple ci-dessus, et les deux exemples dans la question sont tous tout à fait équivalents en termes d'efficacité. Le code machine dans tous ces cas, pour les comparer A > B, puis la branche, soit à l'Un+1 ou A-1 calcul, puis stocker le résultat dans un registre CPU ou sur la pile.

EDIT :

Sources:

  • MISRA-C:2004 la règle 14.7, qui à son tour cites...:
  • La CEI 61508-3. La partie 3, tableau B. 9.
  • CEI 61508-7. C. 2.9.

4voto

Oli Charlesworth Points 148744

Avec tout compilateur sensible, vous ne devriez observer aucune différence. ils doivent être compilés avec le même code machine car ils sont équivalents.

2voto

juergen d Points 85039

La version A est plus simple et c'est pourquoi je l'utilise.

Et si vous activez tous les avertissements du compilateur en Java, vous obtiendrez un avertissement sur la deuxième version, car elle est inutile et augmente la complexité du code.

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