nullable이 아닌 참조 타입이 많은 버그를 해결하고 프로그래밍을 훨씬 쉽게하는 방법에 대해 사람들이 계속 이야기하는 것을 계속 들었습니다. null의 작성자조차도 billion dollar mistake이라고하고 Spec#은이 문제를 해결할 수있는 nullable이 아닌 유형을 도입했습니다.nullable이 아닌 타입 논쟁에 관해서
편집 : 사양 #에 대한 내 의견을 무시하십시오. 나는 그것이 어떻게 작동하는지 오해했다.
편집 2 : 누군가가 그래서 생각 것 :-)
과 논쟁하는 내가 잘못된 사람들에게 얘기해야한다, 나는 정말 소수에있는, 기대했다 나는 틀렸다고 생각하지만, 왜이 논쟁에는 장점이 있는지 이해할 수 없습니다. 버그 찾기 도구로 null이 표시됩니다. 다음을 고려하십시오.
class Class { ... }
void main() {
Class c = nullptr;
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
BAM! 액세스 위반. 누군가 c
을 초기화하는 것을 잊었습니다.
지금이 고려 :
class Class { ... }
void main() {
Class c = new Class(); // set to new Class() by default
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
으악합니다. 루프는 자동으로 건너 뜁니다. 문제를 추적하는 데 시간이 걸릴 수 있습니다.
클래스가 비어 있으면 코드가 실패합니다. 시스템이 자신을 알아내는 대신에 (다소 우스꽝 스럽지만) 당신에게 알려주지 않겠습니까?
다른 사람들이 널 보게되어 반가워요, 나는 아직 학교에있어 그래서 내가 놓친 것이 있다고 가정합니다. –
"가치 없음"을 다루는보다 원칙적인 방법이 있습니다. NULL는 int와 같은 기본 유형을 제외합니다. 형식 시스템이 참조에 대해 암시 적으로 만 사용하는 대신 모든 유형에서 일관되게 가치 부족을 나타내는 것이 더 좋습니다. Haskell의 "Maybe"및 ML/OCaml/F #의 "option"유형을 참조하여 수행 방법을 확인하십시오. – MichaelGG
[null이없는 언어에 대한 최선의 설명] 가능한 복제본 (http://stackoverflow.com/questions/3989264/best-explanation-for-languages-without-null) – nawfal