web-dev-qa-db-fra.com

Fractionner la déclaration et l'affectation = bonne pratique?

Étant un utilisateur passionné de NetBeans, je reçois toujours des suggestions pour diviser mes déclarations et affectations de variables lorsque j'introduis une nouvelle variable. Comme exemple super rapide du haut de ma tête, prenons cette ligne Java:

String someInput = JOptionPane.showInputDialog(null, "- Enter something: "); 

contre:

String someInput;
someInput = JOptionPane.showInputDialog(null, "- Enter something: "); 

NetBeans semble préférer ce dernier (je ne connais pas les autres IDE, cependant). Bien que cela fonctionne clairement dans les deux sens, qui serait considéré comme une "bonne pratique", le cas échéant? Ou est-ce simplement une question de préférence personnelle?

(Évidemment, la séparation des deux signifie une ligne supplémentaire que vous auriez pu combiner en une seule, mais c'est à côté du point.)

35
Fiery Phoenix

Il n'y a aucune raison de diviser la déclaration et l'affectation si vous voulez simplement les avoir sur des lignes consécutives. Je ne les séparerais que si l'affectation était conditionnelle, ou si elle devait aller dans un bloc de code séparé (comme un try/catch, ou si l'affectation va dans un constructeur, etc.).

40
Bill the Lizard

Un modèle courant qui remonte à la première programmation typée statiquement consiste à déclarer toutes les variables dont vous avez besoin en haut du bloc dans lequel elles doivent être étendues, puis à les affecter par la suite.

Cela dit, tant que vous êtes en mesure de communiquer clairement l'intention de votre code aux personnes avec lesquelles vous travaillez dessus ou à vous-même dans un an, cela ne devrait pas vraiment avoir d'importance.

Modifions notre attitude traditionnelle vis-à-vis de la construction de programmes: au lieu d'imaginer que notre tâche principale est d'instruire un ordinateur sur ce qu'il faut faire, concentrons-nous plutôt sur l'explication aux êtres humains de ce que nous voulons qu'un ordinateur fasse. - Donald Knuth

19
jpredham

C'était une option ajoutée à NetBeans quelque part entre 7.0 et 7.3. Si vous n'aimez pas cet indice, vous pouvez le modifier en décochant: Outils> Options> Éditeur> Conseils> Suggestions> Déclaration fractionnée

Screenshot of NetBeans > Prefs > Hints > Suggestions > Split Declaration

16
Stanley De Boer

Netbeans suggère cela car il peut accélérer le codage, par exemple, considérez cette affectation

final String myString = "somevalue"

Vous décidez ensuite que la valeur dépend en fait de boolean

final String myString;
if(something) {
    myString = "somevalue"
} else {
    myString = "someothervalue"
}

Pour convertir l'un de l'autre, vous pouvez utiliser l'indice de code en déclaration et affectation renversées et if...else modèle pour générer le code en très peu d'étapes.

En général, si vous attribuez sans condition, il n'y a aucune raison de diviser la déclaration et l'affectation.

3
Boris the Spider

Je ne pense pas que ce soit un gros problème. Choisissez un style que vous aimez et respectez-le tout au long (si vous êtes dans une équipe, cela aide si tout le monde présente son code de la même manière).

Personnellement, je préfère initialiser mes variables juste au moment de la déclaration. Pour cette raison, je préférerais le premier au second.

0
NPE

Code Complete, qui est bien considéré par la plupart de la communauté de la programmation, suggère dans sa page 241 qu'en matière de programmation défensive, vous pouvez soit initialiser chaque variable comme elle est déclarée (votre première option), soit l'initialiser près de l'endroit où elle est utilisée pour la première fois. (votre deuxième option).

Néanmoins, le livre suggère que la deuxième option est meilleure car si vous utilisez la première option, votre variable peut avoir changé entre sa déclaration et son utilisation.

Dans votre cas, la différence entre la déclaration et l'utilisation dans le deuxième cas est une seule ligne. Par conséquent, les préoccupations du livre ne s'appliquent pas. Néanmoins, ses préoccupations sont légitimes et cela peut être la raison pour laquelle les concepteurs de Netbeans ont inclus cette astuce (même s'ils l'ont surutilisée).

0
rlinden