Por que os programadores Java gostam de nomear uma variável "clazz"? [fechadas]

156

Eu já vi muitos códigos com uma declaração como Class clazz, de onde isso se origina? Isso é algum tipo de convenção? Eu acho que 'clazz' não é nem mesmo uma palavra em inglês, não tem sentido algum, como tantos programadores podem nomear um nome errado por coincidência?

Serrador
fonte
36
não esqueça klass!
Peter Recore
24
@ Peter: bom ponto, isso é um clássico.
Presidente James K. Polk
13
Aleksey Shipilev propôs o uso de сlassgrafia com um cirílico сcomo alternativa.
Stuart Marks
12
@StuartMarks Estou rejeitando essa proposição. De nada.
Goran Vasic
16
Na Inglaterra, normalmente usamos 'clarse'.
John Gowers

Respostas:

173

clazzfoi usado em Java no lugar da palavra reservada "class" desde o JDK 1.0. "class" é o que você deseja, mas abreviar ou inserir lixo eletrônico ("a", "the", "_" etc.) reduz a clareza. clazzapenas diz classe. Os falantes de inglês "internacionais" (aqueles que lêem inglês britânico e americano) estão acostumados a transpor 's' e 'z'.

Desde que o Java divulgou a origem e uma cultura adequada desde o início, os valiosos códigos e tutoriais Java adotam as mesmas convenções. Essa é uma das grandes coisas do ecossistema Java, que eu acho que foi uma parte importante do seu sucesso.

Tom Hawtin - linha de orientação
fonte
82
É difícil concordar que "clazz" seja mais claro que "_class" ou "myClass". Se eu tivesse visto "_class" no código, a intenção teria sido mais óbvia do que uma não-palavra que me enviou ao Google (e a esta página).
uscjeremy
@uscjeremy: Pessoalmente, prefiro o uso de sublinhados do que ter identificadores que diferem apenas no caso. Se eu estivesse projetando um idioma, seria um híbrido de regras que diferenciam maiúsculas e minúsculas: qualquer identificador só pode ser usado exatamente na caixa original, mas a declaração de qualquer identificador oculta qualquer identificador preexistente que diferia apenas no invólucro. A Foodefinição no escopo da classe e foono escopo da variável local deve ser legal, mas todas as referências à variável do escopo da classe no escopo do local devem exigir this.Foo. Essa regra seria ... #
1112
@uscjeremy: ... na minha opinião, combine as vantagens de linguagens que diferenciam maiúsculas e minúsculas. Idiomas que não diferenciam maiúsculas de minúsculas têm o benefício de que as leituras fonéticas de um nome de identificador "foo" serão inequívocas sem precisar dizer "maiusculas maiúsculas" ou "minúsculas foo", mas não há motivo real para permitir que um identificador seja digitado someThingem alguns lugares e sOmEtHiNgem outros.
Supercat
1
@supercat A categoria geral de pontuação Unicode é o que eu estava procurando. unicode.org/faq/punctuation_symbols.html / Eu não projetaria C #. Em Java, você se diverte com um método chamado fnorde um campo chamado fnordsem problemas, maiúsculas ou palavras sem sentido. Eu acho que isso será suficiente como um contra-exemplo.
Tom Hawtin - tackline
3
@uscjeremy É difícil concordar que "clazz" seja mais claro que "_class" ou "myClass" - True. No entanto, o uso de "_class" não seria uma opção, pois claramente entra em conflito com as convenções de nomenclatura Java .
MC Emperor
73

Porque eles não podem usar a palavra que desejam usar class. Está reservado.

Presidente James K. Polk
fonte
2
Sim, eu sei, mas acho que soletrar uma variável certa seria mais significativo.
Sawyer
22
@ Tony - como você pode dizer "você sabe" e exigir que o nome da variável seja digitado corretamente no mesmo comentário? Eles são mutuamente exclusivos.
duffymo
3
@ Tony, você simplesmente não pode nomear uma variável "classe", é uma palavra reservada.
Steve Kuo
6
@duffymo: É engraçado. Eu sei que classe é palavra reservada e, de fato, exijo que o nome da variável seja digitado corretamente, por que eles são mutuamente exclusivos? você tem que chamar de 'classe'?
Sawyer
13
Acho que Tony quer que a variável seja nomeada como algo mais descritivo do que apenas "classe". Por exemplo, "x" pode-se dizer que ser escrito corretamente, mas isso não significa tanto quanto "numberOfComments"
Peter Recore
17

É simplesmente porque 'class' é uma palavra-chave reservada, portanto, Class classnão é permitido. Portanto, você verá Class clazzou Class cls.

sfussenegger
fonte
7
Não consigo pensar em um motivo para nomear uma classe, Classpois existem tantas classes em qualquer projeto que chamar uma classe de A classe parece meio inútil. Eu também não posso pensar em uma razão para chamar uma variável class...
Blindy
8
Você não nomeou uma classe de classe, é API java.
Sawyer
3
@Blindy: E o java.lang.Class? Você não tem muita escolha lá.
Dan Dyer
14
@ Blindy: Já existe uma classe chamada Class, que se refere, bem, à classe de um objeto. O motivo perfeito para ter uma variável chamada 'classe' é quando você está trabalhando com a classe de um objeto (ou seja: descobrir o que digitar um objeto é)
Reverend Gonzo
3
Eu consideraria informativo ClassInformation, ClassMetadataou algo semelhante. Toda classe é uma classe, mas você não nomeia todos eles Class, nomeia-os pela função principal deles.
Blindy 28/03/10
7

Tudo se resume ao compilador real e sua capacidade de distinguir o que um token significa dentro de seu contexto. No entanto, nesse caso em particular, é incapacidade do compilador distinguir o que o token classsignifica em um contexto diferente. É uma regra rígida e rápida que class, independentemente de seu contexto, é usada para denotar a declaração de uma classe e, como tal, é uma palavra reservada . Isso é tão simples e tão baixo quanto possível.

Se você se sentir compelido, poderá escrever seu próprio compilador Java para incluir uma regra contextual que permitirá que você use classcomo um nome de variável. Embora eu ache que seria muito melhor usar seu tempo apenas para usar clazzou klass- provavelmente seria bom para sua saúde também.

John
fonte
3
Uma palavra sobre incapacidade : Java foi projetado como uma linguagem de palavras reservadas . Idiomas de palavras não reservadas podem compilar com êxito e instruções de destaque de sintaxe, como se ainda não existissem, apesar da (in) legibilidade. Portanto, o compilador foi intencionalmente deixado incapaz
usr-local-ΕΨΗΕΛΩΝ
4

de onde isso se origina?

Vi pela primeira vez nos enigmas de Josh Bloch. Mas tenho certeza de que foi usado muito antes por outros desenvolvedores. Josh Bloch apenas tornou mais famoso.

romano
fonte
4

Java não possui um recurso que permita o uso de uma palavra-chave como identificador, diferente do C # com seu @prefixo (por exemplo, @classé um identificador válido).

finnw
fonte
2
Esse é um identificador diferente. classe $classsão identificadores válidos (mas diferentes) na JVM. Não há identificador para o qual você possa escrever em um arquivo de origem Java que seja traduzido "class"na VM.
finnw
2

É apenas uma palavra em inglês substituída (Equavalente) por Keyword Class Keyword, para que as pessoas entendam que é uma classe. e é quase para aumentar a legibilidade do Código

Nada grande lógica envolvida neste

gmhk
fonte
2

A declaração Class clazzé popular no mundo Java, mas pode ser estranha para iniciantes e corretores ortográficos. Ouvi algumas pessoas dizendo que isso deve ser evitado de acordo com o princípio de menor espanto .

Como é possível dizer que um Classobjeto representa um tipo , eu pessoalmente prefiro declarar variáveis ​​como Class type.

Michal Kordas
fonte
0

Usamos clazz porque class é um cabeçalho de tipo. Por exemplo, você usa a classe aqui:

public class HelloWorld {

e aqui:

Object.class.getName();

Infelizmente, temos que usar nomes alternativos, como clazz.

Romejanic
fonte
-2

Simplificando, classtem classe que clazznão.

user1843640
fonte