각 언어에는 이상한 구문, 특이한 기능, 비표준 실행 방법 등 고유한 기능이 있습니다. 따라서 초보자이건 숙련된 플레이어이건 간에 특정 기능을 보면 갑자기 술에 취하게 됩니다. 이 기사에는 자주 언급되는 10가지 "이상한" 기능이 요약되어 있습니다.
1. Javascript: +는 연결자입니다
문제 설명: JS에서 + 기호는 숫자 사이에 사용되며 일반 추가에 사용할 수 있지만 문자가 나타나면 사용할 수도 있습니다. 문자 커넥터로 사용됩니다. 예를 들어 '1' + 1의 결과는 11입니다.
원인 분석 :
근본적인 이유는 JS가 약한 유형의 언어이기 때문입니다. 예를 들어, Python은 + 기호를 문자 연결자로 사용하지만 강력한 형식의 언어이기 때문에 문자가 정수에 추가된 것을 발견하면 이것이 오류 작업이라는 메시지가 표시됩니다.
네티즌들의 의견:
“문제는 예측할 수 없는 강제 무음 전환이고, 익명으로 무시하기 쉽다는 점이다.”
“JS가 이 상황을 처리해야 한다.” 예외.” crgwbr
“문자 연결에 +를 사용하는 것은 악몽입니다” Matteo Riva
2. Perl: 모듈은 TRUE 값을 반환해야 합니다
문제 설명: 대부분의 경우. , Perl 모듈은 1; 문으로 끝나야 합니다. 그렇지 않으면 마지막 문의 반환 값이 TRUE가 아닌 경우 시스템이 오류를 보고합니다.
원인 분석:
Perl 모듈에는 초기 코드와 서브루틴이 포함되어 있습니다. 모듈 파일이 로드되면 Perl은 TRUE가 반환되는지 여부에 따라 코드가 성공적으로 실행되었는지 여부를 결정합니다. 초기 코드가 없더라도 Perl은 마지막 명령문이 TRUE를 반환할 것으로 예상합니다. 그렇지 않으면 오류가 보고됩니다.
네티즌들의 의견:
“이건 보통 불안해요.” 드류 홀
“이건 실용성이 가장 낮습니다.” 슈베른
3 . C/C++: 세 글자 단어 사용법
문제 설명:
예를 들어 시스템이 ??!를 보면 자동으로 |로 변환합니다. [. 로 변환하면 예상치 못한 결과가 발생할 가능성이 높으며 코드의 가독성이 크게 저하됩니다.
원인 분석:
초기 프로그래밍에서는 키보드와 같은 일부 특수 문자가 나타납니다. 중괄호로 직접 입력할 수 없어 이런 간접적인 방법을 사용한다
네티즌들의 의견:
“구글만큼 지식이 있어도 이해하지 못할 것이다. .??!??!” 아이작
“1977년 세 글자 단어가 도입된 이후로 C는 모호해졌습니다.” 마틴 베켓
4. PHP: 대문자와 소문자. 민감한 처리
문제 설명:
PHP는 대소문자 처리에 대해 상당히 혼란스럽습니다. 예를 들어 변수 이름, 상수 이름, 클래스 등이 있습니다. .
원인 분석:
아마도 CGI 스크립트를 성숙한 프로그래밍 언어로 설정하여 PHP를 개발하면서 등장한 인공 제품일 것입니다.
네티즌의 의견:
"이것이 PHP 프로그래머들이 카멜 케이스 이름 대신 밑줄을 사용하는 데 익숙한 이유입니다." paperstreet7
"PHP에서는 모든 것이 가능합니다!" . Ruby: 실제 값인 0
문제 설명:
Ruby에서 0 값은 C 및 Python 배경을 가진 프로그래머에게 유용합니다.
원인 분석:
불리언 값인 FALSE와 nil만 FALSE와 동일하며 나머지는 모두 동일하게 취급됩니다. >
네티즌들의 의견: “의도는 좋은데 이건 정말 미친짓이다.” 크리스 루츠 “0== 내 C 언어 두뇌는 곧 맞다! Collapse! "Kenny 6. Python: 공백 수로 수준 나누기 문제 설명: 키워드를 사용하는 것과 다릅니다. 또는 구두점을 사용하여 PY는 들여쓰기 수준을 사용하여 명확하게 합니다. 각 코드 줄의 위치가 잘못되면(또는 공백 및 전치 문자 수가 일치하지 않음) 프로그램에서 오류가 보고될 수 있습니다. PY 작성자의 의도는 다음과 같습니다. 코드의 가독성을 높이고, 불필요한 입력을 줄이고, 프로그래머 자신이 코드 명확성을 유지하는 데 책임을 지기를 바랍니다. 네티즌들의 의견: “솔직히 말해서 이것이 제가 PY를 멀리하는 근본적인 이유입니다.” wazoox “우리에게 꼭 비슷한 강제 메커니즘이 필요하다면, 우리는 정말 게으르다!"Joris Meys 7. C: 배열 인덱스 작업 모드는 포인터와 동일합니다문제 설명:C에서는 a[i] 및 i[a]는 서로 바꿔 사용할 수 있으며 두 가지 작성 방법 모두 동일한 결과를 생성합니다. 원인 분석: C에서 메모리 블록의 경우 배열과 포인터 사이에 차이가 없습니다. 즉, a[i] = *(a + i) = *(i + a) = i[a]. 네티즌들의 의견: “C 언어 혼동 코드 경쟁에서 이건 무용지물이다.” 혼란 “이건 C 언어의 핵심을 노출시키는 것 뿐이라고 생각한다. 포인터와 메모리를 더 직접적으로 다루는 "Michael Neale 8. Perl의: 사전 정의된 변수 문제 설명:Perl에는 매우 긴 특수 변수 목록이 있으며 그 안에 있는 이름은 매우 복잡합니다(해당되는 긴 영어 단어가 있음에도 불구하고). 그러므로 당신이 수석 Perl 개발자가 아닌 이상 Perl 문서를 반복해서 읽는 것이 일반적입니다.
원인 분석:
이러한 변수는 프로세스 ID($$), 오류 메시지($@), 정규식 일치($^R) 등 다양한 의미를 갖습니다.
네티즌들의 의견:
“매우 짜증나네요!” MatrixFrog
“간단한 개발자들에게는 희소식일지도 모릅니다.” niXar
“ 이 변수는 Google을 통해 찾을 수 없습니다!” Malvim
9. JavaScript: 자동 세미콜론 삽입
문제 설명:
JS는 세미콜론을 명령문 종료 플래그로 사용하며 코드가 깨져도 자동으로 삽입됩니다. 이로 인해 종종 오류가 발생합니다.
원인 분석:
자동화의 원래 의도는 특히 초보자에게 편의성을 제공하는 것입니다.
네티즌들의 의견:
“언어 기능을 디자인할 때 항상 사용자를 바보 취급한다면 문제가 생길 것입니다.” Rob Van Dam
"자동 세미콜론 삽입은 하나입니다. JS의 가장 골치 아픈 측면 중 하나입니다." fennec
10. Java: 오토박싱 및 정수 캐싱
문제 설명:
Java는 자동으로 기본 유형 데이터를 객체로 변환합니다(자동 int를 Integer 객체로 변환하는 것과 같은 것입니다. 동시에 기본적으로 캐시된 Integer 객체의 값은 -128 ~ 127입니다. 이 경우 ==를 사용하여 동일한 값을 가진 두 Integer 객체를 비교할 때 문제가 발생합니다(-128과 127 내에서는 TRUE, 나머지는 FALSE)
원인 분석:
자동 박싱 메커니즘은 코드 입력량을 줄이고 정수 캐시는 처리 속도를 향상시킵니다.
네티즌들의 의견:
“다행히 저는 C# 프로그래머일 뿐입니다.” Will
“이것은 실수가 아니지만 우리에게 사용할 수 있는 방법을 제공합니다. 유형의 수치 처리에 대한 원래 이유(예: 부울) ”RaviWallau