2010-05-08 2 views
24

나는 다음과 같다 코드의 조각을 가지고 :유니 코드 기호를 Java 식별자로 사용하는 것이 좋은 생각입니까?

double Δt = lastPollTime - pollTime; 
double α = 1 - Math.exp(-Δt/τ); 
average += α * (x - average); 

아이디어가 자바 식별자에 유니 코드 문자를 사용하는 것입니다 얼마나 나쁜? 아니면 완벽하게 받아 들일 수 있습니까?

+42

¿ ¿ ¿ ʎʎɐɐʞɯɯɯ 'pɐq sı ǝpoɔ uı ǝpoɔıun – polygenelubricants

+25

방금 ​​upvoted, 또는 downvoted 여부 확실하지 않습니다 ... – Thomas

+0

쪽 메모에서 개발 된 요새 언어를 체크 아웃하는 것이 좋습니다 Sun의 (다른 사람들과) Guy L Steele. 그것은 다양한 유니 코드 연산자를 지원하며 심지어 ASCII 코드도 유니 코드로 '예쁜 인쇄'될 수 있습니다. http://projectfortress.sun.com/Projects/Community/wiki/MathSyntaxInFortress – Cowan

답변

32

여러 가지 이유로 나쁜 생각입니다.

  • 많은 사람들의 키보드는 이러한 문자를 지원하지 않습니다. Qwerty 키보드 (또는 그리스어 문자가없는 다른 키보드)에서이 코드를 유지하려면 해당 문자를 항상 복사하여 붙여 넣어야합니다.

  • 일부 편집자 또는 터미널은 이러한 문자를 올바르게 표시하지 못할 수 있습니다. 예를 들어 일부 편집자 (불행히도)는 여전히 일부 ISO-8859 (라틴) 변형을 기본값으로 사용합니다. ASCII가 여전히 널리 퍼져있는 주된 이유는 거의 항상 작동한다는 것입니다.

  • 문자가 제대로 렌더링 될 수 있더라도 혼동을 일으킬 수 있습니다. Straight from Sun (강조 표시) :

    동일한 외형을 가진 식별자는 아직 다를 수 있습니다. 예를 들어, 대문자 LETTER A (A, \ u0041), 라틴 소문자 A (a, \ u0061), 그리스 대문자 알파벳 (A, \ u0391), CYRILLIC SMALL LETTER A , \ u0430) 및 MATHEMATICTICAL BOLD ITALIC SMALL A (a, \ ud835 \ udc82)는 모두 다릅니다.

    ...

    유니 코드 복합 문자는 분해 문자 다릅니다. 예를 들어, LATIN CAPITAL LETTER A ACUTE (Á, \ u00c1)는 LATIN CAPITAL LETTER A (A, \ u0041)와 동일한 것으로 간주 될 수 있으며 그 다음에 NON-SPACING ACUTE (', \ u0301) 정렬 (sorting)하지만 이것은 식별자가 다릅니다.

    이 어떠한 방식으로 가상의 문제 : α (U + 03b1 그리스의 SMALL LETTER ALPHA)과 ⍺ (U + 237A APL 기능적인 SYMBOL ALPHA) 서로 다른 문자를!

  • 어떤 문자가 유효한지 알 수있는 방법이 없습니다. 코드의 문자가 작동하지만 기능적 기호 알파를 사용할 때 Java 컴파일러에서 "불법 문자 : \ 9082"에 대한 불만을 표시합니다. 기능적 심볼이이 코드에서 더 적절할지라도. askingCharacter.isJavaIdentifierPart()을 제외하고 어떤 문자를 사용할 수 있는지에 대한 확고한 규칙이없는 것으로 보입니다.

  • 컴파일 할 수는 있지만 모든 Java 가상 머신 구현이 유니 코드 식별자로 엄격하게 테스트되었는지는 의문의 여지가 있습니다. 이러한 문자가 메서드 범위의 변수에만 사용되면 컴파일해야하지만 클래스 멤버 인 경우 .class 파일로 끝나기 때문에 버그가있는 JVM 구현에서 프로그램이 중단 될 수 있습니다.

+0

마지막 지점에서 확장하려면 : 기본 플랫폼의 기본 파일 인코딩에 의존합니다. 이것은 Sun JVM (예, JVM 구현에 따라 ...)에서'-Dfile.encoding'을 사용하여 제어 할 수 있지만, 실제로는 의존하지 않으려합니다. 저것은 중요한 showstopper imo이다.좋은 대답 btw, +1. – BalusC

+4

@BalusC : 감사합니다.하지만 당신이 오해했다고 생각합니다. '.class' 파일의 내부에서는 오직 하나의 인코딩 만 사용되며 UTF-8과 비슷한 것입니다. http://en.wikipedia.org/wiki/Class_%28file_format%29 필자가 결정할 수있는 한,'file.encoding'은'InputStreamReader'와 같은 클래스의 기본 인코딩을 지정하기 위해서만 사용됩니다. – Thomas

1

왜 안 되니? 해당 코드로 작업하는 사람들이 쉽게 입력 할 수 있다면 받아 들일 수 있습니다.

그러나 신은 유니 코드를 표시 할 수 없거나 입력 할 수없는 사람들을 돕습니다.

+2

이 시점에서 유니 코드를 표시 할 수없는 사람은 누구나 80 년대에서 21 세기로 나가야합니다. RSTS/E를 뒤집어 쓴다는 것은 그 자리에 i18n의 시작을 가졌음을 의미합니다! –

+1

@ttmrichter : 잘못된 구성 기계와 오래된 소프트웨어가 많지 않다면 당신이 옳을 것입니다 ... – Thomas

+0

유닉스와 리눅스 세계에서도 콘솔 안에 정력이나 이맥스를 사용하는 사람들이 많습니다. , 유니 코드 문자를 보거나 쓸 수 있다고 보장 할 수는 없습니다. – LukeN

6

은 올바른 기호를 사용하는 것처럼 보이지만 팀원 중 몇 명이 해당 기호에 대한 키 입력을 알 수 있습니까?

나는 쉽게 입력 할 수 있도록 영어로 표현할 것입니다. 그리고 다른 사람들은 자신의 PC에 설정된 기호를 지원하는 문자 집합이 없을 수도 있습니다.

4

그 코드 읽기 좋은,하지만 유지 관리가 끔찍 - 내가 지금처럼 일반 영어 식별자를 사용하는 것이 좋습니다 : 그것은 당신의 작업 그룹에서 허용하는 경우

double deltaTime = lastPollTime - pollTime; 
double alpha = 1 - Math.exp(-delta.... 
6

그것은 완벽하게 허용됩니다. 여기서 많은 답변은 모두가 영어로 프로그램한다는 오만한 가정하에 작동합니다. 요즘 영어가 아닌 프로그래머는 드문 일이 아니며 가속도가 떨어지는 드문 경우가 드뭅니다. 언어가 완벽하게 좋은 언어를 사용하는 경우 왜 영어 버전으로 제한해야합니까?

영어가 아닌 오만함 이외에도 영어 이외의 식별자를 사용하는 데는 타당한 이유가 있습니다. 예를 들어 수학 패키지를 작성하는 경우 목표가 동료 수학자라면 그리스어를 사용하는 것이 좋습니다. 사람들이 "Δ"를 이해하고 더 빨리 입력 할 수있는 경우 작업 그룹에 "델타"를 입력해야하는 이유는 무엇입니까? 거의 모든 문제 영역에는 고유 한 특수 용어가 있으며 때때로 전문 용어는 라틴 알파벳 이외의 다른 표현으로 표현됩니다. 왜 지구상에서 모든 것을 ASCII로 시도하고 싶습니까?

+0

절대적으로 동의합니다; 저는 작업 그룹이 그것을 받아 들일 수 있고, 타이핑하기 쉽고, 더 명확하다고 생각한다면, 그것을 생각해보십시오. 이 일을하는 것에 대한 유일한 이상한 점은 Δ와 같은 문자가 '문자'이기 때문에 올바른 Java 식별자 시작임을 '우연히' '우연히'발견한다는 것입니다. 유사한 용도의 다른 문자는 '문자'가 아니므로 유효하지 않습니다. – Cowan

+0

-1 "당신은 영어 만 알고 있기 때문에 빨아 먹습니다." 누군가 파이썬 같은 언어를 구사할 때까지는 배울 이유가 없습니다. 전 세계의 모든 사람이 하나의 언어 만 사용해야합니다. 언어는 프로그래밍과 같은 게임이 아니라 기본적인 필요입니다. 특정 도메인에있을 때 대수 기호를 사용해도됩니다 ._ –

+4

@ Longpoke : "영어 만 알고 있기 때문에 빨아 먹는다"고 말한 지점을 지적하십시오. (힌트 : 이것은 불가능합니다.) 지옥, 내가 * 추론 한 곳을 가리킨다. (힌트 : 이것 역시 가능하지 않다.) 그러나 내가 지적하는 것은 "유니 코드를 식별자로 사용하지 말라는 것은 읽기가 어렵 기 때문에"** 매우 ** 오만한 영어를 사용하는 프로그래머들만이 생각하는 태도. 그러므로 "anglophone 오만함". –

2

훌륭한 아이디어입니다. 정직한.에 을 쉽게 실행할 수 없습니다. 미래에 대한 참고 문헌을 계속 지킵시다. 나는 을 사랑 삼각형, 원, 사각형 등을 볼 것입니다 ... 프로그램 코드의 일부로. 그러나 지금은 Crozin이 제안한 방식대로 다시 써보십시오.

1

완벽한 세상에서 이것은 권장되는 방법입니다.

불행하게도 평범한 7 비트 ASCII 문자 (UTF-8이 ISO-Latin-1과 UTF-16 등이 다른 경우)를 벗어나면 문자 인코딩을 사용하기 때문에 결국에는 문제가 발생하게됩니다. Windows에서 Linux로 전환 할 때 이런 일이 발생했습니다. 우리의 전국 스칸디나비아 문자는 그 과정에서 파손되었지만, 다행스럽게도 문자열에서만 사용되었습니다. 그런 다음 모든 것을 \ u 인코딩을 사용했습니다.

예를 들어, 파일에 적절한 BOM이 포함 된 경우와 같이 절대로 실행하지 않을 것이라는 확신이들 수 있다면 꼭 그렇게하십시오. 그것은 당신의 코드를 더 읽기 쉽게 만들어 줄 것이다. 의심의 여지가 최소한 있다면,하지 마십시오.

("영어 이외의 언어 사용"은 다른 점으로 유의하십시오. 문자 대신 기호를 사용하려고합니다).

+0

그 기호 *는 영어가 아닌 언어입니다. 델타와 알파는 그리스어입니다. 그것은 언어입니다. 그건 영어가 아니야. –

+1

@ttmricher, 저는 영어 용어를 사용하는 것과는 대조적으로 모국어로 식별자를 사용하는 것을 언급했습니다. (프랑스어 인 경우 말 대신에 슈발처럼). 이 질문은 _mathematical_ 감각에서 "Δ"를 사용하는 것과 다릅니다. –

관련 문제