11
votes

Pourquoi les gens utilisent-ils i = i + 1 au lieu de i ++?

J'ai vu cela dans un certain nombre de boucles et d'incréments. Au lieu de faire i ++, ils font i + = 1. Pourquoi est-ce?


2 commentaires

Pourquoi votre question est-elle dans le titre différent de la question dans le corps? Lequel pensez-vous de demander?


J'utilise i + = 1 , sauf dans la 3ème position d'une boucle à boucle dans laquelle j'utilise i ++ .


6 Réponses :


15
votes

Préférence personnelle et style.


0 commentaires

3
votes

empêche l'excès d'effrayage. Au moins c'est ce que Crockford dit.


1 commentaires

Cependant, le code de Crafty sera Crafty sans "++" et le code de nettoyage sera propre code avec "++".



10
votes

Toutes les langues n'ont pas ++ opérateur (Python, pour une) ... Probablement ces personnes proviennent d'un arrière-plan dans l'une de ces langues. De plus, certaines personnes sentent que i ++ n'est pas très clair, d'autant plus que certaines langues traitent i ++ et ++ i différemment.


3 commentaires

Chaque langue que je connaisse des friandises i ++ et ++ i différemment dans une voie exactement: la valeur de l'expression. En d'autres termes, x = i ++; attribue une valeur inférieure à un à x que x = ++ i . Est-ce ce que tu avais en tête? Je suis curieux de votre utilisation du mot "certains"; Connaissez-vous les langues qui ont à la fois des opérateurs d'incréments de préfixes et de postfix et ne font pas cette distinction?


@Teté Hopper Perl retournera une valeur valeur ou une référence en fonction d'un incrément pré ou post. Cela peut conduire à un comportement déroutant. Sous la forme de base, ce n'est pas un problème. Ceci est très perplexe dans des cas de FOO ($ x, ++ x x) , cependant (l'évaluation arrive toujours de gauche à droite). De plus, C / C ++ a beaucoup d'UB avec des modifications variables (++ / -) et un accès entre deux points de séquence.


Dans JavaScript pour le navigateur IE10 (et probablement <10 aussi) I ++ est 15% plus lent que i + = 1. Ainsi, je préfère toujours utiliser i + = 1, juste parce que c'est plus rapide et sémantiquement, il est pratiquement le même droit.



2
votes

i = i + 1 est plus facile à décoder en anglais. i ++ Bien que totalement correct ne fonctionne pas bien lorsque les débutants lisent le code. Le programmeur essayait éventuellement de rendre leur code plus lisible par les débutants, ou peut-être tout simplement pas d'essayer d'être trop préoccupé par la syntaxe. Il n'y a pas bonne la raison d'utiliser un sur l'autre.


0 commentaires

0
votes

Certaines personnes trouvent i = i + 1 ou i + = 1 plus descriptif que i ++ . C'est juste une question de style de codage et de lisibilité. Dans la plupart des langues actuelles, aucune différence de performance n'est pas du tout entre les différentes manières.

Il existe des problèmes de lisibilité avec le ++ et - les opérateurs, mais c'est surtout quand ils sont utilisés avec d'autres opérateurs, ce n'est pas vraiment un problème quand ils sont utilisés par eux-mêmes. Une expression comme ++ x + - ++ y + -z ++ par exemple est parfaitement valide, mais il est difficile de voir ce que cela fait réellement. À mesure que les opérateurs causent des problèmes de lisibilité dans certains cas, certains estiment qu'ils devraient toujours être évités.


2 commentaires

C'est un extrême, cependant. Pendant que je préfère + = à ++ , bon code est bon code et le code Bad est mauvais code: ++ x + - ++ y + -z ++ n'est pas bon code, ++ à part. Par exemple, imaginez si la "règle" pour utiliser i ++ (ou même ++ i ) est "uniquement dans un contexte de déclaration". Ce non différent des «règles» qui limitent l'utilisation de x = i = i + 1 ou d'autres monstruosités.


@pst: Bien sûr, c'est un mauvais code, le point de l'exemple consistait à démontrer que les opérateurs peuvent être utilisés pour écrire un code illisible.



3
votes

La raison générale est qu'il existe deux versions d'incrément différentes qui se comportent différemment xxx

et xxx

++ i traduit par " incrément i, puis évalue " alors que i ++ traduit par " évaluer i, puis incrément " "

Lorsque vous écrivez ces expressions comme i = i + 1; Il est clair que l'intention du programmeur était et plus facile à trouver des bogues dans le code. C'est la même raison que les gens écrivent " des clauses yoda " comme xxx

car si vous faites accidentellement xxx

Il est plus facile d'attraper l'erreur


0 commentaires