Qualcuno può spiegarmi la convenzione di codifica di C #?


14

Di recente ho iniziato a lavorare con Unity3D e principalmente scripting con C #. Dato che normalmente programma in Java, le differenze non sono troppo grandi, ma ho comunque fatto riferimento a un corso intensivo solo per assicurarmi di essere sulla strada giusta.

Tuttavia, la mia più grande curiosità con C # è che capitalizza la prima lettera dei nomi dei suoi metodi (es. Java: getPrime()C #: GetPrime()aka: Pascal Case?). C'è una buona ragione per questo? Capisco dalla pagina del corso di crash che ho letto che apparentemente è una convenzione per .Net e non ho modo di cambiarlo mai, ma sono curioso di sapere perché è stato fatto in questo modo al contrario del normale (relativo?) Caso di cammello che, ad esempio, Java utilizza.

Nota: capisco che i linguaggi hanno le loro convenzioni di codifica (i metodi Python sono tutti minuscoli, che si applica anche a questa domanda), ma non ho mai veramente capito perché non sia formalizzato in uno standard.


18
Io davvero non credo che si può guardare camelCasee PascalCaseed underscore_casee dire che uno di loro è normale (anche relativamente normale) e gli altri non. Come ha detto @dasblinkenlight, è una scelta arbitraria. L'unica cosa che ti fa pensare che la convenzione di C # sia inusuale è che "normalmente programmi in Java", e quindi sei abituato alla scelta arbitraria fatta per Java.
Carson63000,

Usa invece JavaScript .. per Unity3D :)
Lipis,

@Lipis Perché - oltre al gusto personale? ;-)
dopo il

@AedonEtLIRA totalmente personale .. non importa :) Goditi l'Unità, indipendentemente dalla lingua .. finirai per usare ..
Lipis,

@Lipis Finora è fantastico. Tonnellate di campane e fischietti e non ho ancora lasciato cadere soldi su di esso. Ma preferisco lo stile strutturato di C # (c / c ++) e java.
domenica

Risposte:


27

Le convenzioni di denominazione rappresentano scelte arbitrarie del loro editore. Non c'è nulla nella lingua stessa che ti proibisca di nominare i tuoi metodi come fai in Java: fintanto che il primo carattere è una lettera / trattino basso e tutti gli altri caratteri sono lettere, cifre o caratteri di sottolineatura, C # non lo farà lamentarsi. Tuttavia, le librerie di classi fornite con .NET seguono una convenzione adottata internamente da Microsoft. Microsoft ha anche pubblicato queste linee guida , in modo che altri possano scegliere di adottarle anche per le proprie librerie di classi. Sebbene sia una tua scelta seguire o ignorare le linee guida di Microsoft, la familiarizzazione con il tuo codice da parte di altri potrebbe andare più veloce se segui le stesse linee guida per i nomi.


Tuttavia, di solito c'è una logica dietro una convention, e quando leggo "C'è una buona ragione per questo?" Lo capisco come una domanda su PERCHÉ non COSA.
Greenoldman,

Pascal per membri pubblici / interni / statici e tutti i metodi. Cammello per privati. Aiuta a distinguere l'ambito di un token durante la scansione. La thisparola chiave fa lo stesso. Le scelte di stile sono pratiche, anche se possono sembrare aliene
Gusdor il

23

Forse a causa dell'influenza di Pascal / Delphi. Il creatore di C # e Delphi era la stessa persona dopo tutto (Anders Hejlsberg).

Le convenzioni di codifica Delphi in genere sembrano essere le stesse di C # in questo aspetto; vedi http://www.econos.de/delphi/cs.html#ObjectPascal_Procedures o http://wiki.delphi-jedi.org/index.php?title=Style_Guide#Method_Naming - coincidenza?


4
Un +1 per questo perché fornisce quello che potrebbe essere il vero motivo per cui questa particolare scelta arbitraria è stata fatta per C #.
Maximus Minimus,

4

Oltre alle altre risposte fatte, avere il caso cammello per i metodi significa che possono entrare in conflitto con nomi per membri privati, parametri e variabili di metodo che usano il caso cammello per la loro denominazione. In Java (e C # 1.0) questo non è terribilmente comune poiché l'uso dei delegati è scomodo e raro. Nel C # moderno non è esattamente comune , ma non è nemmeno inaudito.


1
Il carattere di sottolineatura non deve essere utilizzato in campi privati ​​C # (consultare blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx , ad esempio), ma è controverso e spesso trovato.
Jens,

1
fare affidamento sul case per distinguere tra costrutti del linguaggio è una pessima idea, indipendentemente dal fatto che il linguaggio ti permetta o meno di farlo.
gbjbaanb,

4
@Telastyn questa affermazione è piuttosto scioccante. La maggior parte della libreria di classi .NET utilizza tale convenzione.
MattDavey,

1
@Dunk com'è improvvisamente la mia convention? Stavo semplicemente trasmettendo un commento, non ho un'opinione in merito in entrambi i casi :)
MattDavey,

2
@MarjanVenema: non sono sicuro di cosa tu stia parlando, ma C # è abbastanza sensibile al maiuscolo / minuscolo e puoi sicuramente avere collisioni tra membri con casing simile. Questo diventa divertente ed eccitante quando hai dei veri e propri linguaggi INsensitive come VB.NET con cui stai lavorando a livello di libreria.
Wyatt Barnett,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.