¿Alguien puede explicarme la convención de codificación de C #?

14

Recientemente comencé a trabajar con Unity3D y principalmente a crear scripts con C #. Como normalmente programo en Java, las diferencias no son demasiado grandes, pero todavía me referí a un curso intensivo solo para asegurarme de que estoy en el camino correcto.

Sin embargo, mi mayor curiosidad con C # es que escribe en mayúscula la primera letra de los nombres de sus métodos (por ejemplo, Java: getPrime()C #: GetPrime()aka: Pascal Case?). ¿Hay alguna buena razón para esto? Entiendo por la página del curso intensivo que leí que aparentemente es una convención para .Net y no tengo forma de cambiarlo, pero tengo curiosidad por saber por qué se hizo así en comparación con el caso de camellos normal (¿relativo?) que, digamos, utiliza Java.

Nota: Entiendo que los lenguajes tienen sus propias convenciones de codificación (todos los métodos de Python son minúsculas, lo que también se aplica en esta pregunta) pero nunca he entendido realmente por qué no está formalizado en un estándar.

ahodder
fuente
18
Realmente no creo que se pueda mirar camelCasey PascalCasey underscore_casey decir que uno de ellos es normal (aunque relativamente normal) y los otros no. Como dijo @dasblinkenlight, es una elección arbitraria. Lo único que le hace pensar que la convención de C # es inusual es que "normalmente programa en Java" y, por lo tanto, está acostumbrado a la elección arbitraria hecha para Java.
Carson63000
Utilice JavaScript en su lugar ... para Unity3D :)
Lipis
@Lipis ¿Por qué, aparte del gusto personal? ;-)
ahodder
@AedonEtLIRA totalmente personal ... no importa :) Disfruta de Unity sin importar el idioma ... terminarás usando ...
Lipis
@Lipis Hasta ahora es genial. Toneladas de campanas y silbatos y todavía no he dejado caer dinero en eso. Pero prefiero el estilo estructurado de C # (c / c ++) y java.
ahodder

Respuestas:

27

Las convenciones de nomenclatura representan elecciones arbitrarias de su editor. No hay nada en el lenguaje en sí que le prohíba nombrar sus métodos como lo hace en Java: siempre que el primer carácter sea una letra / guión bajo, y todos los demás caracteres sean letras, dígitos o guiones bajos, C # no va a quejar. Sin embargo, las bibliotecas de clases que vienen con .NET siguen una convención que Microsoft ha adoptado internamente. Microsoft también publicó estas pautas , para que otros puedan optar por adoptarlas también para sus propias bibliotecas de clases. Aunque es su elección seguir o ignorar las pautas de Microsoft, la familiarización con su código por parte de otros puede ser más rápida si sigue las mismas pautas de nombres.

dasblinkenlight
fuente
Sin embargo, generalmente hay alguna razón detrás de una convención, y cuando leo "¿Hay una buena razón para esto?" Lo entiendo como una pregunta sobre POR QUÉ no QUÉ.
Greenoldman
Pascal para miembros públicos / internos / estáticos y todos los métodos. Camello para particulares. Ayuda a distinguir el alcance de un token mientras lo escanea. La thispalabra clave hace lo mismo. Las opciones de estilo son prácticas, incluso si pueden parecer extrañas
Gusdor
23

Quizás debido a la influencia de Pascal / Delphi. El creador de C # y Delphi era la misma persona después de todo (Anders Hejlsberg).

Las convenciones de codificación de Delphi en general son las mismas que las de C # en este aspecto; ver http://www.econos.de/delphi/cs.html#ObjectPascal_Procedures o http://wiki.delphi-jedi.org/index.php?title=Style_Guide#Method_Naming - coincidencia?

Konrad Morawski
fuente
44
A +1 para esto porque da lo que puede ser la razón real por la que se hizo esta elección arbitraria particular para C #.
Maximus Minimus
4

Además de las otras respuestas hechas, tener un caso de camello para los métodos significa que pueden entrar en conflicto con los nombres de los miembros privados, los parámetros y las variables de método que usan el caso de camello para sus nombres. En Java (y C # 1.0) esto no es terriblemente común ya que el uso de delegados es incómodo y raro. En C # moderno no es exactamente común , pero tampoco es inaudito.

Telastyn
fuente
1
El guión bajo no debe usarse en los campos privados de C # (consulte blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx , por ejemplo), pero es controvertido y se encuentra con frecuencia.
Jens
1
confiar en la carcasa para distinguir entre construcciones de lenguaje es una muy mala idea, independientemente de si el lenguaje te permite hacerlo o no.
gbjbaanb
44
@Telastyn esa declaración es bastante impactante. La mayor parte de la biblioteca de clases .NET usa esa convención.
MattDavey
1
@Dunk, ¿cómo es de repente mi convención? Simplemente estaba pasando un comentario, no tengo una opinión sobre este asunto de ninguna manera :)
MattDavey
2
@MarjanVenema: no estoy seguro de lo que está hablando, pero C # distingue entre mayúsculas y minúsculas y ciertamente puede tener colisiones entre miembros con una carcasa similar. Esto se vuelve divertido y emocionante cuando tiene lenguajes insensibles a mayúsculas y minúsculas reales como VB.NET con el que está trabajando a nivel de biblioteca.
Wyatt Barnett