8
votes

Affectation de variable locale pour éviter plusieurs coulées

Il y avait récemment une question demandant si ce fut une bonne idée de Java d'affecter les résultats d'appel à une getter à une variable locale pour éviter plusieurs appels sur le même accessoir. Je ne trouve pas le message d'origine, mais le consensus semblait être que cela n'était généralement pas nécessaire que Hotspot optimisera l'élimination de la méthode des rapports d'appel de toute façon.

Cependant, quelle est la vue sur l'utilisation de cette technique pour éviter plusieurs moulages? Au moment où je suis confronté à un choix entre: xxx

ou xxx


0 commentaires

8 Réponses :


3
votes

Je préfère le premier, car il a l'air plus propre. La seconde commence à ressembler à lisp . Mais c'est juste une opinion personnelle.


1 commentaires

Rien, j'aime Lisp, il arrive d'avoir beaucoup de parenthèses, c'est tout.



19
votes

Je préfère créer la variable locale plutôt que de toujours casser en raison de problèmes de lisibilité. La lisibilité du code, pour moi (ou d'autres développeurs travaillant sur le même code), est un problème important.

S'inquiéter des performances à ce stade me frappe comme exemple du modèle "Optimisation prématurée".


1 commentaires

Merci - c'est déjà déjà mon approche préférée; Je voulais juste une certaine validation de la communauté des programmeurs.



1
votes

Absolument une bonne idée car elle améliore la clarté. Je dirais que cela s'applique aussi à éviter les appels multiples accessoires. C'est une bonne idée de clarté et non des raisons de performance.


0 commentaires

13
votes

aller certainement avec le premier. La différence de performance est susceptible d'être non pertinente, mais la lisibilité est définitivement améliorée.

En plus de supprimer les cases, cela signifie également que vous pouvez utiliser un nom différent - après tout, vous en savez maintenant plus sur cette variable, il peut donc bien avoir un sens de lui donner un nom plus spécifique. Ce n'est pas toujours le cas, mais cela peut être. "Introduire la variable locale pour la nommage de la valeur d'une valeur" La technique de refactoring est sous-estimée, même sans les couts ...


0 commentaires

3
votes

Je dirais que la chose importante n'est pas d'optimiser prématurément. S'il y a des frais généraux pour coulée, il est probable que cela soit si petit qu'il serait effectivement imperceptible dans la pratique. À moins que cet extrait de code a formé la majorité de l'heure du processeur de votre application, je ne pense pas que vous verriez une différence de performance mesurable entre les deux.

Par conséquent, j'irais aussi pour la première option car il a l'air plus propre et plus facile à comprendre et à modifier - beaucoup plus important que d'exécuter quelques cycles d'horlogerie plus rapides dans 99,99% des situations.


0 commentaires

1
votes

Je préfère la première option, pour deux raisons

  1. Les parenthèses nécessaires rendent le code kludgy et difficile à lire
  2. Il y a peut-être une (petite) surcharge dans la distribution

0 commentaires

0
votes

Je préfère le premier, pas seulement pour la lisibilité du code, mais pour le débogage de l'exécution des sakes (également pour l'exemple original - si vous définissez le getter dans une locale, vous voyez cette valeur plutôt que de devoir tracer dans le getter la première fois).


0 commentaires

0
votes

Je suis d'accord avec les personnes qui disent que la première version est préférable, mais j'aimerais ajouter que le cas échéant, et il est presque toujours possible - vous devriez éviter de coulée en premier lieu. Pas pour des raisons de performance, mais juste pour le contrôle supplémentaire sur la correction de code.


0 commentaires