Почему программисты на Java любят называть переменную «clazz»? [закрыто]


156

Я видел, что у многих кодов есть декларация вроде Class clazz, откуда это происходит? Это какая-то конвенция? Я думаю, что «clazz» даже не является английским словом, не имеет никакого значения, как многие программисты могут случайно назвать неправильное имя?


36
не забудь класс!
Питер Рекор

24
@Peter: хорошая точка зрения, это классика.
Президент Джеймс К. Полк

13
Алексей Шипилев предложил использовать в качестве альтернативы сlassнаписание с кириллицей с.
Стюарт Маркс

12
@StuartMarks Я отклоняю это предложение. Пожалуйста.
Горан Васич

16
В Англии мы обычно используем «clear».
Джон Гауэрс

Ответы:


173

clazzиспользуется в Java вместо зарезервированного слова «класс» начиная с JDK 1.0. "class" - это то, что вы хотите, но сокращение или вставка мусора ("a", "the", "_" и т. д.) снижает ясность. clazzпросто говорит класс. «Международные» носители английского языка (те, кто читает как британский, так и американский английский) привыкли переносить буквы «s» и «z».

Поскольку Java с самого начала раскрыла исходный код и подходящую культуру, достойный Java-код и учебные пособия используют те же соглашения. Это одна из замечательных особенностей экосистемы Java, которая, я думаю, была важной частью ее успеха.


82
Трудно согласиться с тем, что «clazz» более понятен, чем «_class» или «myClass». Если бы я видел «_class» в коде, намерение было бы более очевидным, чем не-слово, которое отправило меня в Google (и на эту страницу).
uscjeremy

@uscjeremy: Лично я предпочитаю использовать подчеркивание, чтобы иметь идентификаторы, которые отличаются только регистром. Если бы я разрабатывал язык, я хотел бы, чтобы он представлял собой гибрид правил с учетом регистра и без учета регистра: любой идентификатор мог бы использоваться только в точно исходном регистре, но объявление любого идентификатора скрывало бы любые существующие ранее идентификаторы, которые отличались только корпусом. Имея Fooопределенный в области видимости класса и fooна местном переменную сфере должно быть законными, но все ссылки на переменный класс областях видимости в пределах объема местного должны требовать this.Foo. Такое правило будет ...
суперкат

@uscjeremy: ... на мой взгляд, объединить преимущества регистрозависимых и не регистрозависимых языков. Языки, не чувствительные к регистру, имеют то преимущество, что фонетическое чтение идентификатора с именем «foo» будет однозначным без необходимости произносить «прописные буквы foo» или «строчные буквы foo», но нет никакой реальной причины разрешать написание идентификатора someThingв некоторых местах и sOmEtHiNgв других.
суперкат

1
@supercat Unicode - общая категория пунктуации, которую я ловил. unicode.org/faq/punctuation_symbols.html / Я не буду проектировать C #. В Java вам не мешают метод fnordи поле, вызываемые fnordбез каких-либо проблем, заглавных букв или бессмысленных слов. Я думаю, что будет достаточно в качестве контрпример.
Том Хотин - tackline

3
@uscjeremy Трудно согласиться с тем, что «clazz» более понятен, чем «_class» или «myClass» - правда. Однако использование «_class» не будет возможным, поскольку оно явно противоречит соглашениям об именах Java .
MC Emperor

73

Потому что они не могут использовать слово, которое они хотят использовать, которое есть class. Это зарезервировано.


2
Да, я знаю, но я думаю, что написание правильной переменной было бы более значимым.
Сойер

22
@ Тони - как вы можете сказать «вы знаете» и потребовать, чтобы имя переменной было написано прямо в том же комментарии? Они взаимоисключающие.
duffymo

3
@ Тони, вы просто не можете назвать переменную "класс", это зарезервированное слово.
Стив Куо

6
@duffymo: Это забавно. Я знаю, что класс - это зарезервированное слово, и я действительно требую, чтобы имя переменной было написано правильно, почему они взаимоисключающие ?? Вы должны назвать это "классом"?
Сойер

13
Я предполагаю, что Тони хочет, чтобы переменная называлась чем-то более описательным, чем просто «класс». Например, можно сказать, что «x» написано правильно, но это не так много, как «numberOfComments»
Peter Recore

17

Это просто потому, что «класс» является зарезервированным ключевым словом, поэтому Class classне допускается. Поэтому вы увидите Class clazzили Class cls.


7
Я не могу придумать причину назвать класс Class, так как в каждом конкретном проекте так много классов, что вызывать класс THE кажется бессмысленным. Я также не могу придумать причину, чтобы позвонить в class
переменную

8
Вы не назвали класс Class, это API Java.
Сойер

3
@Blindy: А как насчет java.lang.Class? У вас там нет большого выбора.
Дэн Дайер

14
@Blindy: уже существует класс под названием Class, который ссылается на класс объекта. Идеальная причина иметь переменную с именем «класс» - это когда вы работаете с классом объекта (то есть выясняете, какого типа объект)
Преподобный Гонзо

3
Я хотел бы рассмотреть информативный ClassInformation, или ClassMetadataили что - то подобное. Каждый класс является классом, но вы не называете их всех Class, вы называете их по основной функции.
Blindy

7

Все сводится к фактическому компилятору и его способности различать, что означает токен в его контексте. Однако, в данном случае, это компилятор неспособность различать то , что символические classсредства в другом контексте. Это жесткое и быстрое правило, которое classнезависимо от его контекста используется для обозначения объявления класса, и как таковое оно является зарезервированным словом. Это так просто и так низко, как только может.

Если вы чувствуете необходимость, вы можете написать свой собственный компилятор Java, чтобы включить контекстное правило, которое позволит вам использовать classв качестве имени переменной. Хотя я думаю, что было бы гораздо лучше использовать ваше время, чтобы просто использовать clazzили klass- это, вероятно, было бы полезно и для вашего здоровья.


3
Слово о неспособности : Java был разработан как язык зарезервированных слов . Языки с незарезервированными словами могут успешно компилировать и выделять синтаксические операторы, например, если, если тогда, то в другом месте , несмотря на (не) удобочитаемость. Таким образом, компилятор был намеренно оставлен неспособным
usr-local-ΕΨΗΕΛΩΝ

4

откуда это происходит?

Сначала я увидел это в загадках Джоша Блоха. Но я почти уверен, что другие разработчики использовали его гораздо раньше. Джош Блох только сделал это более известным.


4

В Java нет функции, позволяющей использовать ключевое слово в качестве идентификатора, в отличие от C # с его @префиксом (например, @classявляется допустимым идентификатором).


2
Это другой идентификатор. classи $classоба являются действительными (но разными) идентификаторами в JVM. Нет идентификатора, который вы можете записать в исходный файл Java, который переводится "class"в виртуальную машину.
Финн

2

Это просто английское слово, замененное (эквивалентное) на ключевое слово класса Keyword, чтобы люди поняли, что это класс. и это почти повысить читаемость кода

Ничего особенного в этом нет.


2

Декларация Class clazzпопулярна в мире Java, но она может быть неудобной для новичков и проверщиков правописания. Я слышал, как некоторые люди говорили, что этого следует избегать в соответствии с принципом наименьшего удивления .

Поскольку можно сказать, что Classобъект представляет тип , я лично предпочитаю объявлять такие переменные как Class type.


0

Мы используем clazz, потому что класс является заголовком типа. Например, вы используете класс здесь:

public class HelloWorld {

и тут:

Object.class.getName();

К сожалению, мы должны использовать альтернативные имена, такие как clazz.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.