Perché ai programmatori Java piace nominare una variabile "clazz"? [chiuso]


156

Ho visto molti codici con una dichiarazione del tipo Class clazz, da dove proviene? È una specie di convenzione? Penso che 'clazz' non sia nemmeno una parola inglese, non ha alcun significato, come possono casualmente così tanti programmatori nominare un nome sbagliato?


36
non dimenticare il klass!
Peter Recore,

24
@Peter: buon punto, è un klassico.
Presidente James K. Polk,

13
Aleksey Shipilev ha proposto di usare il сlassfarro con un cirillico сcome alternativa.
Stuart segna il

12
@StuartMarks Sto respingendo tale proposta. Prego.
Goran Vasic,

16
In Inghilterra, normalmente usiamo 'clarse'.
John Gowers,

Risposte:


173

clazzè stato utilizzato in Java al posto della parola riservata "class" da JDK 1.0. "class" è quello che vuoi, ma abbreviare o inserire junk ("a", "the", "_", ecc.) riduce la chiarezza. clazzdice solo lezione. I madrelingua inglesi "internazionali" (quelli che leggono inglese britannico e americano) sono abituati a trasporre "s" e "z".

Dal momento che Java ha rivelato la fonte e una cultura adatta fin dall'inizio, il codice Java e le esercitazioni utili raccolgono le stesse convenzioni. Questa è una delle cose grandi dell'ecosistema Java, che penso sia stata una parte importante del suo successo.


82
È difficile convenire che "clazz" sia più chiaro di "_class" o "myClass". Se avessi visto "_class" nel codice, l'intento sarebbe stato più ovvio di una non-parola che mi ha inviato a Google (e a questa pagina).
uscjeremy,

@uscjeremy: Personalmente, preferisco l'uso di caratteri di sottolineatura per avere identificatori che differiscono solo nel caso. Se stavo progettando una lingua, vorrei che fosse un ibrido di regole maiuscole e minuscole: qualsiasi identificatore poteva essere usato solo nel case originale, ma la dichiarazione di qualsiasi identificatore avrebbe nascosto tutti gli identificatori preesistenti che differiva solo per l'involucro. Una volta Foodefinito nell'ambito della classe e foonell'ambito della variabile locale dovrebbe essere legale, ma dovrebbero essere richiesti tutti i riferimenti alla variabile dell'ambito della classe nell'ambito del locale this.Foo. Una tale regola sarebbe ...
supercat

@uscjeremy: ... secondo me uniscono i vantaggi delle lingue con distinzione tra maiuscole e minuscole. I linguaggi senza distinzione tra maiuscole e minuscole hanno il vantaggio che le letture fonetiche del nome identificativo "pippo" non saranno ambigue senza dover dire "maiuscole" o "minuscole", ma non esiste alcun motivo reale per consentire l'identificazione di un identificatore someThingin alcuni punti e sOmEtHiNgin altri.
supercat

1
@supercat La categoria generale di punteggiatura Unicode è ciò che cercavo. unicode.org/faq/punctuation_symbols.html / Non progetterei C #. In Java, si evita un metodo chiamato fnorde un campo chiamato fnordsenza problemi, maiuscole o parole senza senso. Penso che basterà come contro esempio.
Tom Hawtin - tackline

3
@uscjeremy È difficile concordare che "clazz" è più chiaro di "_class" o "myClass" - True. Tuttavia, l'uso di "_class" non sarebbe un'opzione, poiché è chiaramente in conflitto con le convenzioni di denominazione Java .
MC Emperor

73

Perché non possono usare la parola che vogliono usare, che è class. È riservato.


2
Sì, lo so, ma penso che l'incantesimo di una variabile a destra sia più significativo.
Sawyer,

22
@Tony - come puoi dire "sai" e richiedere che il nome della variabile sia scritto nello stesso commento? Si escludono a vicenda.
Duffymo,

3
@Tony, semplicemente non puoi nominare una variabile "class", è una parola riservata.
Steve Kuo,

6
@duffymo: è divertente. So che la classe è una parola riservata e in effetti chiedo che il nome della variabile sia scritto correttamente, perché si escludono a vicenda ?? devi chiamarlo 'classe'?
Sawyer,

13
Immagino che Tony voglia che la variabile sia chiamata in modo più descrittivo di una semplice "classe". Ad esempio, si potrebbe dire che "x" sia scritto correttamente, ma non significa tanto quanto "numberOfComments"
Peter Recore,

17

È semplicemente perché "class" è una parola chiave riservata, quindi Class classnon è consentita. Quindi vedrai Class clazzo Class cls.


7
Non riesco a pensare a un motivo per nominare una classe Classpoiché ci sono così tante classi in ogni dato progetto che chiamare una classe THE sembra un po 'inutile. Inoltre non riesco a pensare a un motivo per chiamare un VARIABILE class...
Blindy

8
Non hai chiamato una classe Class, è API Java.
Sawyer,

3
@Blindy: che dire di java.lang.Class? Non hai molta scelta lì.
Dan Dyer,

14
@Blindy: esiste già una classe chiamata Class, che fa riferimento, beh, alla classe di un oggetto. Il motivo perfetto per avere una variabile chiamata 'class' è quando lavori con una classe di un oggetto (es .: capire di che tipo è un oggetto)
Reverendo Gonzo

3
Vorrei prendere in considerazione informativo ClassInformation, o ClassMetadatao qualcosa di simile. Ogni classe è una classe, ma non le nominate tutte Class, le nominate in base alla loro funzione principale.
Blindy,

7

Dipende dal compilatore reale e dalla sua capacità di distinguere cosa significa un token nel suo contesto. Tuttavia, in questo caso particolare, è l' incapacità del compilatore di distinguere il classsignificato del token in un contesto diverso. È una regola rigida e veloce che class, indipendentemente dal suo contesto, viene utilizzata per indicare la dichiarazione di una classe e come tale è una parola riservata . È semplice e di basso livello.

Se ti senti costretto, potresti scrivere il tuo compilatore Java per includere una regola contestuale che ti permetterà di usare classcome nome di variabile. Anche se penso che sarebbe molto meglio usare il tuo tempo da usare clazzo klass- probabilmente sarebbe anche un bene per la tua salute.


3
Una parola sulla incapacità : Java è stato progettato come un -parole riservate lingua. I linguaggi di parole non riservate possono compilare e mettere in evidenza le sintassi evidenziate con successo, come se poi , altrimenti , nonostante la (non) leggibilità. Quindi il compilatore è stato volutamente lasciato incapace
usr-local-ΕΨΗΕΛΩΝ

4

da dove proviene questo?

L'ho visto prima nei puzzle di Josh Bloch. Ma sono abbastanza sicuro che sia stato usato molto prima da altri sviluppatori. Josh Bloch lo ha appena reso più famoso.


4

Java non ha una funzione che ti consente di usare una parola chiave come identificatore, a differenza di C # con il suo @prefisso (ad es. @classÈ un identificatore valido).


2
Questo è un identificatore diverso. classe $classsono entrambi identificatori validi (ma diversi) nella JVM. Non ci sono identificatori che puoi scrivere in un file sorgente Java che si traduce "class"nella VM.
Finnw

2

È solo una parola inglese sostituita (equivalente) da Parola chiave Classe Parola chiave, per far capire alle persone che si tratta di una classe. ed è quasi per aumentare la leggibilità del Codice

Niente di grande logica coinvolto in questo


2

La dichiarazione Class clazzè popolare nel mondo Java, ma può essere imbarazzante per i neofiti e per il controllo ortografico. Ho sentito alcune persone dire che dovrebbe essere evitato secondo il principio del minimo stupore .

Poiché è possibile dire che un Classoggetto rappresenta un tipo , personalmente preferisco dichiarare tali variabili come Class type.


0

Usiamo clazz perché class è un'intestazione di tipo. Ad esempio, usi la classe qui:

public class HelloWorld {

e qui:

Object.class.getName();

Quindi, sfortunatamente, dobbiamo usare nomi alternativi come clazz.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.