Quando si confronta una variabile stringa con una stringa letterale con .equals (), esiste una pratica standard per l'ordine degli articoli? [chiuso]

11

Ci sono vantaggi per ognuno e capisco le differenze, ma cosa è considerato migliore / pratica standard? E perché?

Ad esempio:

"myString".equals(myStringVar)
  • Evita un potenziale NPE e non richiede un controllo nullo. (Cosa buona?)
  • Pulitore da leggere poiché non è richiesto un controllo nullo.
  • Se null non è un valore previsto, il tuo programma potrebbe rompersi senza essere più saggio.

Tuttavia

myStringVar.equals("myString")
  • Richiede un controllo nullo se null è un valore previsto. (Cosa buona?)
  • Può ingombrare condizioni condizionali composte con assegni nulli.
  • Consente a NPE di farci sapere se qualcosa si è rotto.

Quale variante è considerata lo standard da utilizzare per Java e perché?

    
posta BrandonV 07.05.2012 - 21:21
fonte

3 risposte

3

Sospetto che ciò provenga da una precauzione di sicurezza usata durante la programmazione in C (o C ++) più vecchi. In C, potresti accidentalmente assegnare un valore quando intendi testare l'uguaglianza:

if (x = 3)

Questa condizione sarà sempre vera, dal momento che è assegnata x un valore di 3, non testando che x sia uguale a 3. Per evitare questi sottili bug, gli sviluppatori hanno iniziato a invertire la condizione:

if (3 = x)

Questo contiene lo stesso "bug", ma genererà un errore del compilatore, quindi è più sicuro.

Più lingue moderne non hanno questo problema e possono facilmente avvisarti quando provi a fare questo genere di cose. In quanto tale, non è praticamente una preferenza pura, quindi sceglierne uno e usarlo in modo coerente.

    
risposta data 07.05.2012 - 21:44
fonte
1
  • Le norme e le buone prassi variano a seconda della cultura di un'organizzazione per cui lavori

  • Il nostro standard in .NET è myStringVar == "myString" semplicemente perché ci siamo accordati, cioè crediamo che sia pulito e conciso

Nota: questo non si applica a Java a causa di == che confronta i riferimenti invece degli oggetti stessi. In Java dovresti utilizzare myStringVar.equals("myString") .

    
risposta data 07.05.2012 - 22:03
fonte
0

Penso che tu abbia ragione in quanto dipende dalla semantica della nullità della variabile. Se non ti aspetti che sia nullo e non devi controllarlo e gestirlo, allora il primo modulo è più pulito.

Detto questo, piuttosto che incorporare la stringa letterale, un'opzione migliore sarebbe probabilmente questa:

private final String MY_STRING = "myString";
if(MY_STRING).equals(myStringVar);

Soprattutto se è possibile utilizzare la stringa in più di una posizione.

    
risposta data 07.05.2012 - 21:58
fonte

Leggi altre domande sui tag