Nei miei precedenti anni di sviluppo in C++, so che era una convenzione per inizializzare sempre le variabili con qualcosa.Assegnazione iniziale Java
Ho portato con me questa convenzione in Java e in realtà qualsiasi altro linguaggio di programmazione che utilizzo.
Io uso IntelliJ IDEA, e io sono completamente soddisfatto, e di solito seguo le sue linee guida di programmazione e le avvertenze, però ho ottenuto questo avvertimento:
public String getText(By by) {
String text = null; // Variable `text` initializer `null` is redundant
WebElement ele = findElement(by);
highlightIfDemoMode(ele);
String tagName = ele.getTagName();
if (tagName.equals("input") ||
tagName.equals("select"))
// For field elements, the text is actually held in values, not the text.
text = ele.getAttribute("value");
else
text = ele.getText();
return text;
}
Ora, ovviamente, in Java,
String text;
// is the *exact* same thing as..
String text = null;
Considerando che IntelliJ è molto bravo a seguire le convenzioni di programmazione, dovrei trascurare quella mia convenzione per non inizializzare le mie variabili come questa in Java? Sento che è molto più pulito, ma se le convenzioni Java mi dicono di non farlo, non lo farò.
Qualcuno potrebbe dirmi se è meglio la pratica per inizializzare, o semplicemente dedurre che si tratta di nulla
Nota comunque che puoi estrarre il costrutto in un metodo separato ed evitare questo modello piuttosto brutto. – biziclop
@biziclop è possibile estrarre qualsiasi cosa in un metodo separato per evitare qualsiasi modello (ad esempio, double-nested per i loop con un'interruzione di apertura). Penso che sia ragionevole non voler scomporlo, specialmente se lo si vuole visivamente ovvio dal metodo di primo livello quando si estrapolano le connessioni. – djechlin
Mi è stato detto che fare una variabile 'final' permette al compilatore/JVM di fare alcune ottimizzazioni che non potrebbe fare altrimenti, come ad esempio l'inlining? – Stewart