Warum nennen Java-Programmierer eine Variable gerne "clazz"? [geschlossen]


156

Ich habe viele Codes gesehen, die eine Deklaration haben wie Class clazz, woher kommt diese? Ist das eine Art Konvention? Ich denke, 'clazz' ist nicht einmal ein englisches Wort, hat überhaupt keine Bedeutung, wie können so viele Programmierer zufällig einen falschen Namen benennen?


36
klass nicht vergessen!
Peter Recore

24
@ Peter: Guter Punkt, das ist ein Klassiker.
Präsident James K. Polk

13
Aleksey Shipilev hat vorgeschlagen, als Alternative сlassDinkel mit Kyrillisch сzu verwenden.
Stuart Marks

12
@StuartMarks Ich lehne diesen Vorschlag ab. Bitte.
Goran Vasic

16
In England verwenden wir normalerweise "Clarse".
John Gowers

Antworten:


173

clazzwird in Java seit JDK 1.0 anstelle des reservierten Wortes "Klasse" verwendet. "Klasse" ist das, was Sie wollen, aber das Abkürzen oder Einfügen von Junk ("a", "the", "_" usw.) verringert die Klarheit. clazzsagt nur Klasse. "Internationale" englische Sprecher (die sowohl britisches als auch amerikanisches Englisch lesen) sind es gewohnt, 's' und 'z' zu transponieren.

Da Java von Anfang an die Quelle und eine geeignete Kultur offengelegt hat, greifen lohnender Java-Code und Tutorials dieselben Konventionen auf. Das ist eines der großartigen Dinge am Java-Ökosystem, das meiner Meinung nach ein wichtiger Teil seines Erfolgs war.


82
Es ist schwer zu vereinbaren, dass "clazz" klarer ist als "_class" oder "myClass". Wenn ich "_class" im Code gesehen hätte, wäre die Absicht offensichtlicher gewesen als ein Nicht-Wort, das mich zu Google (und zu dieser Seite) geschickt hat.
uscjeremy

@uscjeremy: Ich persönlich bevorzuge die Verwendung von Unterstrichen gegenüber Bezeichnern, die sich nur im Einzelfall unterscheiden. Wäre ich eine Sprache entwerfen, würde ich es eine Mischung aus Groß- und Kleinschreibung nicht-case-sensitive Regeln sein: jede Kennung nur könnte verwendet in genau dem Original - Gehäuse, aber Erklärung jeder Kennung würde vorbestandene Kennungen verstecken die unterschied sich nur im Gehäuse. Die FooDefinition im Klassenbereich und fooim Bereich der lokalen Variablen sollte zulässig sein, aber alle Verweise auf die Variable im Klassenbereich innerhalb des Bereichs der lokalen Variablen sollten erforderlich sein this.Foo. Eine solche Regel würde ...
Supercat

@uscjeremy: ... meiner Meinung nach kombinieren Sie die Vorteile von Sprachen, bei denen zwischen Groß- und Kleinschreibung unterschieden wird. Sprachen, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird, haben den Vorteil, dass die phonetischen Lesarten eines Bezeichnernamens "foo" eindeutig sind, ohne dass "foo" in Großbuchstaben oder "foo" in Kleinbuchstaben angegeben werden muss. Es gibt jedoch keinen wirklichen Grund, die Kennung eines Bezeichners an someThingeinigen Stellen und zuzulassen sOmEtHiNgin anderen.
Supercat

1
@supercat Die allgemeine Unicode-Interpunktionskategorie ist das, wonach ich gefischt habe. unicode.org/faq/punctuation_symbols.html / Ich würde C # nicht entwerfen. In Java kommen Sie mit einer Methode davon, die aufgerufen wird, fnordund einem Feld, das fnordohne Probleme, Groß- oder Kleinschreibung oder Unsinnswörter aufgerufen wird . Ich denke, das wird als Gegenbeispiel ausreichen.
Tom Hawtin - Tackline

3
@uscjeremy Es ist schwer zu vereinbaren, dass "clazz" klarer ist als "_class" oder "myClass" - True. Die Verwendung von "_class" wäre jedoch keine Option, da dies eindeutig im Widerspruch zu den Java-Namenskonventionen steht .
MC Emperor

73

Weil sie das Wort, das sie verwenden möchten, nicht verwenden können class. Es ist reserviert.


2
Ja, ich weiß, aber ich denke, eine Variable richtig zu buchstabieren wäre sinnvoller.
Sawyer

22
@Tony - wie können Sie "Sie wissen" sagen und verlangen, dass der Variablenname im selben Kommentar richtig geschrieben wird? Sie schließen sich gegenseitig aus.
Duffymo

3
@ Tony, du kannst eine Variable einfach nicht "Klasse" nennen, es ist ein reserviertes Wort.
Steve Kuo

6
@duffymo: Es ist lustig. Ich weiß, dass Klasse ein reserviertes Wort ist, und ich fordere in der Tat, dass der Variablenname richtig geschrieben wird. Warum schließen sie sich gegenseitig aus? Müssen Sie es "Klasse" nennen?
Sawyer

13
Ich vermute, Tony möchte, dass die Variable etwas Beschreibenderes als nur "Klasse" heißt. Zum Beispiel könnte man sagen, dass "x" richtig geschrieben ist, aber es bedeutet nicht so viel wie "numberOfComments"
Peter Recore

17

Dies liegt einfach daran, dass 'class' ein reserviertes Schlüsselwort ist und daher Class classnicht zulässig ist. Deshalb wirst du sehen Class clazzoder Class cls.


7
Ich kann mir keinen Grund vorstellen, eine Klasse zu benennen, Classda es in einem bestimmten Projekt so viele Klassen gibt, dass es irgendwie sinnlos erscheint, eine Klasse DIE Klasse zu nennen. Ich kann mir auch keinen Grund class
vorstellen,

8
Sie haben keine Klassenklasse benannt, sondern die Java-API.
Sawyer

3
@Blindy: Was ist mit java.lang.Class? Sie haben dort nicht viel Auswahl.
Dan Dyer

14
@Blindy: Es gibt bereits eine Klasse namens Class, die sich auf die Klasse eines Objekts bezieht. Der perfekte Grund für eine Variable namens "Klasse" ist, wenn Sie mit der Klasse eines Objekts arbeiten (dh herausfinden, welcher Typ ein Objekt ist)
Reverend Gonzo

3
Ich würde informativ ClassInformation, oder ClassMetadataoder etwas ähnliches. Jede Klasse ist eine Klasse, aber Sie benennen sie nicht alle, sondern Classnach ihrer Hauptfunktion.
Blindy

7

Es kommt auf den tatsächlichen Compiler und seine Fähigkeit an, zu unterscheiden, was ein Token in seinem Kontext bedeutet. Doch in diesem speziellen Fall ist es die Compiler Unfähigkeit zu unterscheiden , was die Token - classMittel in einem anderen Kontext. Es ist eine feste Regel class, die unabhängig von ihrem Kontext verwendet wird, um die Deklaration einer Klasse zu bezeichnen, und als solche ist sie ein reserviertes Wort. Das ist so einfach und so niedrig wie es nur geht.

Wenn Sie sich gezwungen fühlen, können Sie Ihren eigenen Java-Compiler schreiben, der eine Kontextregel enthält, mit der Sie ihn classals Variablennamen verwenden können. Obwohl ich denke, es wäre weitaus besser, Ihre Zeit zu nutzen, um sie nur zu nutzen, clazzoder klass- es wäre wahrscheinlich auch gut für Ihre Gesundheit.


3
Ein Wort über Unfähigkeit : Java wurde entworfen als reservierte Wörter Sprache. Nicht reservierte Wortsprachen können trotz (un) Lesbarkeit Anweisungen erfolgreich kompilieren und syntaktisch hervorheben, z. B. wenn wenn dann sonst . Daher wurde der Compiler absichtlich nicht
usr-local-ΕΨΗΕΛΩΝ

4

Woher kommt das?

Ich habe es zuerst bei Josh Blochs Puzzlern gesehen. Aber ich bin mir ziemlich sicher, dass es viel früher von anderen Entwicklern verwendet wurde. Josh Bloch hat es gerade berühmter gemacht.


4

Java verfügt nicht über eine Funktion, mit der Sie ein Schlüsselwort als Bezeichner verwenden können, im Gegensatz zu C # mit seinem @Präfix (z. B. @classist ein gültiger Bezeichner).


2
Das ist eine andere Kennung. classund $classsind beide gültige (aber unterschiedliche) Bezeichner in der JVM. Es gibt keine Kennung, die Sie in eine Java-Quelldatei schreiben können, die "class"in die VM übersetzt wird.
Finnw

2

Es ist nur ein englisches Wort, das durch das Schlüsselwort Class Keyword ersetzt wird (äquavalent), damit die Leute verstehen, dass es sich um eine Klasse handelt. und es ist fast die Lesbarkeit des Codes zu verbessern

Daran ist nichts Großes beteiligt


2

Deklaration Class clazzist in der Java-Welt beliebt, kann jedoch für Neulinge und Rechtschreibprüfer unangenehm sein. Ich habe einige Leute sagen hören, dass es nach dem Prinzip des geringsten Erstaunens vermieden werden sollte .

Da man sagen kann, dass ein ClassObjekt einen Typ darstellt , deklariere ich persönlich lieber solche Variablen wie Class type.


0

Wir verwenden clazz, weil class ein Typheader ist. Zum Beispiel verwenden Sie hier Klasse:

public class HelloWorld {

und hier:

Object.class.getName();

Daher müssen wir leider alternative Namen wie clazz verwenden.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.