Чому програмісти Java люблять називати змінну "clazz"? [зачинено]


156

Я бачив, що в багатьох кодах є декларації типу Class clazz, звідки це походить? Це якась умовність? Я думаю, що "clazz" - це навіть не англійське слово, воно зовсім не має значення, як так багато програмістів можуть випадково назвати неправильне ім'я?


36
не забувайте класу!
— Пітер Рекор

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

13
Олексій Шипілєв запропонував використовувати як альтернативу сlassнаписаний кирилицею с.
— Стюарт Маркс

12
@StuartMarks Я відкидаю цю пропозицію. Ласкаво просимо.
— Горан Васич

16
В Англії ми зазвичай використовуємо "чіткіші".
— Джон Гоуерс

Відповіді:


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. Таке правило буде ...
— supercat

@uscjeremy: ... на мою думку, поєднують переваги чутливих до регістру та чутливих до регістру мов. Нечутливі до регістру мови мають користь, що фонетичні читання ідентифікатора з назвою "foo" будуть однозначними, не вимовляючи "верхній регістр" або "нижній регістр", але немає реальної причини, щоб дозволити написання ідентифікатора someThingв деяких місцях і sOmEtHiNgв інших.
— supercat

1
@supercat Загальна категорія пунктуації - це те, на що я рибалив. unicode.org/faq/punctuation_symbols.html / Я б не створив C #. У Java ви вибираєтесь із методом, що називається, fnordта полем, викликаним fnordбез жодних питань, з великої літери чи безглуздих слів. Я думаю, що цього буде досить як протилежний приклад.
— Том Хоутін - тайклін

3
@uscjeremy Важко погодитись, що "clazz" зрозуміліший, ніж "_class" або "myClass" - True. Однак використання "_class" не було б варіантом, оскільки воно чітко суперечить умовам іменування Java .
— MC Імператор

73

Тому що вони не можуть використовувати слово, яке вони хочуть використовувати, яке є class. Це зарезервовано.


2
Так, я знаю, але я думаю, що написання правої змінної було б більш значущим.
— Сойєр

22
@Tony - як ти можеш сказати "ти знаєш" і вимагати, щоб ім'я змінної було написано прямо в тому ж коментарі? Вони взаємовиключні.
— duffymo

3
@Tony, ти просто не можеш назвати змінну "class", це зарезервоване слово.
— Стів Куо

6
@duffymo: Це смішно. Я знаю, що клас - це зарезервоване слово, і я дійсно вимагаю, щоб ім’я змінної було написано правильно, чому вони взаємно виключають ?? чи потрібно це називати "класом"?
— Сойєр

13
Я здогадуюсь, що Тоні хоче, щоб змінна була названа чимось більш описовим, ніж просто "клас". Наприклад, можна сказати, що "x" написано належним чином, але це означає не стільки, скільки "числоOfComments"
— Peter Recore

17

Це просто тому, що 'class' є зарезервованим ключовим словом, отже Class class, заборонено. Таким чином , ви будете бачити Class clazzабо Class cls.


7
Я не можу придумати причину називати клас, Classоскільки в будь-якому даному проекті так багато класів, що виклик класу класу здається безглуздим. Я також не можу придумати причину викликати class
— РІЗНИЙ

8
Ви не назвали клас Class, це java API.
— Сойєр

3
@Blindy: Що з java.lang.Class? У вас там не багато вибору.
— Ден Дайер

14
@Blindy: Там вже є клас під назвою Class, який відноситься до класу об'єкта. Ідеальна причина мати змінну під назвою "class" - це коли ви працюєте з класом об'єкта (тобто: з'ясовувати, який тип об'єкта)
— преподобний Гонзо

3
Я б вважав інформативним ClassInformation, ClassMetadataчи чимось подібним. Кожен клас - це клас, але ви не називаєте їх усіх Class, ви називаєте їх за їх основною функцією.
— Сліпий

7

Це зводиться до фактичного компілятора та його здатності розрізнити, що означає маркер у його контексті. Однак у цьому конкретному випадку полягає у нездатності компілятора розрізнити, що classозначає маркер у іншому контексті. Це жорстке і швидке правило, яке class, незалежно від його контексту, використовується для позначення декларації класу, і як таке воно є зарезервованим словом. Це так само просто і настільки ж низько, як це виходить.

Якщо ви відчуваєте вимушеність, ви можете написати власний компілятор Java, щоб включити контекстне правило, яке дозволить вам використовувати classяк ім'я змінної. Хоча я думаю, було б набагато краще використовувати свій час просто використовувати clazzабо klass- це, мабуть, було б добре і для вашого здоров’я.


3
Слово про нездатність : Java була розроблена як мова із застереженими словами . Мови, що не містять слів, можуть успішно компілювати та виділяти синтаксис висловлювання, наприклад, якщо, якщо тоді, то ще , незважаючи на (не) читабельність. Тож компілятор навмисно не
— usr-local-ΕΨΗΕΛΩΝ

4

звідки це походить?

Я побачив це першим у загадках Джоша Блоха. Але я впевнений, що його використовували набагато раніше інші розробники. Джош Блох просто зробив це більш відомим.


4

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


2
Це інший ідентифікатор. classі $classє дійсними (але різними) ідентифікаторами в JVM. Немає жодного ідентифікатора, який можна записати у вихідний файл Java, що перекладається "class"у віртуальний комп'ютер
— finnw

2

Це просто англійське слово, замінене (Еквавалентне) на Ключове слово Класове слово, щоб люди зрозуміли, що це Клас. і це майже для підвищення читабельності Кодексу

Нічого великого Логіка в цьому не бере участь


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.