난독 화 코드를 제외하고 프로그래밍 언어에서 대 / 소문자를 구분하는 용도는 없습니다.
왜 이것을 프로그래밍 언어로 구현해야합니까?
최신 정보:
그것은 모양 이에 성명을 발표했다 아는 사람 .
Person person = new Person()
기호 'person'이 임시 객체이고 'Person'이 클래스 유형 인 OO 언어 와 같은 것을 쓰는 것이 일반적 입니다.
난독 화 코드를 제외하고 프로그래밍 언어에서 대 / 소문자를 구분하는 용도는 없습니다.
왜 이것을 프로그래밍 언어로 구현해야합니까?
최신 정보:
그것은 모양 이에 성명을 발표했다 아는 사람 .
Person person = new Person()
기호 'person'이 임시 객체이고 'Person'이 클래스 유형 인 OO 언어 와 같은 것을 쓰는 것이 일반적 입니다.
답변:
영어로 대소 문자를 접는 작업은 사소한 것이지만 다른 언어에서는 그렇지 않습니다. 독일 프로그래머가 ß
변수 이름을 사용 하는 경우 대문자로 무엇을 고려할 것입니까? 참고로 "ß"는 소문자 에만 사용됩니다. OTOH, "ss" 는 동일합니다. 컴파일러와 일치해야한다고 생각하십니까? 유니 코드에 들어가면 사전 구성된 분음 부호가있는 문자와 별개의 결합 분음 부호와 같은 더욱 흥미로운 문제가 발생합니다. 그런 다음 두 글자가 아닌 여러 글자로 된 세 가지 형태의 아랍어 스크립트를 얻습니다.
암흑 시대에 대부분의 프로그래밍 언어는 거의 대소 문자를 구분하지 않았습니다. 예를 들어, Pascal은 제어 데이터 메인 프레임에서 시작하여 문자 당 6 비트 (총 64 개) 만 사용했습니다. 대부분의 이러한 시스템은 대문자 만 포함 된 "CDC Scientific"문자 세트를 사용했습니다. 다른 문자 세트로 전환 할 수 있지만 대부분 대문자 또는 소문자를 사용하지만 둘다는 아니지만 둘 다 동일한 코드를 사용했습니다. 고대의 Baudot 코드도 마찬가지였으며 COBOL, FORTRAN, BASIC 등의 초기 시대에는 표준으로 간주되었습니다. 더 유능한 하드웨어가 널리 보급 될 때까지는 대소 문자를 구분하지 않으므로 완전히 변경할 수 없었습니다. .
시간이 지남에 따라 대소 문자를 구분하지 않는 것이 어려워졌고, 언어 디자이너는 대부분 대 / 소문자를 구분하지 않으려는 경우 보조 도구로 처리하는 것이 더 좋다고 결정했습니다. 언어 자체보다.
적어도 IMO 컴파일러는 제시된대로 정확하게 입력해야합니다. "이 글을 썼지 만 실제로 다른 것을 의미한다고 가정하겠습니다." 번역을 원한다면이를 잘 처리 할 수있는 도구를 사용하여 별도로 번역하는 것이 좋습니다.
왜 아무도 무감각을 원합니까? 어떤 시나리오 VARIABLE
에서 한 곳, Variable
다른 곳 및 variable
세 번째에서 와 같이 단일 변수를 참조하는 것이 유용한 가요? 대소 문자가 구분되지 않습니다. 실수로 입력하면 코드와 같은 대소 문자를 입력 VAriable
하지 않고 컴파일러 오류가 발생 Variable
합니다.
결론적으로, 많은 프로그래밍 언어는 역사적 / 관 성적 이유뿐만 아니라 대 / 소문자 구분도 나쁜 아이디어이기 때문에 대 / 소문자를 구분합니다.
Java의 경우 감도는 코드에서 더 많은 옵션을 제공하는 데 사용되지 않고 매우 명확하고 일관된 의미 의미를 위해 사용됩니다. 클래스보기 좋아요. objectsLookLikeThis와 같습니다. methodsLookLikeThis (). STATIC_VARIABLES_LOOK_LIKE_THIS. 클래스. 내부 클래스보기처럼. 그것은 더 큰 자유를 제공하지는 않습니다 : 그것은 당신이 다른 정보를 지나치게 장황한 언어로 간결하게 포장 할 수있게합니다.
필자는 컴파일러와 IDE가 지원되는 정적으로 정적으로 유형이 지정된 언어에서 대 / 소문자 구분은 정보 (예 : Java)를 전달하는 좋은 방법이라고 생각합니다. 루비와 같은 언어를 사용하면 대소 문자를 구분하지 않는 루비를 사용할 수는 있지만 대소 문자를 구분하지 않으면 예기치 않은 결과가 발생할 수 있습니다.
엄격한 시스템의 대소 문자 구분은 코드를 난독 화하지 않지만 실제로 명확하게 만듭니다. 가능한 Java 코드를 고려하십시오.
joe blah = new hUf();
그것은 분명하지만, 어떻습니까 :
hUf.WTF();
Java 그대로는 이것이 무엇인지 자동으로 알 수 있습니다. 대소 문자를 구분하지 않는 Java의 경우 모호하므로 클래스와 인스턴스를 패키지와 메소드와 구별하기 위해 다른 메커니즘을 사용해야합니다. 그리고 그 메커니즘은 아마도 그것이 얼마나 추악한 지 토할 것입니다 :)
나는 그것이 "허용 된 것"만큼 "구현되었다"고 생각하지 않는다. 대소 문자 구분은 문자열 비교의 기본 상태입니다. 대소 문자를 구분하지 않는 비교를 수행하고 정확한 오류 및 경고보고를 위해 원래 토큰 이름을 보존해야하기 때문에 코드를 추가하여 대소 문자를 구분하지 않도록하려면 컴파일러 엔지니어가 추가 작업을 수행해야합니다.
그것이 거의 확실하게 C로 끝난 이유입니다. 그들은 유용성을 희생하면서 컴파일러를 구현하기 쉬운 간단한 언어를 만들고 싶었습니다. 왜 현대 언어로되어 있습니까? 물론 C로되어 있으므로 올바른 방법 이어야 합니다! </ sarcasm 모드>
다른 것이 없으면 구문 분석을 단순화하고 변수 / 클래스 이름에 대한 더 많은 조합을 허용합니다.
대소 문자를 구분하지 않는 구문 분석을 사용하면 'myClass'와 'MyClass'가 동일하므로 고유 식별자를 사용해야합니다. 또는 컨텍스트에 따라 사용되는 식별자를 확인할 수 있도록 구문 분석기에 복잡한 계층을 추가해야합니다.
다음과 같은 경우를 고려하십시오.
XmlWriter xmlWriter = new XmlWriter();
xmlWriter.Write("blah");
XmlWriter 클래스에도 "쓰기"라는 정적 메서드가 있다고 가정합니다. 여기에 대 / 소문자를 구분하지 않으면 인스턴스 또는 클래스에서 호출합니까?
write
및 Write
두 개의 완전히 다른 방법이었다.
코드를 더 자기 문서화하는 것 외에 다른 이유가 없다면 대소 문자 구분을 좋아합니다.
this is a CONSTANT
this is a ClassName
this is a methodName
this is a local variablename
필자는 일반적으로 Python으로 프로그래밍하지만 C # 시절에는 클래스와 동일한 클래스 인스턴스 이름을 지정하는 것이 매우 편리하지만 다른 사람들이 말한 것처럼 소문자 (또는 낙타)의 경우 이름이 매우 편리하다는 것을 알았습니다.
Thing thing = new Thing();
대소 문자를 구분하지 않는 언어를 사용하려면 이와 같은 다른 규칙이 필요합니다.
Thing oThing = new Thing()
Thing instanceOfThing = new Thing()
어느 것이 "나쁜 것"입니다.
또한 클래스 대 변수 사용에 대한 참조를 찾기 위해 grep (대소 문자 구분)을 사용하는 것이 편리하다는 것을 알았습니다. 대소 문자를 구분하지 않는 언어를 사용하면 쉽지 않습니다. 검색 및 교체와 동일합니다.
마지막으로, 프로그래머로서, 다른 경우를 가진 단어를 볼 때, 그것들이 다른 것이라는 것을 나에게 뛰어 넘습니다 ... 나는 컴파일러가 도움을 줄 동적 스크립트 스크립트 언어에서도 가변 사례가 잘못 된 버그는 거의 없습니다.
사람들은 실제로 읽기 전에 단어의 모양에주의를 기울입니다. 대소 문자 구분은 코드 전체에서 심볼의 모양을 일관되게 유지합니다. 또한 다른 관습은 다른 유형의 기호를 나타냅니다. 대소 문자 구분과 둔감성 모두 악용 될 수 있습니다. 나쁜 프로그래머는 항상 나쁜 코드를 생성 할 것입니다 ... 그들은 길을 찾을 것입니다.
언어를 예로 들어 보자. 왜 우리는 문장으로 시작하고 대문자로 물건을 명명합니까? 그것은 유닉스 때문입니까?
C # 및 Java와 같이 정적으로 유형이 지정된 언어를 생각하면 실제로 값을 추가하지는 않습니다. 대부분의 경우, 어쨌든 자동으로 대소 문자가 일치하지 않는 IDE를 가지고 있기 때문에 실수로 "VAriable"을 입력하면 IDE가 자동으로 " 가변 "입니다. MyClass myClass;
스타일 규칙을 추가하면 대소 문자 구분이 반드시 나쁜 것은 아닙니다.
동적 유형 언어의 경우 IDE가 자동 수정을 추측하기가 더 어렵 기 때문에 더 많은 논증이있을 수 있지만 동적 유형 언어의 경우 이미 걱정해야 할 부분이 많습니다. 일관성있는 케이싱 규칙을 사용한다고해서 더 많은 부담이 발생하지는 않을 것입니다.
따라서 언어가 대소 문자를 구분할 수없는 실제 이유는 없지만, 언어가 대소 문자를 구분 해야하는 실제 이유도 없습니다 .
"SignOn"과 "Signon"에 대한 Scott Hanselman의 기사는 문자열 비교에 관한 것이며 프로그래밍 언어와는 아무런 관련이 없습니다. 사용자가 입력 하는 문자열 은 항상 대소 문자를 구분하지 않아야 하지만 동의 는 프로그래밍 언어의 식별자와 다른 게임이라고 생각합니다.
언어가 대 / 소문자를 구분할 때 수학 및 과학에서 일반적인 사례 사용을 재현하기 위해 사용합니다. 다음은 몇 가지 경우에 대한 규칙 목록입니다 (완전한 것은 아님).
f
일반적으로 확률 밀도 함수 (pdf)를 나타내고 대문자 F
는 해당 누적 분포 함수 (cdf)를 나타냅니다.
X
, 해당하는 소문자 x
는 $ Pr [X = x] \ leq 0.05 $에서와 같이 실현을 나타냅니다 .
방금 유닉스와 C 때문이라고 생각했습니다. 그러나 그것은 일종의 닭고기와 계란 문제로, 간헐천 만 제대로 대답 할 수 있습니다.
나는 "부활절 토끼가 마을에오고있다"의 닭이 계란보다 먼저 왔는지 물었을 때 사용 된 근거를 사용합니다. 노아의 방주에는 닭이 있었기 때문에 닭이 먼저 나왔습니다. 따라서 GCC가 Unix에서 실행되기 때문에 Unix가 먼저 나왔으므로 Unix는 C, 모든 변형 및 하위 항목, 즉 중괄호를 부과하는 모든 항목에 관심이 많기 때문에 대소 문자를 관리합니다.
중괄호와 대 / 소문자 구분도 연결되어있을 수 있습니다.
"대소 문자 구분"은 기술 담당자가 모호성을 줄이기 위해 항상 더 좋습니다. 파일 이름을 예로 들어 보겠습니다. Windows의 파일 이름은 대소 문자를 구분하지 않는 반면 Windows의 파일 이름은 대소 문자를 구분하지 않기 때문에 Windows 파일 이름을 처리하는 것이 Unix 파일 이름보다 문제가 많습니다.
프로그래밍으로 돌아갑니다. 클래스 이름, 메서드 이름, 변수 이름의 경우 대부분의 언어는 명명 스타일 규칙을 적용하지 않습니다. 간혹 단순하게 "반사"를 수행하기 위해 "대소 문자 구분"이름을 사용하여 변환하지 않고 다른 데이터 소스에 바인드하거나 동일한 이름의 문제를 처리하지만 다른 경우에 처리 할 수 있습니다.