Чому програмісти 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.