나는 nil 과 null 을 모두 사용하는 이유 는 전자가 주로 명사이고 후자가 주로 형용사 이기 때문이라고 생각합니다 ( 웹 과 논문 사전에서 확인 했습니다 : American Heritage 1992).
의미와 역사와 관련하여 NIL 은 "아무것도"를 의미하는 라틴어 "nihil"의 축소입니다.
내가 nil
알기로는 널 포인터 를 나타내는 이름 을 사용하는 것이 프로그래밍 언어 Lisp (1958) 와 함께 소개되었습니다 .
널 포인터는 아무것도 가리하도록되어 포인터 값, 따라서 역 참조 할 수 없습니다. 대부분의 경우 포인터는 단순히 메모리 주소입니다. 이러한 포인터를 포함하는 모든 변수 (즉, 모든 위치)에는 항상 비트의 일부 구성이 포함되며 이러한 구성은 메모리 주소로 읽을 수 있습니다. 따라서 값 nil
이 프로그램에 금지 된 메모리 영역의 주소가 되는 경우가 종종 있으므로 프로그램이 역 참조를 시도 nil
하면 오류가 발생할 수있는 일부 형태의 실패 (중단 가능) 가 발생합니다.
포인터가 명시 적으로 일부 메모리 위치를 가리키는 지 여부를 테스트 할 수 있어야하므로 포인터를 명시 적으로 사용하는 언어에서는이 역할을 수행하기 위해 고유 한 사전 정의 된 표준 값을 갖는 것이 필수적입니다. 일반적으로 Lisp에서 목록은 목록 요소에 대한 "car"포인터와 다음 쌍에 대한 "cdr"포인터를 포함하는 "cons"쌍의 연속으로 작성되었습니다. 목록의 마지막 쌍에서 두 번째 포인터는 nil
입니다.
이것은 빈 목록 또는 목록에 연결된 목록 요소로 목록의 재귀 적 정의에 해당합니다. 따라서 요소가없는 목록은로 표시됩니다 nil
. 이 빈 목록은 목록 monoid의 ID입니다.
목록을 사용하여 집합을 나타낼 수 있으므로이 경우 빈 집합도로 나타낼 수 있습니다 nil
.
따라서 nil
역사적으로 특별한 포인터 값 이었지만 목록이나 세트와 같은 다른 추상 영역에 대한 특수한 ID 값으로 이해되었습니다.
와 같은 포인터 nil
는 널 포인터였으며, 널 (null)은 실질적인 것이 아닌 형용사 (즉, 명사)입니다.
형용사와 명사로서 두 단어를 함께 사용하는 것은 다른 관행과 상당히 일치합니다. 한정자 null 은 종종 monoid : null element 와 같은 대수 구조의 0에 사용됩니다 . 리스트는 monoid를 형성하며 , 여기서 nil 값은 ID입니다. 집합에 대해서도 마찬가지입니다 (많은 속성을 가진 대수를 형성하지만). 마찬가지로 0이되면 정수도 null 이라고합니다.
프로그래밍 언어의 저자와 특유성에 따라이 단어를 다른 단어로 사용하는 데에는 여러 가지가 있습니다.
위에서 설명한 두 가지 주요 의미는입니다 .
이것은 NIL이 " 정답 "에서 Gilles에 의해 수행 된 " 값 없음"을 나타내는 값 이라고 주장하는 것이 정확하지 않음을 보여줍니다 . 언어와 용도에 따라 다릅니다. 프로그래밍 언어 LISP는 아마 오십오년 전 프로그래밍 용어로 NIL 소개했다. LISP 에서 빈 목록이며 빈 목록 의 자연스러운 표현 인 것과 동일하게 주목할 수 있습니다 .NIL
()
값이 없음을 나타내지 않습니다. 결 측값에 대한 자리 표시 자로 사용되는 경우도 있지만 빈 목록이 값이기 때문에 종종 피해야합니다. 프로그래머가 선택한 임의의 객체에서 구조에서 누락 된 값을 의미하며 허용 가능한 값과 혼동 될 수 없습니다.
두 개념은 서로 관련 될 수 있음을 위에서 보여 주었음에도 불구하고 다소 다릅니다. Gilles'answer에서 열거 한 용어 사용에 대한 자세한 분류법을 사용하여 이러한 각 단어의 사용이 하나의 의미 또는 다른 의미로 향하는 지 여부를 확인하는 것이 흥미로울 수 있습니다.
이름은 담론을 정의하는 사람에 의해 주어진 맥락에서 의미가 부여 된 것 이상입니다. 어떤 용도는 더 흔하고 자연 스럽거나 일관성이 있지만, 항상 정의를 확인하고 각 맥락에서 어떤 의미가 의도되었는지 확인해야합니다. 그리고 용어가 취향이나 일관성으로 선택되었다고 항상 기 대해서는 안됩니다.
NULL
(C 호환성을 위해) 및nil
; 호출 메소드nil
는 작동하지 않습니다. JavaScript 에는null
(아무것도 나타내는 값)과undefined
(값이 설정되어 있지 않음)이 있습니다.