Como escrever estojo de camelo para palavras como "número de telefone", "motocicleta", "comprimento de onda" etc.

75

Estou com problemas para entender como aplicar a sintaxe camelCase a alguns dos meus nomes de variáveis.

Por exemplo, como devo escrever corretamente uma palavra como "phonenumber" no caso de camelo? É phoneNumberou phonenumber? Da mesma forma com "nome de usuário", é usernameou userName?

Eu acho que não parece certo com caixa de camelo, como motorCycle, passWord, sunDay, setUpou waveLengthdesde que estes são apenas uma palavra cada. Eu acho que pode ser por isso que é chamado, hashMapmas também hashtableno caso de camelo sem a capital no último caso, porque hashtable é uma palavra, enquanto hash map é duas palavras.

Mas se a motocicleta tem uma cor, seria motorcycleColorporque uma palavra é concatenada? Isso está correto ou deveria ser phoneNUmber, waveLength, sunBlocke até mesmo sunDaypara o domingo da semana?

Por que, por exemplo, o método é chamado getISOCountriesenquanto diz, HttpHeaderspor exemplo, não está claro o que se torna minúsculo se tivermos um método como String camelCaseString = dog.toCamelCase()ou interface CamelCase.

Relacionado: https://english.stackexchange.com/questions/889/when-should-compound-words-be-written-as-one-word-with-hyphens-or-with-spaces

Niklas Rosencrantz
fonte
7
Nos casos em que é realmente difícil dizer se uma frase de duas palavras é composta, escolha uma capitalização e mantenha-a. Como na maioria das convenções de codificação, a consistência em um único projeto é o mais importante.
Kevin
2
Ótima pergunta, eu sempre me perguntei como escrever "fileName" (e o "filename" errado). Eu acho que esta palavra é escrita de forma diferente de programador para programador ...
Ray
3
@PacMani Você pode curtir a discussão aqui !
Jason C
4
@ 909Niklas eu largaria o "nome" o máximo possível. Apenas use "street". Se é uma string, é um nome, a menos que seja prejudicial ou confuso. usernameé o que é, é um sinal de chamada, não o "nome do usuário", por isso é mais como moto do que firstName ou lastName (que deve ser CamelCased)
Peter Turner
2
@ PeterTurner Alguns programadores diriam que streetdeveria ser uma classe e nameum de seus atributos / membros de dados.
JAB

Respostas:

173

Você deve colocar a letra em maiúscula depois de onde "normalmente" haveria um espaço (quando você escreveria uma carta em vez de código fonte). Sua primeira suposição está correta:

  • É uma "motocicleta", não um "ciclo motor", portanto sua variável deve ser nomeada motorcycle, não motorCycle.
  • É um "mapa de hash", então você segue hashMap, não hashmap.
  • "Domingo" é uma palavra -> sunday, não sunDay.
  • Enquanto "dia da semana" seria dayOfWeek, não dayofweek.
oezi
fonte
4
Pelo que vale, minha equipe e eu geralmente usamos hashmapcomo uma única palavra, embora ironicamente não o façamos tree map. shrug
corsiKa
1
Bem, a motocicleta é um caso de ponta (era, de fato, originalmente um motociclo, embora agora isso seja algo diferente); honeyBee(e não honeybee, de fato, não "abelha", mas "abelha"), e butterfly.
orome 25/02
3
O setUpcaso não endereçado é um caso de ponta, porém, é uma única palavra, mas JUnithistoricamente tem o nome de inicialização do dispositivo setUp.
TC1 25/02
23
@ TC1 Na verdade, "setup" é um substantivo , nunca um verbo. "Configure" a forma correta da ação. JUnittem razão, o resto de nós é o caso da borda. :)
Jason C
3
@JasonC Obrigado, finalmente faz sentido por que a contraparte é tearDown: D
TC1 25/02
44

Parte 1
Acho que o que mais te incomoda é que alguns de seus exemplos são palavras compostas , enquanto outros não.

  • número de telefone // não é uma palavra composta
  • motocicleta // palavra composta
  • comprimento de onda // palavra composta
  • sunblock // palavra composta
  • Domingo // palavra composta *
  • cor da motocicleta // palavra composta usada com uma palavra não composta.

As palavras compostas não seguem a notação de camelo para a segunda palavra na palavra composta.

Então é motorcyclee não motorCycle.

Mas "número de telefone" não é uma palavra composta e iria seguir notação caso camelo. ie phoneNumber.

E isso leva a: motorcycleColor.

Se não me lembro se uma palavra é realmente uma palavra composta ou não, procuro no dicionário para ter certeza.

Parte 2
Dois de seus exemplos são um pouco mais complicados.

  • mapa de hash
  • tabela de hash

Eles são complicados porque alguns os escreverão como "hashmap" e "hashtable". De acordo com o dicionário que acabei de verificar, são palavras separadas e não compostas. Portanto, o caso correto de camelo seria hashMape hashTable. Nem todas as equipes seguem essa convenção; portanto, você precisa perguntar a seus colegas de equipe o que eles preferem e seguir com isso. A consistência é mais importante nesse caso do que o que um dicionário pode dizer que está correto.

* Alguns argumentam que o domingo é uma palavra composta, já que outros dias da semana não são, mas, para os fins desta pergunta, evitarei essa questão. É mais fácil tratar como uma palavra composta e, portanto, não é um caso de camelo.


fonte
6
Os outros dias da semana também eram compostos: "Segunda-feira" <- dia da lua, terça-feira <- dia de Tiw, quarta-feira <- dia de Woden, quinta-feira <- dia de Thor, sexta-feira <- dia de Frigg, sábado <- dia de Saturno
kevin cline 24/02
6
@kevincline: Essas formas dos nomes dos dias provavelmente são consideradas arcaicas agora, então não contam realmente para fins práticos. ... A menos que você realmente escreva um código parecido com if (currentDay == thorsDay) {...Hmm ... as bibliotecas de datas muito ruins não têm essa opção de formatação quando você deseja obter o nome completo do dia da semana.
FrustratedWithFormsDesigner
15
@FrustratedWithFormsDesigner: o ponto era que, no uso moderno, domingo é uma palavra composta no mesmo grau que segunda-feira: não é. É apenas um acidente que o "Sun" em "Domingo" pode ficar sozinho, enquanto o "dia da lua" foi encurtado para "Monday"
Kevin Cline
6
Melhor ainda, use nomes melhores para suas variáveis ​​do que hashMap ou hashTable. É uma estrada escorregadia que leva a esta maravilhosa linha de código:HashMap hashMap = new HashMap();
Eric Andres
8

Como outros já apontaram, o estojo de camelo é usado ao juntar palavras. Não use estojo de camelo em uma única palavra em inglês. O problema vem na determinação de quais compostos são palavras simples. Deixados sozinhos, os programadores tomarão decisões diferentes, dependendo de seus conhecimentos de inglês. Isso leva a inconsistências na capitalização, que são quase tão irritantes quanto erros de ortografia.

Para evitar isso, os programadores devem usar uma referência padrão (por exemplo, dictionary.com ) quando não tiverem certeza sobre ortografia ou letras maiúsculas. Mesmo assim, se a consistência na nomeação é importante para o seu projeto, não há substituto para a revisão de código.

Escolher uma referência única para o seu projeto resolverá a maioria dos argumentos sobre letras maiúsculas e ortografia. Existem alguns compostos, como o Hashtable, que não estão nos dicionários, mas são capitalizados como palavras únicas nas APIs Java e C #. Você vai querer tomar uma decisão em todo o projeto sobre isso. Em Java, é "HashMap", mas "Hashtable". O "Hashtable" da IMO está claramente incorreto; ele nunca aparece como uma única palavra, exceto como um nome em uma API.

Kevin Cline
fonte
4

A maneira mais simples de fazer um caso de camelo é no delineamento de palavras.

Exemplos da sua pergunta:

  • número de telefone: phoneNumber
  • motocicleta: motocicleta
  • domingo: domingo
  • comprimento de onda: comprimento de onda

Se você não o dividir em duas palavras, também não deve usar estojo de camelo. Caso contrário, você o está usando em sílabas e em como isso parece bobo

  • auxiliar (Esta é uma palavra de 5 sílabas; sem mencionar o I parecendo uma porcaria em fontes não monoespaçadas / sem serifa).
Jeff Langemeier
fonte
5
número de telefone não é sua própria palavra; coloque-o no google como uma única palavra; ele pesquisará com satisfação tudo o que tem "Número de telefone" e não o número de telefone. E a instalação não tem duas palavras, nem a senha.
22814 Jeff Jeffemeier
6
@JeffLangemeier Um pequeno detalhe: "setup" é um substantivo, enquanto "setup" é um verbo. Portanto, se você tiver um objeto representando como algo é configurado, ele será chamado setup, enquanto que se você tivesse uma função para configurar algo, ele será chamado setUp.
bdesham
2
@bdesham eu percebo isso, mas eu ficaria longe do setUp, já que um verbo melhor e menos ambíguo seria inicializado, na verdade eu esqueci completamente a versão do verbo setup.
Jeff Langemeier
1
Eu pensaria que aquele que começa com "wa" pode ser wavelengthou waveLengthdependendo se o valor em questão está relacionado à velocidade de propagação dividida pela frequência ou se está relacionado ao "comprimento" (não necessariamente à distância) de algum tipo de onda . Por exemplo, a variável de uma biblioteca de síntese de áudio para o número de amostras associadas a uma onda não seria wavelengthmas waveLength.
supercat
2
@kevincline: Nos mecanismos de síntese de áudio, é comum ter tabelas de ondas que contêm uma ou mais amostras inteiras de uma onda. Quando a reprodução chega ao final da tabela, ela volta ao início (para mecanismos simples) ou a algum outro ponto da onda. Certamente, WaveLengthpor si só, seria um pouco vago em qualquer um dos cenários mais simplistas [se refere ao tamanho do buffer ou ao comprimento da seção de looping], mas as palavras poderiam perfeitamente aparecer em um nome mais longo.
supercat
4

É aqui que uma complicação com o inglês comum atrapalha a maneira como alguém mais tarde abusa do inglês para se ajustar às regras de espaço em branco dos tokens em contextos de programação.

Das palavras de exemplo que você dá, quase todas são compostas. O domingo não é, pois, embora tenha se originado como composto, fazia tanto tempo que dificilmente pode ser considerado um agora, especialmente porque o fato de se dedicar ao sol é mais uma curiosidade histórica do que uma parte forte da cultura religiosa e cultural. perspectiva das pessoas que falam inglês.

E em inglês, as três principais maneiras de escrever um composto são abertas (com um espaço entre as duas palavras), hifenizadas e fechadas (sem espaço ou hífen entre as duas). E, embora existam algumas regras sobre a hifenização de compostos abertos em determinadas situações, não há realmente muitas regras firmes para saber qual forma é usada para um determinado composto, além de ver o que as outras pessoas fazem, e ainda há momentos em que você vai encontrar dois ou até mesmo três formas ( eggbeater , eggbeater e batedor de ovos , por exemplo).

Aqui, o número de telefone é quase sempre escrito aberto, portanto deve ser tratado como duas palavras.

E quando se interpõe um limite entre maiúsculas e minúsculas para formar um token, o espaço ou hífen é removido e a segunda e subsequente palavra escrita em maiúsculas, portanto phoneNumberou PhoneNumberconforme apropriado para sua convenção.

O que faz phoneNumberparecer estranho é provavelmente o fato de ser mais comumente dado como phonena maioria dos contextos, ou como numberquando o contexto é sobre uma conexão telefônica.

Jon Hanna
fonte
2

Garanta a consistência dentro do arquivo de código.

Promova a consistência dentro do projeto de código.

Prefira consistência na biblioteca de códigos.

A composição de palavras para representar conceitos muda à medida que nos familiarizamos com uma dada aglutinação .

Por exemplo...

  • 'aparelho telefônico' foi reduzido para apenas 'telefone'
  • 'telefone' foi reduzido para apenas 'telefone'
  • 'número de telefone' às vezes era contratado para 'número de telefone'
  • 'número de telefone' logo se tornou 'número de telefone'
  • 'número de telefone' é muitas vezes reduzido para apenas 'telefone'
  • 'celular' ou apenas 'celular' são de uso comum hoje
  • 'homephone' e 'workphone' também podem se tornar comuns em breve

Observe que o verificador ortográfico StackExchange não consegue se decidir. 'Número de telefone' no final da frase acima estava bom, mas sinaliza o número no início da frase (em maiúscula ou não).

Por mais que todos desejem que haja "um caminho certo" para fazer as coisas, quando se trata de linguagem, isso nunca pode ser. Quando você terminar seu projeto, o uso provavelmente terá mudado. Certamente sua compreensão terá mudado e a funcionalidade do método / et.al. provavelmente também mudou. (Nesse caso, você provavelmente deve alterar o nome adequadamente.)

DocSalvager
fonte
-1

De uma perspectiva estritamente técnica (EUA), em que xxx-yyy-zzzz é o que você normalmente considera um "número de telefone", a parte xxx é adequadamente referida como o código de área, a parte yyy é adequadamente denominada troca e o zzzz é referido corretamente como o número.

Como "número de telefone" não é apenas uma palavra composta (ainda), mas se ela se tornar uma, fará referência incorreta a algo fora da intenção de seu criador, eu diria que a sintaxe camelCase exigiria phoneNumber para qualquer variável que a referencie, mas se você fará qualquer coisa com o sistema telefônico real, eu usaria phoneExchangeNumber para os sete dígitos e phoneACExchangeNumber para as versões de dez dígitos.

MLT
fonte
1
este não parece oferecer nada substancial sobre os pontos feitos e explicado em esta resposta antes que foi publicado em 3 anos antes
mosquito