는 사람이 가장 좋습니다 샘플코 틀린은 (바 == NULL) 대 줄 경우 : 여기에 실행
if (bar == null) {
// do something
}
대
bar ?: run {
// do something.
}
- 입니까?
- 무엇이 돌연변이 속성입니까?
- 처음으로 돌연변이 속성이 작동하지 않습니까?
는 사람이 가장 좋습니다 샘플코 틀린은 (바 == NULL) 대 줄 경우 : 여기에 실행
if (bar == null) {
// do something
}
대
bar ?: run {
// do something.
}
어느 것이 가장 좋습니다.
올리버 (Oliver)가 지적한 바와 같이 if(bar == null)
을 사용할 때 의도가 가장 명확합니다. 이는 또한 공식 Kotlin 문서 Checking for null conditions에 사용 된 접근 방법입니다. 나는이 경우에는 그것을하지 않는 것이 좋습니다 있지만
, 코 틀린는이 같은 깔끔한 일을 수행 할 수 있습니다
whenNull(bar) {
// Do something
}
: 당신이로
if(bar == null)
을 다시 할 수 있도록 할inline fun whenNull(input: Any?, block:() -> Unit) { if(input == null) block() }
돌연변이 속성은 무엇입니까?
값을 변경할 수있는 변수입니다. 기본적으로 변수는 val
이 아니라 var
을 사용하여 선언됩니다.
첫 번째 돌연변이 속성이 작동하지 않습니까?
if(bar == null)
을 확인했기 때문에 이것은 실제로 귀하의 예와 관련이 없습니다.
if(bar != null)
을 확인했다면 언급하신 내용과 관련이 있습니다. 이 경우 bar
이 var
인 경우 Kotlin은 if
의 본문에 언제든지 변경 될 수있는 bar
의 본문 내에서 null이 아닌 유형을 똑똑하게 처리 할 수 없습니다. 즉, if
본문 내에서 bar
(?.
)으로 전화를 걸거나 !!
을 사용해야합니다.
다음을 수행하여이 문제를 해결할 수 있습니다 : 그것은 (val
) 비 변경할 수 있기 때문에
val b = bar
if(b != null)
{
// b has been smart cast to a non-null type
}
코 틀린는 if
의 신체 내에서 null 이외의 유형에 b
캐스트 스마트 할 수 있습니다.
또는 안전 호출과 this
값을 지닌 지정된 함수/블록을 호출하여 그 결과를 반환하는 을 사용할 수 있습니다. 안전한 호출이 주어지면 this
은 물론 null이 아닙니다.
bar?.let {
// this is bar (non-null)
}
IMO 두 번째 버전은 그 의도가 명확하지 않습니다. 그것은 뻔뻔스런 '조건 (cond)'과 대체로 동일하다. whatever : methodWithSideEffects();'Java 패턴. –
'bar? : {{}'bar를 사용 하시겠습니까? – hudsonb
두 번째 방법은 코드에 멋진 카우보이 스타일을 추가하는 것 외에는 장점이 있습니까? – kocka