Javaプログラマーが変数に「clazz」という名前を付けるのはなぜですか?[閉まっている]


156

多くのコードがのような宣言を持っているのを見てきましたClass clazz。これはある種の慣習ですか?「clazz」は英語の単語でもなく、まったく意味がないと思います。多くのプログラマーが誤って間違った名前を付けてしまうのはなぜでしょうか。


36
クラスをお忘れなく!
Peter Recore

24
@ピーター:良い点、それは破壊的です。
James K. Polk大統領、

13
Aleksey Shipilevは、代わりにсlassキリル文字のスペルを使用することを提案していсます。
スチュワートマークス

12
@StuartMarks私はその命題を拒否しています。どういたしまして。
Goran Vasic

16
イギリスでは、通常「clare」を使用します。
John Gowers、2017年

回答:


173

clazzJDK 1.0以降、Javaでは予約語「クラス」の代わりに使用されています。「クラス」は必要なものですが、ジャンク(「a」、「the」、「_」など)を省略または挿入すると、明瞭さが低下します。clazzクラスを言うだけです。「国際」英語話者(イギリス英語とアメリカ英語の両方を読む人)は、「s」と「z」の転置に使用されます。

Javaは最初からソースと適切な文化を開示してきたので、価値のあるJavaコードとチュートリアルは同じ規則を採用しています。これは、Javaエコシステムの優れた点の1つであり、Javaエコシステムの成功の重要な部分を占めていると思います。


82
「clazz」が「_class」または「myClass」よりも明確であることに同意することは困難です。コードで「_class」を見つけた場合、その意図は、Google(およびこのページ)に私を送った非単語よりも明白でした。
uscjeremy 2013

@uscjeremy:個人的には、大文字と小文字のみが異なる識別子を使用するよりも、アンダースコアを使用することを好みます。私が言語を設計していたら、大文字と小文字を区別するルールと大文字と小文字を区別しないルールのハイブリッドになります。どの識別子も元の大文字と小文字でのみ使用できますが、識別子を宣言すると既存の識別子が非表示になります。ケーシングのみが異なりました。たFooクラスのスコープで定義されたとfooローカル変数のスコープで法的にする必要がありますが、ローカルの範囲内でクラススコープの変数へのすべての参照を要求すべきですthis.Foo。そのようなルールは...
スーパーキャット2014年

@uscjeremy:...私の意見では、大文字と小文字を区別する言語と大文字と小文字を区別しない言語の利点を組み合わせます。大文字と小文字を区別しない言語には、識別子名「foo」の読みが「大文字のfoo」または「小文字のfoo」でなくても明確になるという利点がありますがsomeThing、一部の場所で識別子のスペルを許可する実際の理由はありません。sOmEtHiNg他では。
スーパーキャット2014年

1
@supercat句読点のUnicode一般カテゴリは、私が釣っていたものです。unicode.org/faq/punctuation_symbols.html / C#は設計しません。Javaでは、呼び出されるメソッドと呼び出されるfnordフィールドfnordを使用して、問題、大文字、または意味のない単語を取得します。それは反例として十分だと思います。
トム・ホーティン-2014年

3
@uscjeremy 「clazz」が「_class」または「myClass」よりも明確であることに同意することは困難です — True。ただし、「_ class」の使用は、Javaの命名規則と明らかに競合するため、オプションにはなりません。
MC皇帝

73

彼らは彼らが使いたい言葉を使うことができないからですclass。予約されています。


2
ええ、私は知っています、しかし私は可変的な権利を綴ることはより意味があると思います。
Sawyer

22
@Tony-どのようにして「知っている」と言い、同じコメントで変数名のスペルを正しく要求することができますか?それらは相互に排他的です。
duffymo

3
@Tony、変数に「クラス」という名前を付けることはできません。これは予約語です。
Steve Kuo

6
@duffymo:面白いです。クラスが予約語であることはわかっています。変数名の正しいスペルを要求していますが、なぜ相互に排他的ですか?あなたはそれを「クラス」と呼ばなければなりませんか?
Sawyer

13
私は、トニーが変数に単なる「クラス」よりもわかりやすい名前を付けたいと思っていると思います。たとえば、「x」は、正しく綴られると言えるが、それは「numberOfComments」な限り意味するものではありません
ピーターロコアナハ

17

これは、単に「クラス」が予約済みのキーワードであるためにClass class許可されていないためです。したがって、Class clazzまたはが表示されますClass cls


7
Class与えられたプロジェクトには非常に多くのクラスがあり、クラスを呼び出すことは無意味に思えるので、クラスに名前を付ける理由は考えられません。また、VARIABLEを呼び出す理由も考えられませんclass...
Blindy

8
クラスにClassという名前を付けていません。それはJava APIです。
Sawyer

3
@Blindy:java.lang.Classはどうですか?そこにはあまり選択肢がありません。
Dan Dyer

14
@Blindy:オブジェクトのクラスを参照するClassというクラスがすでにあります。「クラス」と呼ばれる変数を使用するのに最適な理由は、オブジェクトのクラスを操作しているときです(つまり、オブジェクトのタイプを判別する)
Gonzo

3
私は参考になるClassInformation、またはClassMetadata類似の何かを検討します。すべてのクラスはクラスですが、すべてClassに名前を付けるのではなく、メイン関数によって名前を付けます。
ブリンディ

7

それは、実際のコンパイラーと、そのコンテキスト内でトークンが何を意味するかを区別する能力にかかっています。ただし、この特定のケースでは、異なるコンテキストでトークンが何を意味するのかを区別できないのはコンパイラclassです。これは、classそのコンテキストに関係なく、クラスの宣言を示すために使用されるので、予約語であるため厳格な規則です。それは非常に単純で低レベルです。

やむを得ない場合は、独自のJavaコンパイラを記述してclass、変数名として使用できるコンテキストルールを含めることができます。けれども私はそれだけで使用するために時間をはるかに良い使用になると思いますclazzklass-それはおそらく同様にあなたの健康のために良いでしょう。


3
不可能性についての言葉:Javaは予約語言語として設計されました。予約語以外の言語は、可読性にかかわらず、if if then then else elseなどのステートメントを正しくコンパイルして構文を強調表示できます。コンパイラは、意図的に残っていたので、できない
USR-ローカルΕΨΗΕΛΩΝ

4

これはどこから来たのですか?

Josh Blochのパズルで最初に見た。しかし、それは他の開発者がずっと以前に使用していたと確信しています。ジョシュ・ブロックはそれをもっと有名にした。


4

Javaには、C#の@接頭辞とは異なり(たとえば@class、有効な識別子)、キーワードを識別子として使用できる機能はありません。


2
それは別の識別子です。 classおよび$classは、JVMで有効な(ただし異なる)識別子です。"class"VM で変換されるJavaソースファイルに記述できる識別子はありません。
finnw 2010年

2

これは、クラスであることを人々に理解させるために、キーワードクラスキーワードに置き換えられた(同等)英語の単語です。コードの可読性を高めることです

これに関与する大きなロジックはありません


2

宣言Class clazzはJavaの世界では人気がありますが、初心者やスペルチェッカーには扱いにくいかもしれません。驚くべきことの原則に従ってそれを避けるべきであると言う人々を聞いたことがあります。

Classオブジェクト型を表すと言えるので、私は個人的にそのような変数をとして宣言することを好みますClass type


0

クラスはタイプヘッダーなので、clazzを使用します。たとえば、ここでクラスを使用します。

public class HelloWorld {

そしてここ:

Object.class.getName();

残念ながら、clazzなどの代替名を使用する必要があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.