11
votes

Bonne pratique: boucle et instruction si

(je copie la même question que j'ai posté sur Codereview ici: https://codereview.stackexchange.com/questions/1747/good-practice-loop-and-if-statement )

J'aimerais savoir quel est le Meilleure pratique:

version A: xxx

ou, version B: xxx

i ' VE Mise en œuvre de la version B parce qu'elle est plus lisible pour moi, et de vérifier toujours que le même état semble absurde.

mais la boucle n fois que le même tableau pourrait également être considéré comme absurde :)


4 commentaires

Juste hors de curiosité, pourquoi ce post est-il tagué avec C #, Java, PHP, JavaScript et Ruby? Cela semble être plus une question d'agnostique linguistique.


C'est complètement agnostique, c'est pourquoi j'essaie de faire la visibilité de toutes les communautés (limite 5 étiquettes)


La langue-agnostique peut être une meilleure étiquette, si c'est ce que vous voulez.


Je viens d'ignorer qu'il existe! La question est-elle postée partout?


5 Réponses :


2
votes

La version B est beaucoup plus appréciable, car vous pouvez généralement désirer xxx

qui ne peut pas être refacturé rapide et facile à partir de A.

EDIT: Cependant, si la "condition" de la boucle est dynamiquement dynamiquement par son corps, vous devez utiliser A. Plus d'informations sur la sémantique du code sont nécessaires.


0 commentaires

1
votes

Dans le scénario A, vous faites trois chèques if-chèques pour chaque réitération de la boucle. Dans le scénario B, vous n'avez que trois chèques if-chèques. En termes de complexité de temps, la deuxième version est bien meilleure.


2 commentaires

Chaque boucle a une condition aussi bien.


Oui, le lézard est correct, mais imo la condition de boucle est dans la majorité des cas plus simples que la condition de «règle des affaires». Ainsi, il est probablement judicieux de minimiser la condition de «règle d'entreprise» est évaluée.



2
votes

Eh bien, je pense que la réponse est plus qualifiée qu'il ne semblerait. La plupart des pratiques de codage suggèrent de garder les blocs de code petit, donc de cet angle, cela revient vraiment à «Quelle est la taille du bloc entier»? Mais je considérerais cela en fonction de l'intention du code. Par exemple: xxx

vs: xxx

Chaque structure raconte une histoire différente de votre intention. Dans le premier cas, nous sommes itérients sur les widgets et nous prenons des décisions sur chacun, tandis que dans ce dernier cas, nous saisons des décisions dans une boucle déroulée et apporter des modifications aux widgets. Ceci bien sûr a plus de sens pour les cas d'autre, mais en général, si vous pouvez faire une déclaration sur un bloc de code facilement (par exemple, dans cette boucle, je trie les widgets par couleur) sans avoir à écrire un paragraphe, c'est le Code le plus compréhensible, et c'est l'objectif des meilleures pratiques de commencer.

Bien sûr, la performance est également un problème. Je suppose que les performances et les meilleures pratiques sont des amis mal à l'aisance. Si vous frappez la base de données pour que l'itération obtienne chaque ligne ou si l'itération dépasse des milliers d'entrées, il est parfois nécessaire d'écrire un code axé sur l'intente qui réduit l'action la plus lente au minimum. Ce n'est pas la première considération, mais l'écriture de code efficace nécessite un code pour examiner les choses de tous les angles et faire des compromis, de sorte que les règles ne sont pas si difficiles et rapides.


0 commentaires

7
votes

Du fait que vous envisagez de la version B, qui présente les conditions en dehors des boucles, je suppose que la valeur de vérité des conditions ne varie pas avec les éléments de la matrice. Sinon, votre question n'aura pas de sens.

conclusion forte> p>

Si les conditions sont compliquées de manière à ce qu'ils prennent beaucoup de temps dans l'évaluation par rapport à la taille de la matrice, puis la version B est plus rapide. Si c'est l'inverse, la version A est plus rapide. P>

et qui est plus rapide doit coïncider dans ce cas avec quelle stratégie à prendre car il est plus compréhensible d'avoir une structure simple intégrée à une structure compliquée Structure plutôt que d'avoir une incorporation d'une structure compliquée dans une structure simple. p>

Explication forte> p>

Lorsque la condition est assez simple par rapport à la taille du tableau , le coût de l'itération l'emporte sur le coût d'évaluation de la condition. Comme observé ci-dessous avec Ruby, la version B est plus lente. P>

$a = (1..100)

def versionA
  $a.each do
    nil if (1..10).each{nil} && true
    nil if (1..10).each{nil} && false
    nil if (1..10).each{nil} && true
  end
end

def versionB
  $a.each {nil} if (1..10).each{nil} && true
  $a.each {nil} if (1..10).each{nil} && false
  $a.each {nil} if (1..10).each{nil} && true
end

require 'benchmark'
n = 10000
Benchmark.bmbm do|b|
  b.report('A'){n.times{versionA}}
  b.report('B'){n.times{versionB}}
end

Rehearsal -------------------------------------
A   2.860000   0.000000   2.860000 (  2.862344)
B   0.160000   0.000000   0.160000 (  0.169304)
---------------------------- total: 3.020000sec

        user     system      total        real
A   2.830000   0.000000   2.830000 (  2.826170)
B   0.170000   0.000000   0.170000 (  0.168738)


1 commentaires

C'est une réponse brillante, merci beaucoup.



0
votes

Qu'en est-il de si vous devez vous permettre 2 conditions?

Si la condition1 et la condition2 sont tous deux verfaits ce qui va arriver?

Je pense qu'une condition est meilleure


0 commentaires