As várias fichas no seu código (variáveis, classes, funções, namespaces, etc.)) podem ser nomeados usando um destes três estilos, em termos gerais:
- Caso Camel (ex: someVar, someClass, somePackage.xyz).
- Caso Pascal (ex: SomeVar, SomeClass, SomePackage.xyz).
- Underscores (ex: some_var, some_class, some_package.xyz).
Em caixa de camelo, os nomes começam com uma letra minúscula, mas cada palavra própria no nome é maiúscula e assim são os acrónimos. Por exemplo, as fichas comummente usadas em muitas línguas como toString, checkValidity, lineHeight, timestampToLocalDateTime, etc. são todos exemplos de invólucro de camelo.
A caixa de camelo é semelhante à caixa de camelo, excepto que a primeira letra também começa com uma letra maiúscula (SomeClass em vez de algumaClass).
Em caixa de sublinhado, tudo é em minúsculas (mesmo acrónimos) e as palavras são separadas por sublinhados (algumas_classes, algumas_func, algumas_var, etc.). Esta convenção é também conhecida popularmente como caixa de serpente.
A ideia geral é que pode usar qualquer convenção no seu projecto desde que seja consistente na sua utilização em todo o lado. Mas quando se codifica para um grande projecto ou equipa, deve estar em conformidade com a norma do que ali está a ser utilizado. Assim, é útil estar ciente das convenções típicas em várias linguagens de programação.
A prática geral para uma linguagem estilo C como Java ou JS é usar camelCase para todas as variáveis e membros do objecto (propriedades & métodos), e PascalCase para nomes de classes e construtores. Namespaces (ou Pacotes no mundo Java) estão normalmente em camelCase.
mas algumas linguagens fazem uma excepção a isso. C#, por exemplo, usa PascalCase para namespaces e mesmo métodos públicos. Assim, a função principal (ou ponto de entrada) é sempre static void main()
em java mas static void Main()
em C# (Note a capitalização da palavra “Principal”).
algumas linguagens que não derivam a sua sintaxe de C (como Python & Ruby) utilizam sublinhados para quase tudo excepto nomes de classes. Assim, o seu sempre sys.base_prefix
em vez de sys.basePrefix
datetime
em vez de DateTime
str.splitlines()
em vez de str.splitLines()
em python.
No caso da biblioteca padrão de python, tenho notado que mesmo as classes usam por vezes sublinhados, o que é uma inconsistência. Por exemplo, datetime.datetime
é uma classe, assim como csv.excel_tab
. As populares estruturas e bibliotecas (tais como django e frasco) utilizam a caixa de camelo para as classes.
Incoerência semelhante está em PHP. A linguagem está a evoluir dos sublinhados para a caixa de camelo nos últimos anos, mas algumas fichas antigas ainda assombram essa linguagem. Para ex, mysqli::set_local_infile_default
vs PDOStatement::debugDumpParams
.
por isso, em última análise, resume-se à sua própria preferência quando se está a iniciar um projecto. Mas ajuda a saber quais são as convenções habitualmente seguidas em projectos populares de código aberto na língua da sua preferência.
Update
Há também um quarto caso, tal como assinalado por @ovais, nomeadamente o caso kebab. É muito semelhante à caixa de sublinhado, excepto que os sublinhados são substituídos por hífenes (traços). Assim, some_func
torna-se some-func
, o que é obviamente rejeitado porque o traço não é utilizado para nomear as fichas como sendo já um operador incorporado para o operador menos na maioria das linguagens de programação. Onde a caixa kebab é usada com mais frequência é para criar classes nas suas folhas de estilo css! Nomes como main-div
main-navbar
e article-footer
são normalmente utilizados por programadores web enquanto escrevem o seu HTML/CSS. Esta convenção é basicamente o caso kebab.
Update
Como diz @patrykrudnicki, as constantes são tratadas de forma diferente. Na minha experiência, o sublinhado completo (SOME_CONST
) é uma convenção popular para constantes em muitas linguagens, incluindo Java, PHP e Python.
Update
Para resumir, esta é a convenção típica ou geralmente seguida nas linguagens de programação de código aberto mais utilizadas:
Token | |||
---|---|---|---|
variavel | under_score | camelCase | mix (em direcção a camelCase) |
function | under_score() | camelCase() | mix (em direcção a camelCase()) |
constant | UNDER_SCORE | UNDER_SCORE | UNDER_SCORE | class | PascalCase | PascalCase | mix (avançando para PascalCase) |
namespace | under_score | camelCase | mix (moving towards PascalCase) |
algumas ligações úteis:
- https://softwareengineering.stackexchange.com/questions/196416/whats-the-dominant-naming-convention-for-variables-in-php-camelcase-or-undersc
- https://stackoverflow.com/questions/149491/pascal-casing-or-camel-casing-for-c-sharp-code
- https://www.c-sharpcorner.com/forums/when-to-use-camel-case-and-pascal-case-c-sharp
- https://softwareengineering.stackexchange.com/questions/53498/what-is-the-philosophy-reasoning-behind-cs-pascal-casing-method-names