나는 다음과 같다 코드의 조각을 가지고 :유니 코드 기호를 Java 식별자로 사용하는 것이 좋은 생각입니까?
double Δt = lastPollTime - pollTime;
double α = 1 - Math.exp(-Δt/τ);
average += α * (x - average);
아이디어가 자바 식별자에 유니 코드 문자를 사용하는 것입니다 얼마나 나쁜? 아니면 완벽하게 받아 들일 수 있습니까?
나는 다음과 같다 코드의 조각을 가지고 :유니 코드 기호를 Java 식별자로 사용하는 것이 좋은 생각입니까?
double Δt = lastPollTime - pollTime;
double α = 1 - Math.exp(-Δt/τ);
average += α * (x - average);
아이디어가 자바 식별자에 유니 코드 문자를 사용하는 것입니다 얼마나 나쁜? 아니면 완벽하게 받아 들일 수 있습니까?
여러 가지 이유로 나쁜 생각입니다.
많은 사람들의 키보드는 이러한 문자를 지원하지 않습니다. 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 구현에서 프로그램이 중단 될 수 있습니다.
마지막 지점에서 확장하려면 : 기본 플랫폼의 기본 파일 인코딩에 의존합니다. 이것은 Sun JVM (예, JVM 구현에 따라 ...)에서'-Dfile.encoding'을 사용하여 제어 할 수 있지만, 실제로는 의존하지 않으려합니다. 저것은 중요한 showstopper imo이다.좋은 대답 btw, +1. – BalusC
@BalusC : 감사합니다.하지만 당신이 오해했다고 생각합니다. '.class' 파일의 내부에서는 오직 하나의 인코딩 만 사용되며 UTF-8과 비슷한 것입니다. http://en.wikipedia.org/wiki/Class_%28file_format%29 필자가 결정할 수있는 한,'file.encoding'은'InputStreamReader'와 같은 클래스의 기본 인코딩을 지정하기 위해서만 사용됩니다. – Thomas
왜 안 되니? 해당 코드로 작업하는 사람들이 쉽게 입력 할 수 있다면 받아 들일 수 있습니다.
그러나 신은 유니 코드를 표시 할 수 없거나 입력 할 수없는 사람들을 돕습니다.
은 올바른 기호를 사용하는 것처럼 보이지만 팀원 중 몇 명이 해당 기호에 대한 키 입력을 알 수 있습니까?
나는 쉽게 입력 할 수 있도록 영어로 표현할 것입니다. 그리고 다른 사람들은 자신의 PC에 설정된 기호를 지원하는 문자 집합이 없을 수도 있습니다.
그 코드 읽기 좋은,하지만 유지 관리가 끔찍 - 내가 지금처럼 일반 영어 식별자를 사용하는 것이 좋습니다 : 그것은 당신의 작업 그룹에서 허용하는 경우
가double deltaTime = lastPollTime - pollTime;
double alpha = 1 - Math.exp(-delta....
그것은 완벽하게 허용됩니다. 여기서 많은 답변은 모두가 영어로 프로그램한다는 오만한 가정하에 작동합니다. 요즘 영어가 아닌 프로그래머는 드문 일이 아니며 가속도가 떨어지는 드문 경우가 드뭅니다. 언어가 완벽하게 좋은 언어를 사용하는 경우 왜 영어 버전으로 제한해야합니까?
영어가 아닌 오만함 이외에도 영어 이외의 식별자를 사용하는 데는 타당한 이유가 있습니다. 예를 들어 수학 패키지를 작성하는 경우 목표가 동료 수학자라면 그리스어를 사용하는 것이 좋습니다. 사람들이 "Δ"를 이해하고 더 빨리 입력 할 수있는 경우 작업 그룹에 "델타"를 입력해야하는 이유는 무엇입니까? 거의 모든 문제 영역에는 고유 한 특수 용어가 있으며 때때로 전문 용어는 라틴 알파벳 이외의 다른 표현으로 표현됩니다. 왜 지구상에서 모든 것을 ASCII로 시도하고 싶습니까?
절대적으로 동의합니다; 저는 작업 그룹이 그것을 받아 들일 수 있고, 타이핑하기 쉽고, 더 명확하다고 생각한다면, 그것을 생각해보십시오. 이 일을하는 것에 대한 유일한 이상한 점은 Δ와 같은 문자가 '문자'이기 때문에 올바른 Java 식별자 시작임을 '우연히' '우연히'발견한다는 것입니다. 유사한 용도의 다른 문자는 '문자'가 아니므로 유효하지 않습니다. – Cowan
-1 "당신은 영어 만 알고 있기 때문에 빨아 먹습니다." 누군가 파이썬 같은 언어를 구사할 때까지는 배울 이유가 없습니다. 전 세계의 모든 사람이 하나의 언어 만 사용해야합니다. 언어는 프로그래밍과 같은 게임이 아니라 기본적인 필요입니다. 특정 도메인에있을 때 대수 기호를 사용해도됩니다 ._ –
@ Longpoke : "영어 만 알고 있기 때문에 빨아 먹는다"고 말한 지점을 지적하십시오. (힌트 : 이것은 불가능합니다.) 지옥, 내가 * 추론 한 곳을 가리킨다. (힌트 : 이것 역시 가능하지 않다.) 그러나 내가 지적하는 것은 "유니 코드를 식별자로 사용하지 말라는 것은 읽기가 어렵 기 때문에"** 매우 ** 오만한 영어를 사용하는 프로그래머들만이 생각하는 태도. 그러므로 "anglophone 오만함". –
훌륭한 아이디어입니다. 정직한.에 을 쉽게 실행할 수 없습니다. 미래에 대한 참고 문헌을 계속 지킵시다. 나는 을 사랑 삼각형, 원, 사각형 등을 볼 것입니다 ... 프로그램 코드의 일부로. 그러나 지금은 Crozin이 제안한 방식대로 다시 써보십시오.
완벽한 세상에서 이것은 권장되는 방법입니다.
불행하게도 평범한 7 비트 ASCII 문자 (UTF-8이 ISO-Latin-1과 UTF-16 등이 다른 경우)를 벗어나면 문자 인코딩을 사용하기 때문에 결국에는 문제가 발생하게됩니다. Windows에서 Linux로 전환 할 때 이런 일이 발생했습니다. 우리의 전국 스칸디나비아 문자는 그 과정에서 파손되었지만, 다행스럽게도 문자열에서만 사용되었습니다. 그런 다음 모든 것을 \ u 인코딩을 사용했습니다.
예를 들어, 파일에 적절한 BOM이 포함 된 경우와 같이 절대로 실행하지 않을 것이라는 확신이들 수 있다면 꼭 그렇게하십시오. 그것은 당신의 코드를 더 읽기 쉽게 만들어 줄 것이다. 의심의 여지가 최소한 있다면,하지 마십시오.
("영어 이외의 언어 사용"은 다른 점으로 유의하십시오. 문자 대신 기호를 사용하려고합니다).
그 기호 *는 영어가 아닌 언어입니다. 델타와 알파는 그리스어입니다. 그것은 언어입니다. 그건 영어가 아니야. –
@ttmricher, 저는 영어 용어를 사용하는 것과는 대조적으로 모국어로 식별자를 사용하는 것을 언급했습니다. (프랑스어 인 경우 말 대신에 슈발처럼). 이 질문은 _mathematical_ 감각에서 "Δ"를 사용하는 것과 다릅니다. –
¿ ¿ ¿ ʎʎɐɐʞɯɯɯ 'pɐq sı ǝpoɔ uı ǝpoɔıun – polygenelubricants
방금 upvoted, 또는 downvoted 여부 확실하지 않습니다 ... – Thomas
쪽 메모에서 개발 된 요새 언어를 체크 아웃하는 것이 좋습니다 Sun의 (다른 사람들과) Guy L Steele. 그것은 다양한 유니 코드 연산자를 지원하며 심지어 ASCII 코드도 유니 코드로 '예쁜 인쇄'될 수 있습니다. http://projectfortress.sun.com/Projects/Community/wiki/MathSyntaxInFortress – Cowan