Dlaczego programiści Java lubią nazywać zmienną „clazz”? [Zamknięte]


156

Widziałem wiele kodów z deklaracją, na przykład Class clazz, skąd się to bierze? Czy to jakaś konwencja? Myślę, że „clazz” nie jest nawet angielskim słowem, nie ma żadnego znaczenia, jak tak wielu programistów może przypadkowo nazwać błędną nazwę?


36
nie zapomnij o klasie!
Peter Recore,

24
@Peter: słuszna uwaga, to jest klasyczne.
Prezydent James K. Polk

13
Aleksey Shipilev zaproponował alternatywne użycie сlasspisowni z cyrylicą с.
Stuart Marks

12
@StuartMarks Odrzucam tę propozycję. Nie ma za co.
Goran Vasic

16
W Anglii zwykle używamy słowa „clarse”.
John Gowers

Odpowiedzi:


173

clazzjest używany w Javie zamiast zarezerwowanego słowa „klasa” od JDK 1.0. „Klasa” jest tym, czego chcesz, ale skracanie lub wstawianie śmieci („a”, „the”, „_” itp.) zmniejsza przejrzystość. clazzpo prostu mówi klasa. „Międzynarodowi” użytkownicy języka angielskiego (ci, którzy czytają zarówno brytyjski, jak i amerykański język angielski) są przyzwyczajeni do transpozycji „s” i „z”.

Ponieważ Java od samego początku ujawniła źródło i odpowiednią kulturę, wartościowy kod Java i samouczki mają te same konwencje. To jedna z największych zalet ekosystemu Java, która moim zdaniem była ważną częścią jego sukcesu.


82
Trudno się zgodzić, że „clazz” jest bardziej zrozumiałe niż „_class” czy „myClass”. Gdybym zobaczył „_class” w kodzie, intencja byłaby bardziej oczywista niż słowo niebędące słowem, które wysłało mnie do Google (i do tej strony).
uscjeremy

@uscjeremy: Osobiście wolę używanie podkreślenia niż identyfikatory różniące się tylko wielkością liter. Gdybym zaprojektował język, chciałbym, aby był to hybryda reguł uwzględniających wielkość liter i bez rozróżniania wielkości liter: każdy identyfikator może być używany tylko w dokładnie oryginalnej wielkości, ale deklaracja dowolnego identyfikatora ukryłaby wszelkie wcześniej istniejące identyfikatory, które różniły się tylko obudową. Mając Foozdefiniowane w zakresie klasy i foow zakresie lokalnej zmiennej powinny być legalne, ale wszystkie odniesienia do zmiennej klasy zakres, w zakresie lokalnego powinny wymagać this.Foo. Taka zasada ...
supercat

@uscjeremy: ... moim zdaniem łączą zalety języków z rozróżnianiem wielkości liter i bez rozróżniania wielkości liter. Języki bez rozróżniania wielkości liter mają tę zaletę, że odczyty fonetyczne nazwy identyfikatora „foo” będą jednoznaczne bez konieczności wypowiadania „wielkie litery foo” lub „małe litery foo”, ale nie ma prawdziwego powodu, aby zezwalać na pisanie identyfikatora someThingw niektórych miejscach i sOmEtHiNgw innych.
supercat

1
@supercat Ogólna kategoria interpunkcji w Unicode jest tym, czego szukałem. unicode.org/faq/punctuation_symbols.html / Nie zaprojektowałbym C #. W Javie uzyskujesz metodę wywoływaną fnordi pole wywoływane fnordbez żadnych problemów, wielkich liter i bezsensownych słów. Myślę, że to wystarczy jako kontrprzykład.
Tom Hawtin - tackline

3
@uscjeremy Trudno się zgodzić, że „clazz” jest bardziej czytelne niż „_class” czy „myClass” - prawda. Jednak użycie „_class” nie byłoby opcją, ponieważ jest to wyraźnie sprzeczne z konwencjami nazewnictwa Java .
MC Emperor

73

Ponieważ nie mogą użyć słowa, którego chcą użyć, którym jest class. To jest zarezerwowane.


2
Tak, wiem, ale myślę, że prawidłowe pisanie zmiennej byłoby bardziej znaczące.
Sawyer

22
@Tony - jak możesz powiedzieć „wiesz” i zażądać, aby nazwa zmiennej została zapisana w tym samym komentarzu? One wzajemnie się wykluczają.
duffymo

3
@ Tony, po prostu nie możesz nazwać zmiennej „klasa”, to zarezerwowane słowo.
Steve Kuo

6
@duffymo: To zabawne. Wiem, że klasa jest słowem zastrzeżonym i rzeczywiście żądam, aby nazwa zmiennej była zapisana poprawnie, dlaczego wzajemnie się wykluczają? czy musisz nazywać to „klasą”?
Sawyer

13
Domyślam się, że Tony chce, aby zmienna nosiła nazwę bardziej opisową niż po prostu „klasa”. Na przykład, można powiedzieć, że „x” jest poprawnie zapisany, ale nie oznacza tak dużo, jak „numberOfComments”
Peter Recore

17

Po prostu dlatego, że „class” jest zastrzeżonym słowem kluczowym, dlatego Class classnie jest dozwolone. Dlatego zobaczysz Class clazzlub Class cls.


7
Nie mogę wymyślić powodu, by nazwać klasę, Classponieważ w danym projekcie jest tak wiele klas, że nazywanie klasy THE klasą wydaje się bezcelowe. Nie przychodzi mi też do class
głowy

8
Nie nazwałeś klasy Class, to java API.
Sawyer

3
@Blindy: A co z java.lang.Class? Nie masz tam wielkiego wyboru.
Dan Dyer,

14
@Blindy: Istnieje już klasa o nazwie Class, która odnosi się do klasy obiektu. Idealnym powodem posiadania zmiennej o nazwie „klasa” jest praca z klasą obiektu (tj. Ustalenie typu obiektu)
wielebny Gonzo

3
Uważam informacyjny ClassInformationlub ClassMetadatalub coś podobnego. Każda klasa jest klasą, ale nie nazywa się ich wszystkich Class, tylko ich główną funkcją.
Blindy

7

Sprowadza się do faktycznego kompilatora i jego zdolności do rozróżnienia, co oznacza token w swoim kontekście. Jednak w tym konkretnym przypadku to niezdolność kompilatora do rozróżnienia, co classoznacza token w innym kontekście. Jest to twarda i szybka reguła, która classniezależnie od kontekstu jest używana do oznaczenia deklaracji klasy i jako taka jest słowem zastrzeżonym . To jest tak proste i tak niskie, jak to tylko możliwe.

Jeśli czujesz się zmuszony, możesz napisać własny kompilator języka Java, aby zawierał regułę kontekstową, która pozwoli ci użyć classjako nazwy zmiennej. Chociaż myślę, że dużo lepsze byłoby wykorzystanie twojego czasu po prostu clazzlub klass- prawdopodobnie byłoby to również dobre dla twojego zdrowia.


3
Słowo o niemożności : Java została zaprojektowana jako język słów zastrzeżonych . Języki niezarezerwowanych słów mogą z powodzeniem kompilować i podświetlać składnie instrukcje, takie jak if to then else , pomimo (nie) czytelności. Więc kompilator celowo nie
usr-local-ΕΨΗΕΛΩΝ

4

skąd się to bierze?

Najpierw zobaczyłem to u łamigłówek Josha Blocha. Ale jestem prawie pewien, że był używany znacznie wcześniej przez innych programistów. Josh Bloch właśnie uczynił go bardziej znanym.


4

Java nie ma funkcji umożliwiającej użycie słowa kluczowego jako identyfikatora, w przeciwieństwie do C # z jego @prefiksem (np. @classJest prawidłowym identyfikatorem).


2
To inny identyfikator. classi $classoba są prawidłowymi (ale różnymi) identyfikatorami w JVM. Nie ma identyfikatora, który można zapisać w pliku źródłowym Java, który można przetłumaczyć "class"na maszynie wirtualnej.
finnw

2

Jest to po prostu angielskie słowo zastąpione (Równoważne) słowem kluczowym klasy, aby ludzie zrozumieli, że jest to klasa. i prawie ma na celu zwiększenie czytelności Kodeksu

Nie ma w tym nic wielkiego logiki


2

Deklaracja Class clazzjest popularna w świecie Java, ale może być niewygodna dla nowicjuszy i osób sprawdzających pisownię. Słyszałem, jak niektórzy mówili, że należy tego unikać zgodnie z zasadą najmniejszego zdziwienia .

Ponieważ można powiedzieć, że Classobiekt reprezentuje typ , ja osobiście wolę deklarować takie zmienne jak Class type.


0

Używamy clazza, ponieważ class jest nagłówkiem typu. Na przykład używasz tutaj class:

public class HelloWorld {

i tu:

Object.class.getName();

Więc niestety musimy używać alternatywnych nazw, takich jak clazz.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.