모든 프로그래밍 언어에는 이상한 구문, 고유한 기능 또는 비표준 구현 방법과 같은 고유한 "특이점"이 있습니다. 프로그래머에게는 자신만의 습관이 있기 때문에 많은 프로그래머, 심지어 일부 숙련된 개발자라도 새로운 언어를 접하면 미칠 것 같은 기분을 느끼게 됩니다. 이러한 언어의 기능은 프로그래머에게 걸림돌이 되기도 하고, 때로는 프로그래머가 이러한 기능을 천천히 이해하고 점차 적응하고 좋아하게 되는 경우도 있습니다. 모든 언어에는 수많은 기능이 있지만 프로그래머가 항상 논의할 만큼 많은 기능은 없습니다. 이 기사에서는 프로그래머를 가장 미치게 만드는 프로그래밍 언어의 10가지 이상한 기능을 나열했습니다.
1. JavaScript에서 '+'는 연결 연산자입니다.
이상한 기능: JavaScript에서 '+'는 숫자(+) 사이의 더하기 기호인 오버로드된 연산자입니다. 문자열 사이의 연결자이기도 합니다. '+' 연산에서 피연산자 중 하나가 문자열이면 자바스크립트는 다른 피연산자를 문자열로 변환합니다. 이때 '+'는 연결 연산자이므로 '1' + 1의 결과는 '11'입니다. '.
원인 분석: 이 문제의 근본 원인은 JavaScript가 약한 유형의 언어이기 때문입니다. 그러나 Python과 마찬가지로 '+'도 문자열 사이의 연결 연산자이지만 Python은 강력한 형식의 언어입니다. 프로그래머가 문자열과 정수를 함께 추가하려고 하면 프로그램에서 오류를 보고합니다.
2. Perl의 클래스는 TRUE를 반환해야 합니다
이상한 기능: Perl 언어의 클래스는 종종 return 1 문으로 끝납니다. TRUE 값을 반환하지 않으면 오류가 발생합니다.
원인 분석: Perl의 클래스에는 일부 초기화 작업과 서브루틴이 포함될 수 있습니다. 파일이 로드되면 Perl은 TRUE 반환 값을 찾아 프로그램이 성공적으로 실행되었는지 확인하기 시작합니다. 클래스에 초기화 코드 부분이 없더라도 Perl은 클래스가 마지막에 TRUE 값을 반환할 것으로 기대합니다. 그렇지 않으면 예외가 발생합니다.
3. C 및 C++의 트라이그램
이상한 기능: C 및 C++는 9개의 트라이그램을 지원하며, 이후 '??!'와 같은 문자를 처리하기 전에 트라이그램을 단일 트라이그램으로 변환합니다. /로 변환하면 소스코드를 읽기가 더 어려워지고 때로는 예상치 못한 문제가 발생할 수도 있습니다.
원인 분석: 세 문자 그룹은 원래 초기 C 프로그래머가 중괄호와 같이 키보드에서 사용할 수 없는 일부 문자를 입력하는 데 사용되었습니다.
4. PHP의 대소문자 구분 없음
이상한 기능: 많은 프로그래밍 언어의 식별자는 대소문자를 구분하지만 PHP 함수 및 클래스 이름에서는 대소문자를 구분하지 않습니다. 괜찮습니다. 그러나 프로그래머를 가장 혼란스럽게 하는 것은 PHP의 변수 이름, 상수 및 클래스 속성이 대소문자를 구분한다는 것입니다.
원인 분석: 아마도 PHP는 CGI 스크립트에서 점진적으로 발전한 프로그래밍 언어일 것입니다.
Ruby에서 5.0은 TRUE를 나타냅니다.
이상한 특징: Ruby에서는 값 0이 TRUE를 나타냅니다. 이는 C 및 Python과 같은 다른 언어와 완전히 반대입니다. 언어에서 0은 FALSE를 나타내며, 이는 Ruby를 처음 접하는 많은 개발자를 혼란스럽게 합니다.
원인 분석: Ruby에서는 bool 값 FALSE와 nil만 FALSE와 같고, 나머지는 모두 TRUE이며, 0은 다른 숫자와 같습니다.
6. Python에서 "청크"를 구분하려면 공백을 사용하세요.
이상한 기능: 구두점이나 키워드가 사용되지 않습니다. Python은 특정 코드 줄이 속하는 부분을 결정하기 위해 고유한 들여쓰기 수준을 사용합니다. 잘못된 공백 수를 사용하거나 공백과 탭 키를 혼합하면 오류가 발생할 수 있습니다.
원인 분석: 이는 더 읽기 쉬운 코드를 생성하고 입력을 줄이려는 Python의 노력과 관련이 있을 수 있으며 현재 많은 코드 편집기가 자동 들여쓰기를 지원합니다.
7. C 언어의 배열 첨자는 포인터 산술을 하는 것과 같습니다.
이상한 기능: C 언어의 포인터는 i를 배열 a의 첨자로 처리하는 것 외에, [i], C에서는 동일한 요소를 i[a]로 표현할 수도 있습니다.
원인 분석: C 언어에서 배열은 메모리의 포인터와 같으므로 a[i] = *(a+i) = *(i+a) = i[a].
8. Perl의 미리 정의된 변수
이상한 기능: Perl에는 특수 변수의 긴 목록이 있으며 모두 혼란스러운 이름을 가지고 있습니다. Perl 전문가가 아닌 사람들은 이러한 코드의 의미를 이해하기 위해 Perl 문서를 참조해야 하는 경우가 많습니다.
원인 분석: 이러한 변수는 일반적으로 프로세스 ID($$), 오류 메시지($@), 정규식 일치($^R) 등 프로그램 실행에 대한 일부 정보를 제공합니다.
9. 자바스크립트는 자동으로 세미콜론을 삽입합니다
이상한 기능: 자바스크립트는 세미콜론을 문장 끝에 자동으로 삽입하기 때문에 옵션으로만 처리합니다. 개행 문자. 그러나 일반적으로 예외가 발생하지 않으면 오류가 발생합니다.
이유 분석: 편의상 세미콜론을 삽입한 이유는 프로그래머, 특히 초보 프로그래머가 JavaScript 구문을 매우 쉽게 찾을 수 있기 때문입니다.
10. Java에서 Integer를 포함하는 유형 변환
이상한 기능: Java는 자동으로 int 유형을 Integer 객체로 변환하는 등 원래 유형을 객체로 변환합니다. 정수 객체 값은 -128부터 127까지입니다. 이는 동일한 값을 가진 두 정수를 비교하기 위해 '=='를 사용할 때 문제를 일으킬 수 있습니다(-128-127인 경우에만 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다).
원인 분석: 이 변환은 프로그래머의 코드 양을 줄이고 성능을 향상시킵니다.