코 틀린에서이 표현과 동등한 것은 무엇입니까?
a ? b : c
Kotlin에서 유효한 코드가 아닙니다.
답변
코 틀린에서 if
진술은 표현입니다. 따라서 다음 코드는 동일합니다.
if (a) b else c
표현과 진술의 구별은 여기서 중요합니다. Java / C # / JavaScript에서 if
명령문을 구성하면 값으로 해석되지 않습니다. 보다 구체적으로는 변수에 변수를 할당 할 수 없습니다.
// Valid Kotlin, but invalid Java/C#/JavaScript
var v = if (a) b else c
if
성명서가 있는 언어에서 온다면 이것은 부 자연스럽게 보일지 모르지만 그 느낌은 곧 사라질 것입니다.
답변
당신은 당신의 자신의 정의 할 수 있습니다 Boolean
반환하는 확장 기능을 null
(가) Boolean
입니다이 false
삼항 연산자와 유사한 구조를 제공하는 :
infix fun <T> Boolean.then(param: T): T? = if (this) param else null
이렇게하면 다음과 같이 a ? b : c
표현식이로 변환됩니다 a then b ?: c
.
println(condition then "yes" ?: "no")
업데이트 :
그러나 좀 더 Java와 같은 조건부 스위치를 수행하려면 다음과 같은 것이 필요합니다.
infix fun <T> Boolean.then(param: () -> T): T? = if (this) param() else null
println(condition then { "yes" } ?: "no")
람다에주의하십시오. 콘텐츠 계산 condition
은true
이것은 서투른 것처럼 보이 므로 Java 삼항 연산자를 Kotlin으로 포팅하는 데 필요한 요구가 높은 이유입니다.
답변
TL; DR
if (a) b else c
삼항 연산자 식 대신 사용할 수 있습니다 a ? b : c
.
코 틀린, 많은 제어문을 포함 if
, when
또는 심지어 try
로 사용할 수 있습니다 표현 . 이것은 변수에 할당되고 함수 등에서 반환되는 결과를 가질 수 있음을 의미합니다.
문법적으로 삼항 연산자가 필요하지 않습니다.
Kotlin의 표현의 결과로 언어 에는 실제로 삼항 연산자가 필요하지 않습니다 .
if (a) b else c
삼항 연산자 식 대신 사용할 수 있습니다 a ? b : c
.
아이디어는 모든 사람들이 무엇을 알고 있기 때문에 이전 표현이 더 읽기 쉽다고 생각 ifelse
하지만 ? :
이미 구문에 익숙하지 않으면 다소 명확하지 않습니다.
그럼에도 불구하고 나는 종종 더 편리한 삼항 연산자를 그리워 한다는 것을 인정해야 합니다.
다른 대안들
언제
when
조건을 확인할 때 Kotlin에서 사용 된 구문 을 볼 수도 있습니다 . 또 다른 방법으로 if-else 캐스케이드를 표현하는 방법이기도합니다. 다음은 OTs 예에 해당합니다.
when(a) {
true -> b
false -> c
}
확장
다른 답변에서 많은 좋은 예 ( Kotlin Ternary Conditional Operator )가 보여 주듯이 확장은 사용 사례 해결에 도움이 될 수 있습니다.
답변
나 자신을 위해 다음 확장 기능을 사용합니다.
fun T?.or<T>(default: T): T = if (this == null) default else this
fun T?.or<T>(compute: () -> T): T = if (this == null) compute() else this
첫 번째는 object가 null과 같은 경우 제공된 기본값을 반환합니다. 두 번째는 같은 경우에 람다로 제공된 표현을 평가합니다.
용법:
1) e?.getMessage().or("unknown")
2) obj?.lastMessage?.timestamp.or { Date() }
개인적으로 if
건설 인라인 보다 더 읽기 쉬운 코드
답변
삼항 연산자와 동등한 Java
a ? b : c
한 줄로 Kotlin에서 간단한 IF
if(a) b else c
이 역할에서 보통의 경우 잘 작동하기 때문에 삼항 연산자가 없습니다 (조건? then : else).
https://kotlinlang.org/docs/reference/control-flow.html#if-expression
Null 비교를위한 특수 사례
Elvis 연산자를 사용할 수 있습니다
if ( a != null ) a else b
// equivalent to
a ?: b
답변
블록이 값을 반환하기 때문에 kotlin 에는 삼항 연산자 가 없습니다.if else
그래서, 당신은 할 수 있습니다 :
val max = if (a > b) a else b
java 대신max = (a > b) ? b : c
우리는 또한 when
건설 을 사용할 수 있으며 값을 반환합니다.
val max = when(a > b) {
true -> a
false -> b
}
kotlin 문서에 대한 링크는 다음과 같습니다. 제어 흐름 : if, when, for, while
답변
Kotlin에서는
if
표현식입니다. 즉, 값을 반환합니다. 따라서(condition ? then : else)
평범한 경우이 역할에서 잘 작동하기 때문에 삼항 연산자가 없습니다 . 여기에서 수동 소스
// Traditional usage
var max = a
if (a < b) max = b
// With else
var max: Int
if (a > b) {
max = a
} else {
max = b
}
// As expression
val max = if (a > b) a else b