Java 프로그래머가 변수 이름을 "clazz"로 지정하는 이유는 무엇입니까? [닫은]


156

나는 많은 코드가 다음과 같은 선언을 가지고 있음을 보았습니다 Class clazz. 이것은 일종의 관습입니까? 나는 'clazz'가 영어 단어가 아니라고 생각한다. 전혀 의미가 없다. 어떻게 많은 프로그래머들이 우연히 잘못된 이름을 말할 수 있을까?


36
klass를 잊지 마세요!
Peter Recore

24
@ 피터 : 좋은 지적입니다.
James K. Polk 대통령

13
Aleksey Shipilevсlass키릴 문자 철자를 с대안으로 사용하도록 제안했습니다 .
스튜어트 마크

12
@StuartMarks 나는 그 제안을 거부하고 있습니다. 천만에요.
Goran Vasic

16
영국에서는 일반적으로 '명확함'을 사용합니다.
John Gowers

답변:


173

clazzJDK 1.0부터 예약어 "class"대신 Java에서 사용되었습니다. "class"는 원하는 것이지만 정크 ( "a", "the", "_"등)를 줄이거 나 삽입하면 명확성이 줄어 듭니다. clazz그냥 수업을 말합니다. "국제"영어 사용자 (영국 및 미국 영어를 읽는 사람)는 's'와 'z'를 바꾸는 데 사용됩니다.

Java는 처음부터 소스와 적절한 문화를 공개했기 때문에 가치있는 Java 코드와 자습서는 동일한 규칙을 선택합니다. 이것이 Java 에코 시스템의 가장 큰 장점 중 하나이며, 이것이 성공의 중요한 부분이라고 생각합니다.


82
"clazz"가 "_class"또는 "myClass"보다 명확하다는 데 동의하기 어렵습니다. 코드에서 "_class"를 본 경우 의도는 Google (및이 페이지)로 보낸 비 단어보다 더 분명했을 것입니다.
uscjeremy

@ uscjeremy : 개인적으로 나는 밑줄을 사용하여 경우에 따라 다른 식별자를 사용하는 것을 선호합니다. 언어를 디자인 할 때는 대소 문자를 구분하고 대소 문자를 구분하지 않는 규칙을 혼합했습니다. 모든 식별자 는 원래 대소 문자 만 사용할 수 있지만 식별자를 선언하면 기존 식별자가 숨겨집니다. 케이싱 만 다릅니다. 갖는 Foo클래스 범위에서와 정의 된 foo지역 변수 범위에서하는 것은 법적해야하지만, 지역의 범위 내에서 클래스 범위 변수에 대한 모든 참조가 필요합니다 this.Foo. 그러한 규칙은 ...
supercat

@ uscjeremy : ... 내 의견으로는 대소 문자를 구분하고 대소 문자를 구분하지 않는 언어의 장점을 결합합니다. 대소 문자를 구분하지 않는 언어는 식별자 이름 "foo"의 발음을 읽을 때 "대문자 foo"또는 "소문자 foo"를 말할 필요없이 모호하지 않다는 이점이 있지만 someThing일부 장소에서 식별자의 철자를 허용 할 실제적인 이유는 없습니다. sOmEtHiNg다른 사람들에게.
supercat

1
@supercat 문장 부호의 유니 코드 일반 범주는 내가 낚시했던 것입니다. unicode.org/faq/punctuation_symbols.html / C #을 디자인하지 않습니다. Java에서는 아무 문제 나 대문자 또는 의미없는 단어없이 fnord호출 된 필드와 호출 된 필드를 사용 fnord하지 않아도됩니다. 나는 이것이 반례로 충분하다고 생각합니다.
Tom Hawtin-tackline

3
@uscjeremy "clazz"가 "_class"또는 "myClass" — True 보다 명확하다는 데 동의하기 어렵습니다 . 그러나 "_class"를 사용하는 것은 Java 명명 규칙 과 분명히 충돌하기 때문에 옵션이 아닙니다 .
MC 황제

73

그들은 사용하고자하는 단어를 사용할 수 없기 때문에입니다 class. 예약되어 있습니다.


2
그래, 나도 알고 있지만, 맞춤법 변수가 더 의미가 있다고 생각합니다.
소여

22
@Tony-어떻게 "알다"고 말할 수 있고 변수 이름을 같은 주석으로 입력해야합니까? 그들은 상호 배타적입니다.
duffymo

3
@Tony, 변수 "class"라는 이름을 지정할 수 없으며 예약어입니다.
Steve Kuo

6
@ duffymo : 재미 있 네요. 클래스가 예약 된 단어라는 것을 알고 있으며 실제로 변수 이름을 정확히 입력해야하는데 왜 상호 배타적입니까? '클래스'라고해야합니까?
Sawyer

13
Tony가 변수를 "클래스"보다 더 설명적인 이름으로 만들고 싶어하는 것 같습니다. 예를 들어, "x"는 철자가 적절하다고 말할 수 있지만 "numberOfComments"만큼 의미가있는 것은 아닙니다.
Peter Recore

17

단순히 'class'가 예약 된 키워드이기 때문에 Class class허용되지 않습니다. 따라서 당신은 볼 Class clazz이나 Class cls.


7
Class주어진 프로젝트에 클래스가 너무 많아 클래스를 호출하는 것이 무의미 해 보이기 때문에 클래스 이름을 지정할 이유를 생각할 수 없습니다 . 나는 또한 VARIABLE이라고 부르는 이유를 생각할 수 없다 class...
Blindy

8
클래스 이름을 지정하지 않았습니다. Java API입니다.
소여

3
@Blindy : java.lang.Class는 어떻습니까? 당신은 거기에 많은 선택이 없습니다.
Dan Dyer

14
@Blindy : 이미 Class라는 클래스가 있는데,이 클래스는 객체의 클래스를 가리 킵니다. 'class'라는 변수를 갖는 완벽한 이유는 객체의 클래스로 작업 할 때입니다 (예 : 객체가 어떤 유형인지 파악)
Gonzo Reverend

3
나는 정보를 고려할 것 ClassInformation, 또는 ClassMetadata또는 비슷한. 모든 클래스는 클래스이지만 모두 이름을 지정하지는 않고 Class주요 기능으로 이름을 지정합니다.
Blindy

7

실제 컴파일러와 컨텍스트 내에서 토큰의 의미를 구별하는 기능이 있습니다. 그러나이 특별한 경우에, 토큰 이 다른 맥락에서 의미하는 것을 구별하는 것은 컴파일러의 능력 이 아닙니다 class. class문맥에 관계없이 클래스 선언을 나타내는 데 사용되는 예약 규칙이므로 어렵고 빠른 규칙입니다 . 그것이 얻는 것처럼 간단하고 저수준입니다.

강제적 인 느낌이 든다면 class변수 이름 으로 사용할 수있는 컨텍스트 규칙을 포함하도록 자체 Java 컴파일러를 작성할 수 있습니다 . 나는 그냥 사용하는 시간의 훨씬 더 나은 사용이 될 것이라고 생각하지만 clazzklass- 그것은 아마 당신의 건강을 위해 좋을뿐만 아니라 것입니다.


3
대한 단어 무능력 : 자바는 한 설계 A와 예약 - 단어 언어. 비 예약어 언어는 가독성에도 불구하고 if if then else else 와 같은 명령문을 성공적으로 컴파일하고 구문 강조 할 수 있습니다 . 그래서 컴파일러는 의도적으로 방치 할 수없는
USR-로컬 ΕΨΗΕΛΩΝ

4

이것은 어디에서 시작됩니까?

Josh Bloch의 퍼즐 게임에서 처음 봤습니다. 그러나 다른 개발자가 훨씬 일찍 사용했다고 확신합니다. 조쉬 블로흐가 방금 유명해졌습니다.


4

Java에는 @접두사 @class가있는 C #과 달리 키워드를 식별자로 사용할 수있는 기능이 없습니다 (예 : 유효한 식별자).


2
다른 식별자입니다. class$classJVM의 모두 유효한 (그러나 서로 다른)의 식별자이다. "class"VM에서 변환되는 Java 소스 파일에 작성할 수있는 식별자가 없습니다 .
finnw

2

키워드 클래스 키워드로 대체 된 (동일한) 영어 단어이므로 사람들이 클래스라는 것을 이해할 수 있습니다. 코드의 가독성을 거의 높이는 것입니다

이것에 관련된 큰 논리는 없습니다.



0

클래스는 타입 헤더이기 때문에 clazz를 사용합니다. 예를 들어 여기에서 class를 사용합니다.

public class HelloWorld {

그리고 여기:

Object.class.getName();

불행히도, clazz와 같은 대체 이름을 사용해야합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.