Eu sei que a convenção em Java para getters booleanos é incluir o prefixo "é".
isEnabled
isStoreOpen
Mas e se o sujeito for plural? Ou seja, e se em vez de querer saber se uma loja está aberta, eu quisesse saber se todas as lojas estão abertas?
isStoresOpen()
não faz sentido em inglês.
Estou tentado a escrever getters como:
areStoresOpen
areDogsCute
areCatsFuzzy
E eu acho que faria sentido, mas eu tenho dito por outros que eu deveria apenas chupa-lo e abandonar assunto verbo acordo e uso isStoresOpen
, isDogsCute
, isCatsFuzzy
.
De qualquer forma, o que devo fazer para getters booleanos que operam em um sujeito no plural?
java
naming-conventions
boolean
kodai
fonte
fonte
are*()
getter.are*()
getters se eles estiverem gramaticalmente corretos.is
ouhas
...Respostas:
Não me lembro de qual livro era, mas a essência é que o código será lido muito mais vezes do que escrito. Escreva para facilitar a leitura.
fonte
storesAreOpen()
provavelmente seria o mais gramatical (por causa deif(storesAreOpen())
), mas a parte booleana do nome agora está oculta no meio do nome do método, o que quebra as convenções Java e o código legível.Que tal ter um inglês decente e seguir o padrão Java:
isEveryStoreOpen()
ouisEachCatCute()
Na dúvida sobre a palavra certa, sempre gosto de pegar o dicionário de sinônimos.
fonte
boolean
sis
convenção de prefixo. Além disso, fornece um pouco de informação extra que será realmente útil para aqueles falantes não nativos de inglês que por acaso são mantenedores da base de código.A convenção é prefixar o método getter com "is" e não a própria variável.
por exemplo
e
Pode não fazer sentido gramaticalmente, mas segue a convenção e parece legível o suficiente.
fonte
A especificação Java Bean diz para usar
get
para getters, a menos que seja umboolean
uso entãois
.are
não é padrão e não será reconhecido por nada que espere a nomenclatura Bean padrão.fonte
Muitas ferramentas esperam
is
ouget
provavelmente não reconhecerãoare
.Tente reformulá-los, como
getDogsAreFuzzy()
ougetStoresAreOpen()
ou coisas assim para melhor compatibilidade e convenções.fonte
-
isEnabled()
também pode ser escrito comogetEnabled()
emJava naming conventions
.- É apenas um bom hábito seguir as convenções de nomenclatura, ajudar quando estiver trabalhando com
Java Beans
.fonte
Em geral, acho que o código deve ser o mais facilmente legível possível, de modo que um método quase possa ser lido como um parágrafo (conforme adotado por
Clean Code
). Portanto, eu nomearia o método para som / leitura tão facilmente quanto possível e seguiria a regra gramatical deare
. Com IDEs modernos, é fácil encontrar métodos sem procurar especificamente porget
/is
.No entanto, Kumar faz uma boa observação sobre o feijão. Muitas ferramentas procurarão apenas
get
/is
. Nesse caso, posso considerar ter os dois métodos. Um para facilitar a leitura e outro para o uso da ferramenta.fonte
Em que idioma você escreve: Inglês ou Java ?
Quando estou lendo o código Java, espero que as coisas estejam lá, ter que procurar os dois getters, com os prefixos é e são , será mais complicado do que procurar apenas um prefixo.
Porém, por outro lado, quando leio jornal pela manhã, não procuro nada, então você pode escrever na forma mais tradicional do inglês.
return 0;
fonte
Em sua pergunta, você está perguntando explicitamente sobre getters. Um getter retorna algumas informações sobre uma instância de sua classe. Por exemplo, você tem uma aula
Store
. Agora,isStoreOpen
é um nome de método perfeitamente adequado para um getter.Em seguida, você menciona um método que verifica se todas as lojas estão abertas. Este método não é um getter, porque ele não retorna informações sobre uma instância, mas para todas. Claro, a menos que haja uma classe
Stores
. Se for esse o caso, você deve repensar seu design, porque Java já tem maneiras de armazenar várias instâncias, por exemplo, arrays ou coleções, então você não precisa escrever classes extras.Se não for esse o caso, o nome do método está perfeitamente correto. Uma alternativa pode ser apenas
allStoresOpen
sem o 'é'.TL; DR: se você estiver lidando com várias instâncias, não é um getter. Se for, seu design é ruim.
fonte
Sinceramente, eu diria que definitivamente esqueça o
are*
e continueis*
. Pense em"is"
como o significado da variável e crie um nome melhor, se possível.Eu diria que isStoresOpen não soa tão ruim, mas você pode fazer isStoresAreOpen se soar melhor para você.
Mas minha ideia geral seria seguir as convenções. Que é usar "get" para getters e "is" para tipos booleanos. Pessoalmente, acho que usar "é" às vezes já é problemático. Sim - parece bom em condições "se", mas às vezes eu apenas escrevo "obter" ao codificar e verifico a lista suspensa para minha variável necessária e começo a me perguntar o que está errado e por que não consigo encontrar, então eu percebo começa com "é" ...
fonte
Em programação orientada a objetos, isso raramente, ou nunca, deve ocorrer desde
Store
ouCat
ou o que você deve ser uma classe separada, com seu próprio métodoisOpen()
ouisFuzzy()
. Se você tiver um tipo superior, considere dividir para o nível mais atômico que você está usando. Em geral, os objetos não devem ser plurais no nível mais baixo.fonte
isStoresOpen () neste StoresOpen parece um plural,
Quando você segue a Convenção de Nomenclatura Java e os Padrões Java Beans, eles têm prefixos predefinidos para booleano e outro tipo, portanto, você deve seguir a Convenção de Nomenclatura Java Beans.
Vamos direto ao que você quer dizer Quando você vir as lojasOpen como um prospecto em inglês, sim, parece plural. Mais uma vez, observe profundamente essa palavra,
Aqui
storeOpen é plural de acordo com a gramática inglesa,
O resultado de isStoresOpen não é plural, ao invés disso é singular ou você pode dizer que é escalar em termos de convenção de programação.
O resultado é booleano, apenas verdadeiro ou falso
Diferente da sua afirmação plural em inglês verdadeiro ou falso
Não é uma matriz de verdadeiro ou falso , ou não uma coleção de verdadeiro ou falso
Então, aqui podemos dizer que, aqui estamos preocupados com o valor que é o retorno daquele método de bean booleano, não o nome dado à propriedade de classe para apontar entidade do mundo real.
Uma coisa mais importante é, sempre que tais propriedades booleanas são utilizados nas classes e aqueles são utilizados por bibliotecas pré-definidos em qualquer quadro, então quadro com utilização prefixo ' seja ' para a recuperação de valores booleanos,
por que significa que não é muito mais inteligente do que você, pois você conhece a gramática do inglês como plural / singular, multiplexador etc ...
fonte