Acrônimos em CamelCase [fechado]


243

Eu tenho uma dúvida sobre o CamelCase. Suponha que você tenha este acrônimo:Unesco = United Nations Educational, Scientific and Cultural Organization.

Você deve escrever: unitedNationsEducationalScientificAndCulturalOrganization

Mas e se você precisar escrever a sigla? Algo como:

getUnescoProperties();

É certo escrever dessa maneira? getUnescoProperties() OR getUNESCOProperties();


2
Isso não deveria estar nos programadores.SE?
Pacerier 27/07

5
A conversão da IMO para snake_case revela a melhor solução. Você gosta get_unesco_propertiesou get_u_n_e_s_c_o_properties?
jchook


Respostas:


195

Alguns diretrizes sobre as quais a Microsoft escreveu camelCasesão:

Ao usar siglas, use maiúsculas e minúsculas Pascal ou camel para siglas com mais de dois caracteres. Por exemplo, useHtmlButton ou htmlButton. No entanto, você deve colocar maiúsculas em siglas que consistem em apenas dois caracteres, como em System.IOvez deSystem.Io .

Não use abreviações em identificadores ou nomes de parâmetros. Se você precisar usar abreviações, use maiúsculas de minúsculas para abreviações que consistem em mais de dois caracteres, mesmo que isso contradiga a abreviação padrão da palavra.

Resumindo:

  • Quando você usar uma abreviação ou sigla com dois caracteres, coloque-as todas em maiúsculas;

  • Quando a sigla tiver mais de dois caracteres, use maiúscula para o primeiro caractere.

Portanto, no seu caso específico, getUnescoProperties()está correto.


11
Acho que eu deveria começar a usar IDem vez Id(que eu uso / ver em todos os lugares)
jasonscript

30
Tecnicamente, "ID" não é um acrônimo (é uma abreviação de "identificador" ou "identificação"), mas eu realmente não sei como / se essa diretriz ajuda com essa. : - \
bryant

63
Eu não acho que esse seja um bom padrão. Distinguir acrônimos normais, acrônimos de duas letras e palavras normais parece muito complicado e contrário à idéia de ter uma convenção de nomenclatura consistente.
Sam

40
Além disso, ser declarado pela Microsoft não torna algo "correto".
Sam

48
É bom saber que eles seguem suas próprias diretrizes: XMLHttpRequest()originalmente vieram da Microsoft.
Makyen

314

Existem críticas legítimas aos conselhos da Microsoft a partir da resposta aceita.

  • Tratamento inconsistente de acrônimos / inicialismos, dependendo do número de caracteres:
    • playerIDvs playerIdvs playerIdentifier.
  • A questão de saber se os acrônimos de duas letras ainda devem ser capitalizados se aparecerem no início do identificador:
    • USTaxes vs usTaxes
  • Dificuldade em distinguir várias siglas:
    • ou seja, USIDvs usId(ou parseDBMXMLno exemplo da Wikipedia).

Então, postarei esta resposta como uma alternativa à resposta aceita. Todas as siglas devem ser tratadas de forma consistente; siglas devem ser tratadas como qualquer outra palavra. Citando a Wikipedia :

... alguns programadores preferem tratar abreviações como se fossem palavras minúsculas ...

Então, re: pergunta do OP, eu concordo com a resposta aceita; isto está certo:getUnescoProperties()

Mas acho que chegaria a uma conclusão diferente nesses exemplos:

  • US TaxesusTaxes
  • Player IDplayerId

Portanto, vote nesta resposta se você acha que acrônimos de duas letras devem ser tratados como outros acrônimos.

Camel Case é uma convenção, não uma especificação. Então eu acho que as regras de opinião popular.

( EDIT: Removendo esta sugestão de que os votos deveriam decidir esse problema; como @Brian David diz; o Stack Overflow não é um "concurso de popularidade" e essa pergunta foi encerrada como "baseada em opiniões")

Embora muitos prefiram tratar siglas como qualquer outra palavra, a prática mais comum pode ser colocar siglas em maiúsculas (mesmo que isso leve a "abominações")

Outros recursos:

  • Observe que algumas pessoas distinguem entre abreviação e acrônimos
  • Nota As diretrizes da Microsoft distinguem entre acrônimos de dois caracteres e "acrônimos com mais de dois caracteres"
  • Observe que algumas pessoas recomendam evitar abreviações / acrônimos por completo
  • Observe que algumas pessoas recomendam evitar completamente o CamelCase / PascalCase
  • Observe que algumas pessoas distinguem entre "consistência" como "regras que parecem internamente inconsistentes" (isto é, tratam acrônimos de dois caracteres diferentes dos acrônimos de três caracteres); algumas pessoas definem "consistência" como "aplicando a mesma regra de forma consistente" (mesmo que a regra seja internamente inconsistente)
  • Diretrizes de projeto de estrutura
  • Diretrizes da Microsoft

26
1) Não há inconsistência. "Id" é uma abreviação , não um acrônimo. 2) Depende do contexto do identificador, ou seja, classe, interface, atributo, tipo de enumeração, campo estático, parâmetro, método, propriedade ou evento. Se a diretriz para o identificador estiver usando PascalCase, seria USTaxese PlayerId; camelCase: usTaxese playerId. 3) Seria USIdno PascalCase, usIdno camelCase e parseDbmXmlno camelCase.
Frederik Krautwald

6
Você está certo, é uma abreviação. O que quero dizer é que deve ser UsTaxes, UsId. "Abreviação ou acrônimo" de duas letras não deve ser tratado de maneira diferente de três letras ou outras "palavras normais". Outro conselho, da resposta de @ Eonil, é evitar completamente os encurtadores. unitedStatesTaxes ou playerIdentifier.
The Red Pea

3
Ha ha. Duvido que a confusão surgisse - muito -, mas as diretrizes são, bem, diretrizes para evitar possíveis confusões. Um exemplo de acrônimo artificial (ruim) em um contexto científico: InIN(item)vs InIn(item)(dica: IN é polegadas (s)). Ou, IDById(id)vs IdById(id), ciência do contexto (dica: ID significa doença infecciosa). "Dois caracteres" - em que contexto?
Frederik Krautwald

2
No link da Microsoft "... use caso Pascal ou caso camel para acrônimos com mais de dois caracteres . ... No entanto, você deve colocar em maiúsculas acrônimos que consistem em apenas dois caracteres ..." Essa é a parte que eu chamaria de "inconsistente" " Melhor caracterização é "exceção". E pelo menos você racionalizou por que os acrônimos de duas letras podem ser mais confusos. Mas acho que esses programas com "CanCan" estão sem sorte; ambíguo seja o movimento de dança ou a rede de área comunitária do Cercle de l'Aviron de Nantes :)
The Red Pea

18
O autor de Ofensa capital: como lidar com abreviações no CamelCase chama corretamente o termo "abominação" quando escreve: "Embora [usando siglas maiúsculas] funcione em casos simples, ele leva a abominações quando uma abreviação segue a outra: HTTPURLConnection, XMLIDREF"
kghastie 14/07/2015

21

Primeiro, tenho que esclarecer que não sou um falante nativo de inglês , portanto minha afirmação sobre a gramática inglesa pode simplesmente estar errada. Se você descobrir esses erros, entre em contato e ficarei muito agradecido.


A melhor prática para acrônimo seria evitar o máximo possível. De qualquer forma, esse não é o caso, porque o acrônimo UNESCOé mais familiar que o nome completo UnitedNationsEducationalScientificAndCulturalOrganization.

Então, acho que UNESCOfaz mais sentido do que Unescosimplesmente porque está mais próximo da forma da vida real, mais familiar. Eu tive alguns problemas para descobrir o que a palavra Unescorealmente significa.

Como outro exemplo, pense Arc. Isso soa como uma curva em torno de um círculo, mas em Rust, isso significa Atomically Reference Counted. Se fosse escrito assim ARC, pelo menos os leitores reconheceriam que a palavra é um acrônimo de outra coisa e não um tipo de curva.

Programas modernos são escritos principalmente para leitores humanos. Em seguida, essas regras de nomenclatura devem ser definidas para facilitar a leitura humana vez de processamento ou análise da máquina.

Nesta perspectiva, perdemos um pouco de legibilidade usando o Unescoexcesso, UNESCOsem ganhar nada.

E para outros casos, acho que apenas seguir regras (ou convenções) simples de acrônimos em inglês é suficiente para a maioria dos casos, para melhor legibilidade .


4
Os exemplos acima são um pouco enganadores. "A melhor abordagem que já vi foi a da Apple ... Isso significa tratar acrônimos como um nome próprio ... Então a UNESCO faz mais sentido" - Não é assim que se escreve nomes próprios.
21815 Mikko Rantanen

@MikkoRantanen Atualizei minha resposta.
Eonil

7
Wow eu mal posso encontrar uma frase em que a resposta que eu concordaria com :-)
Josef SABL

Depende completamente do contexto do código no qual você está trabalhando, se as abreviações / acrônimos fazem ou não mais ou menos sentido. Por exemplo, trabalho com finanças e existem muitos termos únicos que são uniformes em todo o setor e, de fato, em todo o mundo. Você estaria perdendo tempo e criando verbosidade desnecessária ao não usar siglas que todos os que trabalham nessa empresa sabem de cor. Por exemplo, PV para valor presente, FV para valor futuro, média para média, exp para expoente, etc.
Will Ediger

@ pm100 Não foi isso que eu disse? A UNESCO não é como você escreve substantivos próprios.
Mikko Rantanen

17

Para converter para o CamelCase, também existe o algoritmo de caso Camel (quase) determinístico do Google :

Começando com a forma de prosa do nome:

  1. Converta a frase em ASCII simples e remova qualquer apóstrofo. Por exemplo, o "algoritmo de Müller" pode se tornar "algoritmo de Muellers".
  2. Divida esse resultado em palavras, dividindo-se em espaços e em qualquer pontuação restante (normalmente hífens).
    1. Recomendado: se alguma palavra já tiver uma aparência convencional de estojo de camelo em uso comum, divida-a em suas partes constituintes (por exemplo, "AdWords" se tornará "palavras de anúncio"). Observe que uma palavra como "iOS" não é realmente um caso de camelo; desafia qualquer convenção, portanto, esta recomendação não se aplica.
  3. Agora, minúscula tudo (incluindo siglas) e, em maiúscula, apenas o primeiro caractere de:
    1. … Cada palavra, para produzir maiúsculas de camelo, ou
    2. … Cada palavra, exceto a primeira, para produzir uma caixa menor de camelo
  4. Por fim, junte todas as palavras em um único identificador.

Observe que a caixa das palavras originais é quase totalmente desconsiderada.

Nos exemplos a seguir, "Solicitação XML HTTP" foi transformada corretamente em XmlHttpRequest, XMLHTTPRequest está incorreto.


17

getUnescoProperties() deve ser a melhor solução ...

Quando possível, basta seguir o puro camelCase; quando você tiver acrônimos, deixe-os em maiúsculas, quando possível, caso contrário camelCase.

Geralmente, no OO, as variáveis ​​de programação devem começar com letra minúscula ( lowerCamelCase) e a classe com letra maiúscula ( UpperCamelCase).

Em caso de dúvida, basta ir puro camelCase;)

parseXMLestá bem, parseXmltambém estácamelCase

XMLHTTPRequestSe houver XmlHttpRequestou xmlHttpRequestnão um caminho a seguir com acrônimos maiúsculos subsequentes, definitivamente não está claro para todos os casos de teste.

por exemplo, como é que você lê esta palavra HTTPSSLRequest, HTTP + SSLou HTTPS + SL(isso não significa nada, mas ...), nesse caso follow caso camelo convenções e ir para httpSslRequestou httpsSlRequest, talvez já não é agradável, mas é definitivamente mais clara.


2
Gosto do seu HTTPSSLexemplo, embora SL não signifique nada, que tal algo como HTTPSSHTunnel? É HTTPS + SH (shell) ou HTTP + SSH? A convenção do Google é definitivamente menos ambígua.
L. Holanda

10

Há o Guia de Estilo JavaScript do airbnb no github com muitas estrelas (~ 57,5k no momento) e guias sobre acrônimos que dizem:

Acrônimos e inicialismos sempre devem estar em maiúsculas ou minúsculas.

Por quê? Os nomes são para facilitar a leitura, não para apaziguar um algoritmo de computador.

// bad
import SmsContainer from './containers/SmsContainer';

// bad
const HttpRequests = [
  // ...
];

// good
import SMSContainer from './containers/SMSContainer';

// good
const HTTPRequests = [
  // ...
];

// also good
const httpRequests = [
  // ...
];

// best
import TextMessageContainer from './containers/TextMessageContainer';

// best
const requests = [
  // ...
];

7
" Por quê? Os nomes são para facilitar a leitura, não para apaziguar um algoritmo de computador ", portanto, XMLHTTPRequesté muito mais legível do que XmlHttpRequest, certo?
L. Holanda

2
Não faz sentido por que httpRequestsé considerado bom, mas HttpRequestsé ruim. seguindo este princípio então, para XML HTTP Request deve ser xmlhttpRequest???
L. Holanda

1
Costumo citar o guia de estilo AirBnb, mas neste caso não concordo. Eu particularmente não concordo com a afirmação deles: "Acrônimos e inicialismos devem sempre estar em maiúsculas ou minúsculas". xmlHttpRequesté mais legível do que XMLHTTPRequestna minha opinião.
Ronan

3

Atualmente, estou usando as seguintes regras:

  1. Caso de Capital para siglas: XMLHTTPRequest, xmlHTTPRequest, requestIPAddress.

  2. Caso do camelo por abreviaturas: ID[entifier], Exe[cutable], App[lication].

ID é uma exceção, desculpe, mas é verdade.

Quando vejo uma letra maiúscula, assumo um acrônimo, ou seja, uma palavra separada para cada letra. As abreviaturas não têm palavras separadas para cada letra, então eu uso letras maiúsculas e minúsculas.

XMLHTTPRequest é ambíguo, mas é um caso raro e não é muito ambíguo, então tudo bem, regras e lógica são mais importantes que a beleza.


1

O guia de estilo JavaScript Airbnb fala um pouco sobre isso . Basicamente:

// bad
const HttpRequests = [ req ];

// good
const httpRequests = [ req ];

// also good
const HTTPRequests = [ req ];

Como normalmente leio uma letra maiúscula como uma classe, costumo evitar isso. No final do dia, é tudo preferência.


1

Além do que o @valex disse, quero recapitular algumas coisas com as respostas fornecidas para esta pergunta.

Eu acho que a resposta geral é: depende da linguagem de programação que você está usando.

C Sharp

A Microsoft escreveu algumas diretrizes nas quais parece que HtmlButtoné o caminho certo para nomear uma classe para esses casos.

Javascript

O Javascript possui algumas variáveis ​​globais com siglas e as usa em maiúsculas (mas, engraçado, nem sempre de forma consistente), eis alguns exemplos:

encodeURIComponent XMLHttpRequest toJSON toISOString


Bem, é o Netscape antigo, e até tem alguns que não possuem camelCase onerror.
Eddie

1

aviso legal: inglês não é o tom da minha mãe. Mas eu pensei sobre esse problema por um longo tempo, esp ao usar o nó (estilo camelcase) para manipular o banco de dados, pois o nome dos campos da tabela deve ser snakeized, este é o meu pensamento:

Existem 2 tipos de 'acrônimos' para um programador:

  • em linguagem natural, UNESCO
  • na linguagem de programação de computadores, por exemplo tmc and textMessageContainer, que geralmente aparece como uma variável local.

No mundo da programação, todos os acrônimos em linguagem natural devem ser tratados como palavras , os motivos são:

  1. ao programar, devemos nomear uma variável no estilo acrônimo ou no estilo não acrônimo. Portanto, se nomearmos uma função getUNESCOProperties, significa que UNESCO é um acrônimo (caso contrário, não deve ser todas as letras maiúsculas), mas evidentemente, gete propertiesnão são acrônimos. portanto, devemos nomear essa função como gunescop ou getUnitedNationsEducationalScientificAndCulturalOrganizationProperties , ambos são inaceitáveis.

  2. a linguagem natural está evoluindo continuamente, e os acrônimos de hoje se tornarão palavras amanhã , mas os programas devem ser independentes dessa tendência e permanecer para sempre.

a propósito, na resposta mais votada, IO é o acrônimo em linguagem de computador (significa InputOutput), mas não gosto do nome, pois acho que o acrônimo (em linguagem de computador) deve ser usado apenas para nomear uma variável local, mas uma classe / função de nível superior; portanto, InputOutput deve ser usado em vez de IO


"língua", não "tom"
Dan Dascalescu 30/03

0

A UNESCO é um caso especial, pois geralmente (em inglês) é lido como uma palavra e não como um acrônimo - como UEFA, RADA, BAFTA e, ao contrário da BBC, HTML, SSL


1
Essa é a distinção entre "acrônimos" e meras "abreviações"; essa distinção parece ser relevante para toda a discussão, mas foi quase inteiramente elidida nas respostas apresentadas.
simon

BBC, HTML, SSL e outros acrônimos em que você soa cada letra são chamados com mais precisão de inicialismo. Palavras como a UNESCO que são pronunciadas como uma palavra são acrônimos verdadeiros.
Lrdwhyt 31/01

-2

Há também outra convenção camelcase que tenta favorecer a legibilidade dos acrônimos usando maiúsculas ( HTML) ou minúsculas ( html), mas evitando ambos ( Html).

Então, no seu caso, você poderia escrever getUNESCOProperties. Você também pode escrever unescoPropertiespara uma variável ouUNESCOProperties para uma classe (a convenção para as classes é começar com letras maiúsculas).

Essa regra fica complicada se você deseja reunir dois acrônimos, por exemplo, para uma classe chamada XML HTTP Request. Seria começar com maiúscula, mas desde que XMLHTTPRequestnão seria fácil de ler (? É XMLH TTP Request), e XMLhttpRequestiria quebrar a convenção camelcase (? É XM Lhttp Request), a melhor opção seria misturar caso: XMLHttpRequest, que é na verdade, o que o W3C usou . No entanto, o uso desse tipo de nomeação é desencorajado. Neste exemplo,HTTPRequest seria um nome melhor.

Como a palavra oficial em inglês para identificação / identidade parece ser ID, embora não seja um acrônimo, você pode aplicar as mesmas regras.

Esta convenção parece ser bastante popular por aí, mas é apenas uma convenção e não há certo ou errado. Apenas tente seguir uma convenção e verifique se seus nomes são legíveis.


3
Eu não acredito em todo este segmento :-) Então seria XMLToHtmlConverter, mas HTMLToXmlConverter? Uau ...
Josef SABL

1
@ JosefSábl, sim, seria assim. Em relação ao seu voto negativo, não estou dizendo que gosto desta convenção, mas ela definitivamente existe.
Jesús Carrera

1
Eu li a pergunta como "O que é uma boa convenção de escrever acrônimos em caso de camelo" não "Você pode listar todas as convenções que existem". E como eu considerar sua convenção mencionada como muito ruim, eu downvoted :-)
Josef SABL

Bem, a pergunta é "É correto escrevê-lo dessa maneira?", E, como existem muitas maneiras "certas" de escrevê-lo, porque é apenas uma convenção, e essa convenção é bastante popular (independentemente de como você a considera), minha resposta é muito válida :-)
Jesús Carrera
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.