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.


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.


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?


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.