Supposons que j'ai une instruction if
avec une 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
Devrais-je préférer l'un ou l'autre lorsque j'utilise un langage compilé (C) ou un script (Python)?
Étant donné que l'instruction return
termine 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 de toute façon fausse.
Notez que Python prend en charge une syntaxe qui vous permet d’utiliser une seule instruction return
dans votre cas:
return A+1 if A > B else A-1
De Chrome Guide de style:
Ne pas utiliser d'autre après le retour:
# Bad
if (foo)
return 1
else
return 2
# Good
if (foo)
return 1
return 2
return 1 if foo else 2
En ce qui concerne le style de codage:
La plupart des normes de codage, quelle que soit leur langue, interdisent les déclarations renvoyées à partir d'une seule fonction, ce qui constitue une mauvaise pratique.
(Bien que personnellement, je dirais qu'il existe plusieurs cas où plusieurs instructions de retour ont du sens: analyseurs syntaxiques de protocole texte/données, fonctions avec traitement étendu des erreurs, etc.)
Le consensus de toutes ces normes de codage de l'industrie est que l'expression devrait être écrite comme suit:
int result;
if(A > B)
{
result = A+1;
}
else
{
result = A-1;
}
return result;
En ce qui concerne l'efficacité:
L'exemple ci-dessus et les deux exemples de la question sont tous complètement équivalents en termes d'efficacité. Dans tous ces cas, le code machine doit comparer A> B, puis se connecter au calcul A + 1 ou A-1, puis stocker le résultat dans un registre de CPU ou sur la pile.
MODIFIER :
Sources:
Quel que soit le compilateur sensible, vous ne devriez observer aucune différence. ils devraient être compilés avec le même code machine car ils sont équivalents.
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.
Personnellement, j'évite les blocs else
lorsque cela est possible. Voir la Campagne anti-si
En outre, ils ne facturent pas de frais supplémentaires pour la ligne, vous savez: p
"Le simple est meilleur que le complexe" & "La lisibilité est roi"
delta = 1 if (A > B) else -1
return A + delta
Je sais que la question est étiquetée python, mais elle mentionne des langages dynamiques, alors j’ai pensé que je devrais mentionner que dans Ruby, l’instruction if a en fait un type de retour afin que vous puissiez faire quelque chose comme:
def foo
rv = if (A > B)
A+1
else
A-1
end
return rv
end
Ou parce qu'il a aussi un retour implicite simplement
def foo
if (A>B)
A+1
else
A-1
end
end
ce qui résout le problème de style de ne pas avoir plusieurs retours assez bien.
Pensez-y comme ceci:
if (a > b):
output = a + 1
output = a - 1
return output
Versus ceci:
if (a > b):
output = a + 1
else:
output = a - 1
return output
Le premier exemple est non fonctionnel, alors que le second fonctionne bien. Ils ont les mêmes performances, je vous recommande donc d'utiliser l'exemple 2, car il est plus facile à lire à mon avis.