Почему программисты на 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.