나는 null
(예를 들어) 대신에 ( 비) 편의에 대해 읽었습니다 Maybe
. 읽은 후 이 글을 , 나는 그것을 사용하는 것이 훨씬 더 좋을 것이라고 확신하고있다Maybe
(또는 무언가 유사). 그러나 모든 "잘 알려진"명령형 또는 객체 지향 프로그래밍 언어가 여전히 사용하고 있으며 null
( '아무것도없는'값을 나타낼 수있는 유형에 대한 확인되지 않은 액세스를 허용 함 Maybe
) 주로 기능적 프로그래밍 언어에서 사용됩니다.
예를 들어 다음 C # 코드를보십시오.
void doSomething(string username)
{
// Check that username is not null
// Do something
}
뭔가 나쁜 냄새가 난다 ... 왜 인수가 널인지 점검해야 하는가? 모든 변수에 객체에 대한 참조가 포함되어 있다고 가정해서는 안됩니까? 보시다시피, 문제는 정의에 의해 거의 모든 변수에 null 참조가 포함될 수 있다는 것입니다. 어떤 변수가 "널링 가능" 인지 아닌지 결정할 수 있다면 어떨까요? "NullReferenceException"을 디버깅하고 찾는 동안 많은 노력을 절약 할 수 있습니다. 기본적으로 어떤 유형도 null 참조를 포함 할 수 없다고 상상해보십시오 . 그 대신 변수가 실제로 필요한 경우에만 변수에 null 참조가 포함될 수 있다고 명시 적으로 언급 합니다. 그것이 아마도이면의 아이디어입니다. 경우에 따라 실패하는 함수가있는 경우 (예 : 0으로 나누기)Maybe<int>
, 결과가 int 일 수도 있지만 아무것도 아니라고 명시 적으로 명시합니다! 이것이 null 대신 Maybe를 선호하는 이유 중 하나 입니다. 더 많은 예제에 관심이 있다면 이 기사 를 읽으십시오 .
사실 대부분의 유형을 기본적으로 널 입력 가능하게 만드는 단점에도 불구하고 대부분의 OO 프로그래밍 언어는 실제로이를 수행합니다. 그래서 내가 궁금해하는 이유는 다음과 같습니다.
null
프로그래밍 언어 대신 어떤 종류의 인수 를 구현 해야Maybe
합니까? 전혀 이유 가 있습니까? 아니면 단지 "역사적인 수하물"입니까?
이 질문에 대답하기 전에 null과 Maybe의 차이점을 이해해야합니다.
null
의 개념이 존재하지 않는 또는 (IIRC 하스켈이 하나의 예이다).
null
는 오랫동안 언어로 작성된 OS라는 것을 기억하십시오 . 그냥 떨어 뜨리기가 쉽지 않습니다.