부울 사용? if 표현식에서 Do something

nullable이 있으면 Boolean bJava에서 다음 비교를 수행 할 수 있습니다.

Boolean b = ...;
if (b != null && b) {
   /* Do something */
} else {
   /* Do something else */
}

Kotlin에서는 !!연산자 를 사용하여 동일한 결과를 얻을 수 있습니다 .

val b: Boolean? = ...
if (b != null && b!!) {
   /* Do something */
} else {
   /* Do something else */
}

그러나 사용은 !!널 안전 시스템을 우회하여 나에게 약간 스케치 느낌이 듭니다.

이에 대한 더 우아한 접근 방식이 있습니까?


편집 조금 과장된 것 같습니다. 지역 변수의 경우 Banthar가 보여 주듯이 작동합니다. 그러나 내 부울 b은 실제로 “백킹 필드가있는 속성”입니다 (나는 아직 속도에 익숙하지 않습니다). 결과는 다음과 같습니다.

여기에 이미지 설명 입력



답변

당신은 널 (NULL)와 부울 비교할 수 있습니다 true, false또는 null평등 연산자를 사용하여 :

var b: Boolean? = null
if (b == true) {
    // b was not null and equal true
}
if (b == false) {
   // b is false 
}
if (b != true) {
   // b is null or false 
}


답변

당신이 명확하게 확인하려는 경우가 있는지 여부 Boolean?입니다 true또는false 당신은 할 수 있습니다 :

when(b) {
    true -> {}
    false -> {}
}

그것이 맞는지 확인하고 싶다면 null그 (또는 else)를 다음 값으로 추가 할 수 있습니다 when.

when(b) {
    true -> {}
    false -> {}
    null -> {}
}

when(b) {
    true -> {}
    false -> {}
    else-> {}
}


답변

Kotlin은 null 검사를 정적으로 분석합니다. 이건 괜찮아:

val b: Boolean? = null
if (b != null && b) {
    println(b)
}

이것이 유형 오류로 실패하더라도 :

val b: Boolean? = null
if (b == null && b) {
    println(b)
}

자세한 내용은 http://kotlinlang.org/docs/reference/null-safety.html을 참조하십시오.

“null 통합 연산자”(변경 가능한 변수에 대해 작동 함)를 사용할 수도 있습니다.

val b: Boolean? = null
if (b ?: false) {
    println(b)
}


답변

내가 본 부울에서? nullable 개체에 대해 Boolean을 반환하는 메서드의 결과입니다.

val person: Person? = null
....
if(person?.isHome()) { //This won't compile because the result is Boolean?
  //Do something
}

내가 사용한 해결책은 let함수를 사용 하여 가능한 반환 된 null 값을 제거하는 것입니다.

person?.let {
  if(it.isHome()) {
    //Do something
  }
}


답변

Kotlin에서 다음과 같이 할 수 있습니다.

val b: Boolean? = true
if (b == true) { // if b is null, this should be null == true
    /* Do something */
} else {
    /* Do something else */
}


답변

먼저 아래에 사용자 정의 인라인 함수를 추가하십시오.

inline fun Boolean?.ifTrue(block: Boolean.() -> Unit): Boolean? {
    if (this == true) {
        block()
    }
    return this
}

inline fun Boolean?.ifFalse(block: Boolean?.() -> Unit): Boolean? {
    if (null == this || !this) {
        block()
    }

    return this
}

그런 다음 다음과 같은 코드를 작성할 수 있습니다.

val b: Boolean? = ...
b.ifTrue {
   /* Do something in true case */
}

//or

b.ifFalse {
   /* Do something else in false case */
}


답변

Kotlin의 경우 일반적으로 사용하는 것은

if (object?.booleanProperty ==true)
   {
     //do stuff 
   }

이것은 속성이 true이고 객체가 null이 아닌 경우에만 작동합니다. 반대의 경우 :

if (!object?booleanProperty !=true)
   {
     //do Stuff
   }