Kotlin: 'null'은 'true'와 같지 않지만 'false'도 아닙니다.
4757 단어 nullabilitykotlin
TL;DR Kotlin has the
===
operator for referential integrity and none oftrue
,false
ornull
references the same thing. Don't forget that, when comparing nullable booleans.
오늘 나는 IntelliJ의 힌트를 우연히 발견했습니다. 나는 다음과 같은 것을 쓰고 싶었다.
val potentiallyNull: Any? = null // in real world, we wouldn't know whether it's null or not
if (potentiallyNull?.equals("foo") ?: false) {
println("not printed when null")
}
즉,
potentiallyNull
가 null이 아니면 "foo"
와 같은지 확인하십시오. 그렇지 않으면 false
를 반환합니다.그래서 IntelliJ는 친절하게 다음과 같이 말했습니다.
Equality check should be used instead of elvis for nullable boolean check
나는 속으로 생각했다. 알았어, 그럼 좋은 힌트를 적용해보자.
내가 얻은 것은 다음과 같습니다.
if (potentiallyNull?.equals("foo") == true) {
println("not printed when null")
}
그러나 나중에 조건을 반전시키고 싶었습니다. 그래서 순진하게
true
를 false
로 대체했습니다.if (potentiallyNull?.equals("foo") == false) {
println("print also when null")
}
불행히도 결과는 예상과 달랐습니다. 콘솔에 단일 문자가 인쇄되지 않았습니다. 무엇이 잘못되었나요?
사실, 그것은 매우 분명하지만 깨닫는 데 잠시 시간이 걸렸습니다. 물론
null
는 true
와 같지 않고 false
와 같지도 않습니다.그래서 저는 한 발 물러서서 원래의 상태를 다시 썼습니다.
if (potentiallyNull?.equals("foo") ?: true) {
println("print also when null")
}
IntelliJ는 다시 그것을 변경하고 평등 검사를 사용하라고 말했기 때문에 지금 얻은 것은 다음과 같습니다.
if (potentiallyNull?.equals("foo") != false) {
println("print also when null")
}
내가 생각한 첫 번째 생각은 :
... != false
는 ... == true
와 어떻게 다른가요?그러나 다시
null
는 true
또는 false
와 같지 않습니다. 따라서 비교에는 실제로 true
, false
또는 none of them
의 세 가지 가능한 결과가 있습니다.이 경우
... != false
는 true
또는 none of them
를 의미하지만 ... != true
는 true
만을 의미합니다.Kotlin의 평등에 대한 자세한 내용은 equality에서 공식 문서를 읽는 것이 좋습니다.
대체로 그때가 가장 빛나는 순간은 아니었지만 다른 사람들도 그 순간을 우연히 발견할 수 있다고 생각했습니다. 당신이 그것을 좋아 바랍니다.
Reference
이 문제에 관하여(Kotlin: 'null'은 'true'와 같지 않지만 'false'도 아닙니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alxgrk/kotlin-null-does-not-equal-true-but-also-not-false-3paa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)