2013-08-17 13 views
5

Attualmente sto passando attraverso il learncpp.com di esercitazioni C++ e sto vedendo che la loro tendenza di denominazione delle variabili ha nominare le variabili int con un prefisso "n" (cioè int nValue) e "ch" per le variabili char (vale a dire char chOperation). È questo qualcosa che è comune nel settore che dovrei formare come un'abitudine ora?"n" o "ch" prefissi prefissi comuni quando si nominano le variabili int o char in C++?

+0

Si sta parlando di una derivazione della notazione ungherese di nomi di variabili e, onestamente, non ha molta importanza se si è coerenti e il codice è * leggibile *. – WhozCraig

+1

In realtà i prefissi 'n' e' ch' sono _Systems_ Hungarian, non _Apps_ Hungarian. Ci sono un sacco di persone in giro, tra cui molti programmatori e guru leggendari, che sostengono fortemente contro i sistemi ungheresi, anche se il codice è "coerente". Persino le persone che dicono che la notazione ungherese va bene oggi, praticamente dicono che sono le app, * non * il sistema, ungherese accettabile. Dettagli sulla [pagina di Wikipedia per la notazione ungherese] (http://en.wikipedia.org/wiki/Hungarian_notation). –

+0

Penso che questa sia una buona lettura: http://herbsutter.com/2008/07/15/hungarian-notation-is-clearly-goodbad/ –

risposta

11

È qualcosa che è comune nel settore?

Questa pratica era comune in alcune parti del Microsoft venti o trenta anni fa, a causa di un fraintendimento di un somewhat more useful convention usato da altre parti della società (che di variabili di tagging manifesta l'intenzione di scopo che, in un debolmente lingua digitato, può aiutare a evitare vari tipi di errore di categoria). Nessuna delle due convenzioni è utile in un linguaggio fortemente tipizzato come il C++: il sistema di tipi può rilevare automaticamente tali errori in modo più affidabile.

È diventato ampiamente utilizzato da altri, molto tempo dopo che Microsoft (presumibilmente) si rese conto che era inutile e advised against its use, presumibilmente nella convinzione che l'emulazione delle abitudini di Microsoft potesse anche emularne il successo. È ancora occasionalmente visto oggi, da persone che sviluppano abitudini e non mettono mai in discussione la loro utilità, e da aziende che danno la priorità alle guide di stile sopra il software.

Personalmente, trovo utile come avvertimento che il codice contiene probabilmente orrori peggiori.

Dovrei formare un'abitudine ora?

Serve solo a rendere il codice più difficile da leggere e fuorviante se si dimentica di aggiornare i tag quando si modifica il tipo di una variabile. Dovresti sviluppare l'abitudine di scrivere codice chiaro e leggibile, non di cospargerlo di misteriose rune.

Disclaimer: i brevi commenti su Microsoft hanno lo scopo di fornire un contesto storico e non sono intesi come un resoconto autorevole delle decisioni politiche di Microsoft; in particolare la frase "[Microsoft] realizzo [it] era inutile" intende intendere "[alcune persone in Microsoft] hanno realizzato [l'argomento in discussione, utilizzando tag di tipo ridondanti nel moderno C++ nella maggior parte dei contesti] era inutile" non (come sembra che il commentatore abbia letto) "[l'interezza di Microsoft] si è resa conto che [l'uso di tag variabili] era inutile". Tutte le opinioni sono mie e possono essere basate su una conoscenza imperfetta.

+0

Non stai fornendo esattamente molti riferimenti all'argomento "Microsoft ha capito che era inutile". Anche se non suggerirei necessariamente di usare una sorta di notazione ungherese con C++, sicuramente aiuta un ** lotto ** quando si ha a che fare con un'interfaccia C (come l'API di Windows). Io per un valore un parametro di dimensione formale disambiguato che indica se è la dimensione in byte ('cb') o il numero di caratteri (' cch'). – IInspectable

+1

@IInspectable: non pensavo che sarebbe stato necessario un riferimento, ma [qui è uno] (http://msdn.microsoft.com/en-us/library/ms229045.aspx). Per citare (con la loro enfasi): "** NON usare ** la notazione ungherese". –

+1

Uhm .... che è .NET, circa altrettanto fortemente digitato come C++. La Microsoft di cui stavi parlando è la Microsoft di venti o trenta anni fa, che si sarebbe resa conto che è un errore incorporare informazioni semantiche nei nomi dei parametri per un'interfaccia C. Stavo pensando a quel tipo di riferimento. – IInspectable

2

Sì, sono comuni (esp. In progetti di Windows correlati)

Ma diversi progetti potrebbero utilizzare diversi stili di codifica. Quindi, se stai lavorando con un progetto esistente, il meglio è attenersi allo stile che segue.

Lo stile di denominazione menzionato è noto come Hungarian style, che viene in genere utilizzato nei progetti correlati a Windows. Nello stile ungherese, variabili vengono formattati in caso cammello (ad esempio, CamelCase) e prefisso loro portata e tipi:

[scope prefix]_[variable type][actual variable name in camel-cased style] 

Ad esempio:

m_nMemberInteger 

è un numero intero (secondo esso prefisso n), inoltre, è una variabile membro (in base al suo prefisso m_) a qualche struttura/classe e puoi trovare l'elenco completo di prefissi di tipo scope e tipo utilizzati nello stile ungherese nel link sopra.

Tuttavia, nei progetti basati su Linux, di solito trovare persone con diversi stili di codifica (per esempio, Google c++ coding style), che utilizza solo il primo ciclo casi e sottolineano _ per citarne loro variabili.

0

Questo è simile alla notazione ungherese. A volte queste cose vengono usate, specialmente in certi campi della programmazione. Personalmente penso che faccia sembrare il codice disordinato. In C++ dovresti pensare più a cosa significa l'oggetto piuttosto che a cosa potrebbe essere il suo tipo sottostante. E gli editor moderni ti permettono facilmente di cercare il tipo di variabili, quindi è un po 'obsoleto. Posso capire perché è stato usato quando gli editor non erano così utili ..

-1

Come alcuni hanno già commentato, questo sembra una versione di notazione ungherese.

La notazione ungherese ha lo scopo di codificare il tipo di variabile nel nome. Alcuni team di sviluppo applicare questa pratica, ma a me sembra un cattivo stile perché:

  1. Se si cambia il tipo di variabile, è necessario modificare il nome, che può causare alcune conversioni implicite molto pericolosi per verificarsi quando si don Fallo.

  2. Non incoraggia nomi di variabili specifiche chiare e di destinazione che costringe conseguenza il manutentore di decodificare i vostri nomi delle variabili in stile ungherese piuttosto che solo la lettura del nome assegnato in chiaro linguaggio naturale.

  3. Il completamento del nome di variabile in un IDE diventa praticamente inutile.

  4. Sembra brutto (per esempi di cosa intendo, guarda l'API win32.

  5. C'è spesso ambiguità, soprattutto se si dispone di riferimenti a molti tipi di dati personalizzati.

Per una buona discussione di stile vedono the Stanford CS106B guide to variable names per una copertura più approfondita dei motivi.

Inoltre, assicurarsi di guardare The Wikipedia page on Hungarian Notation

0

Come accennato negli altri commenti, questo è noto come "notazione ungherese" e viene usato per fare il tipo di una evidente variabile. Mentre è forse discutibile se valga la pena di etichettare il tipo, un'altra convenzione comune (specialmente in C++) è quella di usare i prefissi per indicare le informazioni sull'utilizzo di una variabile. Questo è particolarmente utile per riferimenti e variabili membro. Ad esempio, si potrebbe avere una funzione che assomiglia

void MyClass::myMethod(const int& iInput, int& oOutput, int &ioInputAndOutput) 
{ 
    oOutput = ioInputAndOutput + mMemberData + iInput; 
    ioInputAndOutput *= 2; 
} 

Come detto anche in precedenza, l'importante è la coerenza, che impedirà più bachi di qualsiasi particolare convenzione. Su progetti collaborativi, di solito vale la pena conformarsi alla convenzione esistente.

Problemi correlati