A volte vedo persone che scrivono nomi di variabili come questo:
int _variable;
IMO È davvero brutto. Di cosa si tratta?
Diciamo che vuoi fare la differenza tra due tipi di variabili (come private e public) molto visive, in modo che chiunque possa dire quale è che semplicemente dando uno sguardo al nome della variabile.
Puoi andare con privatePrice
e publicQuantity
. Questo è difficilmente utilizzabile e richiede più digitazione, spreca più spazio sullo schermo, ecc.
È possibile utilizzare un'abbreviazione o una convenzione, ad esempio rPrice
e uQuantity
. Sembra la notazione ungherese, è fuorviante e non è facilmente individuabile. Mettere solo la prima lettera non aiuta neanche: quale è privato, pPrice
o pQuantity
?
Infine, puoi usare un simbolo. Quali simboli possono essere utilizzati nella maggior parte delle lingue e sono disponibili sulla maggior parte delle tastiere?
I trattini, i punti, le virgole e le parentesi hanno solitamente scopi diversi. I simboli Unicode sono supportati in molte lingue, ma sono difficili da usare quando si digita il codice sorgente. Le lettere accentate come "à" sono facili da digitare sulla mia tastiera di layout francese, ma potrebbe essere molto più difficile da inserire su una tastiera cinese o russa.
Sembra che il carattere di sottolineatura diventi una scelta ovvia.
Informazioni sulla sua bruttezza ...
Brutto è soggettivo. Concentriamoci su nozioni più oggettive. I principi di design e UX, ad esempio, sono in qualche modo molto più obiettivi dei termini "pretty" o "brutto", quindi parliamo di design / UX. Che parola noti nel testo seguente?
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras nec laoreet elit. Nullam egestas eros vel luctus bibendum. Pellentesque habitant morbi tristique senectus et netus et _malesuada fames ac turpis egestas. Sed nec leo sem. Maecenas vitae augue non odio lacinia ornare a eget dolor.
Questo perché il prefisso di sottolineatura è visivamente distintivo. Allo stesso modo, sottolineatura migliora la leggibilità del codice essendo visivamente distintivo come prefisso: se cerchi il codice sorgente per un membro privato, il tuo occhio catturerà identificatori a partire da "_", ma molto meno quelli che contengono semplicemente un sottolineare:
private Price computePrice(Product product)
{
Price result = calculator.ComputePrice(product, Path_Default);
if (_ruleset.isEnabled)
{
result.applyRuleset(_ruleset);
}
return result;
}
Dando un'occhiata a questo pezzo di codice, puoi facilmente notare entrambi _ruleset
, ma non riconoscere visivamente Path_Default
come potenziale corrispondenza.
Informazioni sui vantaggi ...
Mentre ciò migliora la leggibilità, l'uso del carattere di sottolineatura come prefisso non è sempre una buona idea. Alcuni standard e guide di stile, come la guida in stile C # ufficiale, vietano l'uso del carattere di sottolineatura come prefisso per variabili private, allo stesso modo in cui è vietato l'uso della notazione ungherese. Il motivo è che:
Innanzitutto, i casi in cui è necessario conoscere la visibilità di una variabile sono piuttosto rari e, in questi casi, l'IDE aiuta a trovare queste informazioni in meno di tre secondi.
In secondo luogo, tutte quelle notazioni aggiungono disordine visivo. Poiché non è essenziale, dovrebbe essere rimosso.
Terzo, non è insolito trovare un codice come questo:
public string _Title { get; set; }
e il solo fatto che tale convenzione possa portare a codice fuorviante e bug facilmente evitabili, mentre l'IDE non mentirà mai è una buona ragione per evitare tali convenzioni.
Detto questo, altre comunità che usano altre lingue trovano il prefisso di sottolineatura abbastanza utile per comunicare informazioni. Possono correre il rischio che il prefisso del trattino basso diventi fuorviante (se la variabile passa da privato a pubblico o da pubblico a privato ma non è rinominato correttamente), il rischio è simile a quello che uno sviluppatore prende quando scrive un commento che potrebbe non essere aggiornato dai successivi maintainer del pezzo di codice.
Leggi altre domande sui tag coding-style