Alguém pode me explicar a convenção de codificação do C #?

14

Recentemente, comecei a trabalhar com o Unity3D e principalmente a criar scripts com C #. Como normalmente programa em Java, as diferenças não são muito grandes, mas ainda me refiro a um curso intensivo apenas para garantir que estou no caminho certo.

No entanto, minha maior curiosidade com o C # é que ele coloca em maiúscula a primeira letra de seus nomes de métodos (por exemplo, Java: getPrime()C #: GetPrime()aka: Pascal Case?). Existe uma boa razão para isso? Entendo, na página do curso intensivo, que li que aparentemente é uma convenção para .Net e não tenho como mudar isso, mas estou curioso para saber por que isso foi feito assim, em oposição ao caso normal (relativo?) De camelo que, digamos, Java usa.

Nota: Entendo que as linguagens têm suas próprias convenções de codificação (os métodos Python são minúsculos, o que também se aplica a esta pergunta), mas nunca entendi realmente por que não é formalizada em um padrão.

ahodder
fonte
18
Eu realmente não acho que você pode olhar camelCasee PascalCasee underscore_casee dizer que um deles é normal (mesmo relativamente normal) e os outros não. Como o @dasblinkenlight disse, é uma escolha arbitrária. A única coisa que faz você pensar que a convenção do C # é incomum é que você "normalmente programa em Java" e, portanto, está acostumado à escolha arbitrária feita para Java.
Carson63000
Use JavaScript em vez .. para Unity3D :)
Lipis
@ Lipis Por que - além do gosto pessoal? ;-)
ahodder 7/08/12
@AedonEtLIRA totalmente pessoal .. não importa :) Desfrute Unity não importa o idioma .. você vai acabar usando ..
Lipis
@ Lipis Até agora está ótimo. Toneladas de sinos e assobios e eu ainda não joguei dinheiro nisso ainda. Mas eu prefiro o estilo estruturado de C # (c / c ++) e java.
ahodder

Respostas:

27

As convenções de nomenclatura representam opções arbitrárias de seus editores. Não há nada na própria linguagem que o proíba de nomear seus métodos da maneira que você faz em Java: desde que o primeiro caractere seja uma letra / sublinhado e todos os outros caracteres sejam letras, dígitos ou sublinhados, o C # não será reclamar. No entanto, as bibliotecas de classes que acompanham o .NET seguem uma convenção que a Microsoft adotou internamente. A Microsoft também publicou essas diretrizes , para que outras pessoas também possam adotá-las para suas próprias bibliotecas de classes. Embora seja sua escolha seguir ou ignorar as diretrizes da Microsoft, a familiarização com seu código por outras pessoas pode ser mais rápida se você seguir as mesmas diretrizes de nomenclatura.

dasblinkenlight
fonte
No entanto, geralmente há alguma justificativa por trás de uma convenção e quando eu leio "Existe uma boa razão para isso?" Eu entendo isso como uma pergunta sobre por que não o quê.
greenoldman
Pascal para membros públicos / internos / estáticos e todos os métodos. Camelo para o privado. Ajuda a distinguir o escopo de um token enquanto você o verifica. A thispalavra-chave faz o mesmo. As opções de estilo são práticos, mesmo que possa parecer estranho
Gusdor
23

Talvez devido à influência de Pascal / Delphi. O criador de C # e Delphi era a mesma pessoa, afinal (Anders Hejlsberg).

As convenções de codificação Delphi geralmente são as mesmas que as de C # neste aspecto; consulte http://www.econos.de/delphi/cs.html#ObjectPascal_Procedures ou http://wiki.delphi-jedi.org/index.php?title=Style_Guide#Method_Naming - coincidência?

Konrad Morawski
fonte
4
Um +1 para isso porque fornece o que pode ser a verdadeira razão pela qual essa escolha arbitrária específica foi feita para C #.
Maximus Minimus
4

Além das outras respostas, ter camel case para métodos significa que eles podem entrar em conflito com nomes para membros privados, parâmetros e variáveis ​​de método que usam camel case para nomear. Em Java (e C # 1.0) isso não é muito comum, pois o uso de delegados é estranho e raro. No C # moderno, isso não é exatamente comum , mas também não é inédito.

Telastyn
fonte
1
O sublinhado não deve ser usado nos campos particulares do C # (consulte blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx , por exemplo), mas é controverso e frequentemente encontrado.
Jens
1
depender de maiúsculas e minúsculas para distinguir entre construções de linguagem é uma péssima idéia, independentemente de a linguagem permitir ou não.
Gbjbaanb
4
@Telastyn essa afirmação é bastante chocante. A maior parte da biblioteca de classes .NET usa essa convenção.
precisa saber é o seguinte
1
@ Dunk, como é de repente minha convenção? Eu estava apenas passando um comentário, eu não tenho uma opinião sobre este assunto de qualquer maneira :)
MattDavey
2
@MarjanVenema: não tenho certeza do que você está falando, mas o C # faz distinção entre maiúsculas e minúsculas e você certamente pode ter colisões entre membros da mesma forma. Isso se torna divertido e empolgante quando você tem linguagens sensíveis ao caso, como o VB.NET em que está trabalhando no nível da biblioteca.
Wyatt Barnett