[vb.net] VB는 정말 대소 문자를 구분하지 않습니까?

여기에서 인수를 시작하려고하는 것은 아니지만 어떤 이유로 든 일반적으로 Visual Basic은 대소 문자를 구분하지 않고 C 언어는 그렇지 않다고 말하고 있습니다.

그러나 여기에 내 질문이 있습니다. Visual Basic의 대소 문자를 정확히 구분하지 않는 곳은 어디입니까? 입력 할 때 …

Dim ss As String
Dim SS As String

Visual Studio 2008 또는 Visual Studio 2010 IDE의 두 번째 IDE에는 ” 로컬 변수 SS가 현재 블록에서 이미 선언되었습니다 “라는 경고가 표시 됩니다. VBA VBE에서는 즉시 오류가 발생하지 않고 사례를 자동 수정합니다.

Visual Basic이 대소 문자를 구분하지 않는다는이 주장이 누락 되었습니까? (또한 당신이 알고 있거나 대답하고자한다면, 그게 왜 나쁜 것일까 요?)

왜 내가이 질문을하는 거죠?

나는 수년 동안 많은 방언으로 Visual Basic을 사용해 왔으며, 때로는 취미로 활동하고 때로는 작업 그룹의 소규모 비즈니스 관련 프로그램에 사용했습니다. 지난 6 개월 동안 저는 제가 예상했던 것보다 훨씬 큰 큰 프로젝트를 진행하고 있습니다. 대부분의 샘플 소스 코드는 C #에 있습니다. 나는 C #을 배우고 싶은 열망이 없지만 Visual Basic이 제공하지 않는 C # 제공에서 빠진 부분이 있다면 (반대는 VB.NET에서 XML 리터럴을 제공함 ), 나는 원한다. 해당 기능에 대해 자세히 알아보십시오. 따라서이 경우 C 언어는 대소 문자를 구분하고 그것은 좋고 Visual Basic은 대소 문자를 구분하지 않으며 그것은 나쁘다고 종종 주장됩니다. 알고 싶습니다 …

  1. 코드 편집기의 모든 예제가 내가 원하든 원하지 않든 대소 문자를 구분하므로 (대소 문자가 수정 됨) Visual Basic의 대소 문자를 정확히 구분하지 않습니다.
  2. VB.NET 사례가 코드로 수행 할 수있는 작업을 제한하는 경우 C #으로 이동하는 것을 고려하기에 충분히 설득력이 있습니까?


답변

VBA와 VB.NET 의 차이점은 VB.NET 이 백그라운드에서 지속적으로 컴파일되기 때문입니다. VBA를 컴파일 할 때 오류가 발생합니다.

마찬가지로 조나단 말한다 프로그래밍 할 때, 당신은 대소 문자를 구분 문자열 비교, XML, 그리고 몇 가지 다른 상황에서 떨어져로 VB.NET 생각할 수 …

나는 당신이 내부에있는 것에 관심이 있다고 생각합니다. .NET 공용 언어 런타임은 대소 문자를 구분 하고 VB.NET 코드는 런타임에 의존하므로 런타임시, 예를 들어 변수와 메서드를 찾을 때 대소 문자를 구분해야 함을 알 수 있습니다.

VB.NET 컴파일러 및 편집기를 사용하면 코드 에서 대소 문자수정 하므로이를 무시할 수 있습니다.

동적 기능 또는 지연 바인딩 (옵션 Strict Off)을 사용하는 경우 기본 런타임이 대소 문자를 구분한다는 것을 증명할 수 있습니다. 이를 확인하는 또 다른 방법은 C #과 같은 대소 문자를 구분하는 언어가 동일한 런타임을 사용하므로 런타임이 분명히 대소 문자 구분을 지원한다는 사실을 깨닫는 것입니다.

편집 IDE를 방정식에서 제외하려면 항상 명령 줄에서 컴파일 할 수 있습니다 . 당신의 코드를 수정 메모장 이 가지고 있도록 ss하고 SS컴파일러가 무엇을 참조하십시오.

편집 에서 견적 제프리 리히터 에서 .NET 프레임 워크 디자인 지침 45 페이지.

명확하게 말하면 CLR은 실제로 대소 문자를 구분합니다. Visual Basic과 같은 일부 프로그래밍 언어는 대소 문자를 구분하지 않습니다. Visual Basic 컴파일러가 C #과 같은 대 / 소문자 구분 언어로 정의 된 형식에 대한 메서드 호출을 확인하려고 할 때 컴파일러 (CLR 아님)는 메서드 이름의 실제 대소 문자를 파악하여 메타 데이터에 포함합니다. CLR은 이것에 대해 아무것도 모릅니다. 이제 리플렉션을 사용하여 메서드에 바인딩하는 경우 리플렉션 API는 대소 문자를 구분하지 않는 조회를 수행하는 기능을 제공합니다. 이것은 CLR이 대소 문자를 구분하지 않는 범위입니다.


답변

여기서 문제의 일부는 IDE 환경에서 언어를 분리해야한다는 것입니다.

언어로서 VB.NET 은 확실히 식별자와 관련하여 대소 문자를 구분하지 않습니다. 호출 DateTime.Parsedatetime.parse똑같은 코드에 바인딩됩니다. 그리고 C #과 같은 언어와 달리 대소 문자 만 다른 메서드 나 유형을 정의하는 것은 불가능합니다.

IDE로서 VB.NET은 코드 블록을 예쁘게 나열 할 때 기존 식별자의 대소 문자를 유지하려고합니다. 예쁜 목록은 현재 논리적 코드 줄에서 벗어날 때마다 발생합니다. 이 경우 두 번째 선언에서 벗어나 SS예쁜 리스터는 해당 이름을 가진 기존 식별자가 있음을 확인하고 대소 문자가 일치하도록 수정합니다.

그러나이 동작은 순전히 사용자 가치 추가로 수행됩니다. 핵심 언어의 일부가 아닙니다.


답변

VB는 대부분 대소 문자를 구분하지 않지만 예외가 있습니다. 예를 들어 XML 리터럴 및 이해는 대소 문자를 구분합니다. 문자열 비교는 일반적으로 T-SQL과 달리 대소 문자를 구분하지만 문자열 비교를 대소 문자를 구분하지 않는 컴파일러 스위치가 있습니다. 물론 상속, COM 및 동적 언어 런타임을 다룰 때 가장 중요한 경우가 있습니다.


답변

예, VB.NET 컴파일러는 대소 문자를 구분하지 않는 방식으로 식별자를 처리합니다. 예, 다른 언어로 작성되었거나 COM 구성 요소를 사용하는 어셈블리를 사용할 때 문제가 발생할 수 있습니다. 전자의 경우 공용 언어 사양 이 적용됩니다 . 관련 규칙은 다음과 같습니다.

두 식별자가 구별되는 것으로 간주 되려면 대 / 소문자 이상으로 달라야합니다.

COM 대소 문자는 형식 라이브러리 작성기에 의해 다소 조잡하게 처리되며 동일한 이름을 가진 식별자의 대 / 소문자를 동일하게 만듭니다. 이러한 식별자의 역할이 다른 경우에도 마찬가지입니다. 즉, 이름이 “index”인 메서드 매개 변수는 메서드 이름 “Index”가 “index”로 변경되도록 강제합니다. 그것은 당신이 상상할 수 있듯이 오히려 많은 머리 긁힘을 일으켰습니다. 🙂


답변

VB는 대소 문자를 유지 하지만 (IDE에서) 대소 문자를 구분하지 않습니다. . 어떤면에서는 Windows 파일 시스템과 같습니다. Hello.txt와 hello.txt는 동일한 파일 이름으로 간주됩니다.

IDE는 변수 선언이 해당 변수에 대해 “올바른”경우라고 가정하고 해당 변수의 모든 인스턴스가 선언과 일치하도록 조정합니다. 눈에 띄고 일관성을 유지하기 위해이 작업을 수행하지만 기능은 아닙니다.

케이스가 선언과 일치하도록 자동으로 변경되지 않은 몇 가지 경우를 보았습니다. 그리고 명령문은 똑같이 작동합니다. 텍스트 편집기를 사용하여 다양한 경우에 잘 컴파일되는 코드를 작성할 수도 있습니다.

참고 :

대부분의 사람들 은 대소 문자를 구분하지 않습니다. 우리가 “개”라는 단어를 볼 때 그 단어는 우리 마음 속의 의미로 번역됩니다. 단어의 의미는 대소 문자를 기반으로하지 않습니다 (즉, 철자가 “DOG”, “DoG”또는 “dOG”인지에 관계없이 여전히 짖습니다.) 컴퓨터 는 단어를 개별 비트 모음 으로 간주합니다. 대문자와 소문자는 서로 다른 비트 패턴이므로 서로 다릅니다.

대부분의 프로그래머는 인간이기 때문에 대소 문자 무감각은 사람들이 생각하는 방식에 더 잘 적응하는 것 같고 대소 문자 구분은 인간이 기계의 제약에 어떻게 생각하는지 적응하는 것에 더 가깝습니다.


답변

이것은 사용중인 편집기의 일부이며 다르게 동작 할 수 있지만 실제로 Visual Basic 대소 문자를 구분하지 않는 언어입니다. 그래서 ssSS동일합니다.

자세한 내용은 VB.NET 기본 자습서를 참조하십시오. 🙂


답변

내가 당신을 이해하는지 잘 모르겠어요? VB는 대소 문자를 구분하지 않으므로 ss와 SS는 동일한 변수이므로 컴파일러는 변수를 다시 선언했다고 올바르게 불평합니다.

나는 변수가 대소 문자를 구분하지 않는다고 생각하지만 함수 이름은 있습니다.