2017-12-31 21 views
-2

는 사람이 가장 좋습니다 샘플코 틀린은 (바 == NULL) 대 줄 경우 : 여기에 실행

if (bar == null) { 
    // do something 
} 

bar ?: run { 
    // do something. 
} 
  1. 입니까?
  2. 무엇이 돌연변이 속성입니까?
  3. 처음으로 돌연변이 속성이 작동하지 않습니까?
+1

IMO 두 번째 버전은 그 의도가 명확하지 않습니다. 그것은 뻔뻔스런 '조건 (cond)'과 대체로 동일하다. whatever : methodWithSideEffects();'Java 패턴. –

+1

'bar? : {{}'bar를 사용 하시겠습니까? – hudsonb

+0

두 번째 방법은 코드에 멋진 카우보이 스타일을 추가하는 것 외에는 장점이 있습니까? – kocka

답변

0

어느 것이 가장 좋습니다.

올리버 (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)을 확인했다면 언급하신 내용과 관련이 있습니다. 이 경우 barvar 인 경우 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) 
}