Voici le HashCode () Code> Méthode que Eclipse a gentiment généré pour moi:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (id ^ (id >>> 32));
return result;
}
4 Réponses :
Le code doit être simplifié car il fait des choses inutiles que vous avez été informées par Firebug. Cette inspection est valide.
Les choses "inutiles" n'empêchent pas du tout la performance. Le plus de quiconque pourrait vraiment dire sur ce serait une opinion basée.
J'ai précisé dans la question que c'est spécifiquement la question de stocker une valeur, puis de le renvoyer immédiatement que je pose des questions, car c'est ce que les secteurs de Findbugs se plaignent. Je conviens que le reste d'entre eux aurait pu être écrit plus simplement.
La catégorie "effrayante" est-elle également la bonne catégorie? Y a-t-il un bogue potentiel ici? Quel bug? Parce que comme l'op, je ne l'obtiens pas.
La variable locale nécessite une pile pour stocker ses valeurs, vous pouvez également conserver sans eux, vous pouvez également compter les opérations à l'aide de ByTecode et comparer deux implémentations. Il n'y a pas de goulot d'étranglement de la performance mais un peu de frais généraux.
Un compilateur avec une capacité d'optimisation décente devrait être capable de déterminer que l'opération à stocker dans une variable locale sur la pile peut être éliminée dans ce cas.
@ Chiastic-Security La valeur stockée n'est pas utilisée dans le code plutôt que dans la déclaration de retour, c'est ce que Firebug se plaint.
@AJB Parfois, la post-optimisation du code généré peut entraîner une production de code vraiment illisible. Même si vous collez pour coder les règles de mise en forme et de style. Les gens se disputent toujours soit pour utiliser des onglets ou des espaces d'indentation.
Tout en bytecode nécessite une pile pour stocker une valeur, qu'il s'agisse d'une variable nommée ou d'un résultat intermédiaire anonyme. Il n'y a pas de différence.
C'est un code illisible juste là. Le code lisible (et donc maintenable) est beaucoup plus important que le code minimal.
@ E-Riz, il est parfaitement lisible à mes yeux. Mais cela prouve simplement la manière dont cela est individuellement et à quel point il est infructueux d'essayer de fonder des évaluations objectives à ce sujet.
Qui est juste ici? Findbugs ou Eclipse? Est-ce dodgy? P> blockQuote>
Nighter. Le style de code est principalement une question de goût personnel. Il est utile d'avoir un style de code uniforme à travers le projet ou même dans le monde entier, mais aussi longtemps qu'il n'y a pas de directive officielle ni de règles généralement adoptée par une communauté entière, il n'y a pas de style meilleur ni pire. P>
Parfois, certaines règles ont des avantages pratiques. Dans certains cas, le style de Eclipse est plus lisible (si vous avez plusieurs champs). Par ailleurs, comme mentionné la règle de @Romanc Firebug, ont un avantage du contrat d'ajustement de ne pas utiliser de variables s'il n'est pas nécessaire. P>
Parfois, certaines règles d'inspection dans le logiciel de style de code sont trop officielles, mais vous pouvez généralement les éteindre ou réduire leur niveau d'importance. L'IDE que j'utilise également met habituellement l'avertissement obsolète du code sur le code qui génère lui-même. P>
Remarque: les outils de vérification de type code sont configurables. Vous ne pouvez activer que ces règles qui réduiraient les coûts de maintien du code pour vous, votre équipe ou votre organisation. P>
Alors, comment appliquez-vous un style de code uniforme sur le code généré automatiquement par un autre outil?
Il est difficile. Vous pouvez adopter un outil de conseil de type code unique tels que Finsbugs, PMD, CheckStyle (avec outil de construction comme Maven Integration), sonar, quelque chose intégré à l'IDE, etc ... avec du jeu de règles que vous choisissez d'utiliser. Cependant, il n'y a pas d'intégration transparente entre les outils de code de code et de code de code. Les programmeurs doivent généralement examiner le code généré si vous souhaitez gérer le code ajusté aux règles de type code. L'inspection de code intégrée à l'IDE pourrait être une bonne aide et permettre de le faire avec quelques clics de raccourci lors de la configuration.
Le code Eclipse n'est pas si mauvais mais il est inutilement maladroit. Dans de tels cas triviaux, il est souvent préférable de l'écrire à la main. Votre code est essentiellement équivalent à celui-ci:
@Override public int hashCode() { return Long.hashCode(id); }
Cela ne répond pas à la question.
@whiskeySpider Je pense que cela fait - Findbugs souligne le fait que le code est maladroit et c'est ...
C'est moins sur la simplification et plus sur la possibilité que vous ayez oublié quelque chose. Si vous stockez le résultat, c'est très probablement parce que vous voulez faire quelque chose avec elle. Sinon, vous venez de le retourner.
Findbugs vous avertit que vous avez probablement voulu faire quelque chose avec la valeur stockée, mais probablement oublié. P>
public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (int) (id ^ (id >>> 32)); // I meant to do something more here with result, but forgot... return result; }
Je dirais que des lignes inutiles rendent le code plus difficile à lire et à maintenir - Findbugs ressent de la même manière.
Cet article est similaire à ce que vous demandez et possède d'autres réponses qui ne sont pas énumérées ici. Stackoverflow.com/Questtions/15078153 / ...
Je ne peux pas m'empêcher de noter que
Findbugs code> se plaint de Code qui pourrait être simplifié en retournant directement l'expression directement. Mais il pense apparemment que la multiplication par une variable connue pour être 1 est juste pêchy - rien de simple à ce sujet! Mon sentiment d'intestin est que d'essayer d'utiliser un outil automatisé pour détecter les problèmes de style dans le code généré par un autre outil automatisé ne devrait pas être fait, à l'exception de l'amusement.
Findbugs est rarement "juste" à propos de quoi que ce soit; Il met simplement en évidence les choses qui ne répondent pas aux critères configurés. Dans mon expérience, FB a besoin tellement de peaufiner pour être pratique que cela devient, bien, pratique.
@AJB Ce n'est pas un outil aussi avancé. La plupart du temps, c'est juste un bange de plugins correspondant à un modèle unique chacun. (Bien sûr, il y a peu de plus avancé)
Offrirait cette Dodge: Si vous pouvez utiliser Project Lombok, vous n'aurez pas besoin d'utiliser Eclipse pour générer cette méthode et FindBugs ne signalera pas l'erreur. Moins est plus, de toute façon. ProjectLombok.org