2009-04-23 13 views
17

In molte lingue con funzionalità OO semplice (PHP 4) o capacità OO incomprese (Javascript, C utilizzando i puntatori di funzioni, ecc.), Si finirà con una convenzione di denominazione delle funzioni che utilizza il comando principale sottolinea per indicare il livello di privilegio._Underscores nei nomi delle funzioni

//ex. 
function _myPrivateFunction(){ 
} 

Mentre singole squadre sono sempre andando a venire con le proprie convenzioni di denominazione come questo, la convenzione di sottolineatura sembra così prevalente che mi ha fatto curioso di

  1. Quando la tecnica di prima è venuto da
  2. Se ci fosse mai eventuali sistemi standardizzati (un po 'come la notazione ungherese) sviluppato attorno alla convenzione

al di là di pura curiosità, mi' Sto vedendo questo in alcune codebase di cui mi sto occupando in questo momento, e mi piacerebbe capire i possibili headspaces degli sviluppatori che originariamente lo hanno inventato.

+2

In Python non è solo una convenzione di denominazione, ma due trattini di sottolineatura principali rendono i membri privati! –

risposta

12

Nel mondo C++, i nomi dei membri che iniziano con underscore sono riservati agli sviluppatori di compilatori (o di basso livello STL come API). Non è vietato dai compilatori in alcun modo, ma questa è la tradizione.

Questo link wiki è abbastanza informativo su underscore.

+7

In realtà, tutti i nomi che iniziano con un trattino basso sono riservati nello spazio dei nomi globale, ma solo i nomi che contengono il doppio trattino basso o che iniziano con il carattere di sottolineatura e una lettera * maiuscola * sono riservati in tutti i contesti. Vedi http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-a-ident-identifier o 17.4.3 nello standard. –

+0

Sembra il più vecchio, quindi una vittoria per te. @onebyone, sto iniziando a capire veramente perché il C++ ora fa un rap così cattivo :) –

+0

Presumo che il link al wiki di underscore sia inteso come riferimento a quello di programmazione (è stata aggiunta la disambiguazione dopo che questo link è stato aggiunto alla risposta I pensare). Quindi dovrebbe probabilmente essere cambiato in: https://en.wikipedia.org/wiki/Naming_convention_(programming)? – Joakim

0

L'ho visto per la prima volta durante la codifica del C++. Le variabili dei membri di marcatura con prefisso "m_" venivano comunemente eseguite.

Preferisco non utilizzarlo quando scrivo Java. Rendo chiare le variabili membro usando "questo".

+0

Le variabili membro vengono automaticamente contrassegnate in java perché gli strumenti utilizzano l'analisi statica. Guarda il colore delle tue variabili in qualsiasi editor che usi! Mettendo questo. di fronte implica che ci si basa su di esso per il riconoscimento. Se stai facendo affidamento su qualche ricordo umano da usare.questo invece di una macchina che CONOSCE esattamente quale sia la variabile, stai ovviamente facendo affidamento sull'indicatore sbagliato. –

+0

Questo è vero, Bill. Sono corretto. – duffymo

+0

Giusto o sbagliato, sospetto che alcune persone scrivano ancora (o soprattutto leggano) Java usando editor di testo che non possono fare analisi del codice decenti (o nessuna). Cerco di trattare l'evidenziazione della sintassi come qualcosa che mi aiuta a modificare, non come qualcosa di cui gli altri hanno bisogno se vogliono essere in grado di leggere il mio codice ... –

6

Non posso dirvi l'origine di questa convenzione. La mia ipotesi è che, poiché il carattere di sottolineatura è l'unico carattere non alfanumerico consentito negli identificatori nella maggior parte dei linguaggi di programmazione, è naturale sceglierlo come prefisso per i membri privati.

In Python, il prefisso dei nomi con un carattere di sottolineatura è più che una convenzione: i simboli che iniziano con un carattere di sottolineatura non vengono importati di default quando si importa "tutto" da un modulo, pertanto il carattere di sottolineatura indica "privato"/"uso interno" .

0

ho visto sottolineatura utilizzato come funzioni private e ho visto visto sottolineatura come funzioni globali. Anche underscore è usato per indicare le variabili globali all'interno di PHP stesso.

$_POST $_GET $_SESSION etc.. 

È solo una convenzione di denominazione, quindi chiedo all'autore, se è nei paraggi.