이런 식으로 작성할 수 있습니까? 아니면 Kotlin에서 수동 null 검사로 되돌려 야합니까?Kotlin에서 패턴 일치 옵션을 사용하는 방법은 무엇입니까?
val meaningOfLife : String? = null
when meaningOfLife {
exists -> println(meaningOfLife)
else -> println("There's no meaning")
}
이런 식으로 작성할 수 있습니까? 아니면 Kotlin에서 수동 null 검사로 되돌려 야합니까?Kotlin에서 패턴 일치 옵션을 사용하는 방법은 무엇입니까?
val meaningOfLife : String? = null
when meaningOfLife {
exists -> println(meaningOfLife)
else -> println("There's no meaning")
}
하나는 첫번째 null
과 일치하는 것입니다 그래서 else
분기 String?
은 암시 적으로 변환됩니다. String
에 :
val meaningOfLife: String? = null
when (meaningOfLife) {
null -> println("There's no meaning")
else -> println(meaningOfLife.toUpperCase()) //non-nullable here
}
이 컴파일러에 의해 수행 smart cast의 특별한 경우이다.
is String
및 else
가지 - is String
-check 값이 null이 아닌 경우에도 마찬가지 효과를 얻을 수 있습니다.
null-safety에 관한 자세한 내용은 this answer을 참조하십시오.
println(meaningOfLife ?: "There's no meaning")
질문의 예는 아마도 단순화 실제 상황, 그래서 널 체크하는 방법입니다
당신은 다음과 같은 것을 수행 할 수 있습니다
val meaningOfLife: String? = null
when (meaningOfLife) {
is String -> println(meaningOfLife)
else -> println("There's no meaning")
}
이 시도 : 가능한 방법의
val meaningOfLife : String? = null
meaningOfLife?.let { println(it) } ?: println("There's no meaning")
참고로, 문제의 특정 상황은 디폴트 값의 ?:
연산자 간단한 솔루션을하는 방법이있다 나는 그것을 할 것이다.
if(meaningOfLife != null)
println(meaningOfLife)
else
println("There's no meaning")
이 BTW, 정확히 줄의 같은 번호를 사용합니다 : 이럴
if
당신은 바이너리 제어 흐름의 선택이있을 때 갈 수있는 더 좋은 방법입니다.
나는 그 문제가 아마 그것에 관한 것이 아니라는 것을 이해한다. 그러나 나는 또한이 옵션이 언급되어야한다고 생각한다. – voddan
'if' 구조는 이처럼 2 진 상황에 더 바람직합니다. 'when'와 정확히 같은 효과가 있습니다. – voddan
효과가 동일하면 왜 더 선호할까요? '언제'의 장점은 성장할 여지가 있다는 것입니다. – TomTom
null 가능성이있는 경우'when'는 성장하지 않습니다. 영광스러운'if'로'when'을 사용하는 것은 꽤 낭비입니다. IMO – voddan