Convenzioni di denominazione Java rispetto alle convenzioni di denominazione C ++ / C

6

Sono uno sviluppatore Java che sta iniziando a raccogliere sempre più C ++ / C (sì, lo so che sono diversi, sopportare me). Una cosa che mi sembrava strana erano le diverse convenzioni di denominazione utilizzate da questi linguaggi. In Java, è molto comune vedere qualcosa del genere:

int someVariable = someFunction(someParameterToPass);

Tuttavia, in C ++ / C, sembrerebbe un po 'diverso:

int some_variable = some_function(some_parameter_to_pass);

Il motivo per cui lo chiedo è perché io (da solo, nessun team) ho appena iniziato un grande progetto usando C ++ e ora sto usando le convenzioni di denominazione Java nel mio codice (è ciò a cui sono abituato). Ma poi aggiungo alcune librerie esterne al mio codice e mischia le convenzioni di denominazione insieme. Capisco facilmente il codice e uso le differenze per distinguere il mio codice dal codice della libreria.

Devo cambiare la mia convenzione di denominazione per motivi di leggibilità per gli altri (mentre la LOC è relativamente bassa), o attenermi a ciò che sto facendo ora (visto che sono l'unico sviluppatore)?

Nota - il mio codice è stato sottoposto a revisione paritaria, tuttavia i revisori si sono concentrati principalmente sulla funzione del codice. Non hanno menzionato le convenzioni miste, e non le ho espressamente interrogate su questo. Inoltre non avevano esperienza con lo scambio delle convenzioni di denominazione.

    
posta syb0rg 20.07.2013 - 23:21
fonte

2 risposte

12

Questo è il punto in cui trovi il grosso problema con gli standard di codifica basati sullo stile: se il tuo team non scrive l'intera base di codice, scoprirai che ci sono discrepanze con lo standard dell'altro codice.

Quindi, il mio consiglio è di non sudare. Finché il tuo codice è chiaro, non importa se usi la custodia del cammello, il caso pascal o lo stile di sottolineatura. È più importante che il codice sia leggibile.

Non dovresti mai alterare lo stile delle terze parti in quanto ciò renderà impossibile il confronto con le nuove versioni, quindi devi stare con loro. Se hai 2 librerie in stile diverso, non hai altra scelta che seguire uno standard che ignori lo stile del codice. Non è così male, se sei un buon programmatore puoi leggere qualsiasi stile di codice. Se non lo sei, avere uno stile solitario non ti aiuterà affatto.

    
risposta data 21.07.2013 - 00:35
fonte
3

La convenzione di denominazione che citi proviene dalla libreria standard. La convenzione di denominazione è pratica piuttosto che prescrittiva. Cioè, la libreria standard deve introdurre simboli per utilizzare la libreria. La libreria standard vuole limitare quei simboli a un set fisso in modo che gli sviluppatori che usano la libreria non siano sorpresi quando potrebbe esserci una collisione di nomi.

La libreria standard ha scelto di utilizzare tutti i nomi in minuscolo con i separatori dei trattini bassi.

La tua scelta come sviluppatore è quella di usare quella convenzione o un'altra convenzione determinata da te e dal tuo team. L'uso della stessa convenzione può essere più gradevole, ma può anche causare conflitti di nomi (che vengono spesso risolti utilizzando spazi dei nomi, che possono aggiungere rumore al codice).

La convenzione C ++ (libreria non standard) comune è abbastanza vicina a Java.

Dal tuo esempio, una convenzione di denominazione C ++ utilizza in genere un nome di funzione in maiuscolo e un nome di classe in maiuscolo. Per estendere il tuo esempio:

int someVariable = SomeClass.SomeMethod(someParameterToPass);

Un'altra differenza è la convenzione JavaBeans dei nomi dei metodi precedenti con get, set o è prefissi. Molte convenzioni C ++ usano una convenzione simile. Tuttavia, alcuni gruppi preferiscono utilizzare la capacità di C ++ di sovraccaricare i nomi dei metodi in modo che get e set abbiano lo stesso nome ma firme diverse.

class Foo
{
public:
    Bar GetBar() const;
    void SetBar(const Bar& bar);
};

vs

class Foo
{
public:
    Bar Bar() const;
    void Bar(const Bar& bar);
};

Alcuni gruppi preferiscono non utilizzare l'overloading, preferendo la precedente convenzione.

    
risposta data 21.07.2013 - 22:06
fonte

Leggi altre domande sui tag