Expressões condicionais
if e when como expressões que devolvem valor.
If
Em Kotlin, if é uma expressão, e retorna um valor. Por isso, não há necessidade de um operador ternário, pois if
pode ser usado diretamente:
var value = 1
val otherValue = 5
if (2 < otherValue) value = otherValue
Com else:
val firstValue = 1
val secondValue = 2
if (firstValue >= secondValue) {
println("$firstValue")
} else {
println("$secondValue")
}
Exemplo completo:
fun main() {
val firstValue = 1
val secondValue = 2
if (firstValue >= secondValue) {
println("$firstValue")
} else {
println("$secondValue")
}
}
Uma expressão if pode ser usada em blocos. Nesse caso, a última expressão é o valor do bloco:
val firstValue = 1
val secondValue = 2
val maxValue = if (firstValue > secondValue) firstValue else secondValue
Exemplo completo:
fun main() {
val firstValue = 1
val secondValue = 2
val maxValue = if (firstValue > secondValue) firstValue else secondValue
println(maxValue) // 2
}
Nota
Quando usar
ifcomo expressão para retornar ou atribuir valores, o uso deelseé obrigatório para garantir que o fluxo sempre tenha um resultado.
When
Em Kotlin, when é uma expressão condicional com várias ramificações, semelhante à instrução switch em outras
linguagens como PHP. O when avalia seu argumento e compara com as condições de cada ramificação até que uma seja
satisfeita:
val value = 3
val result = when (value) {
1 -> "Primeira condição."
2 -> "Segunda condição."
else -> "Condição padrão (else)."
}
Exemplo completo:
fun main() {
val value = 3
val result = when (value) {
1 -> "Primeira condição."
2 -> "Segunda condição."
else -> "Condição padrão (else)."
}
println(result) // Condição padrão (else).
}
O when também suporta ranges nas condições:
val randomValue = (1..1001).random()
val result = when (randomValue) {
in 1..100 -> "O valor <$randomValue> está entre 1 e 100."
in 101..1000 -> "O valor <$randomValue> está entre 101 e 1000."
else -> "O valor <$randomValue> é maior que 1000."
}
Exemplo completo:
fun main() {
val randomValue = (1..1001).random()
val result = when (randomValue) {
in 1..100 -> "O valor <$randomValue> está entre 1 e 100."
in 101..1000 -> "O valor <$randomValue> está entre 101 e 1000."
else -> "O valor <$randomValue> é maior que 1000."
}
println(result)
}
O when pode ser usado tanto como uma expressão quanto como uma instrução. Se usado como expressão, o valor da primeira
condição correspondida será o valor da expressão. Se usado como instrução, os valores das ramificações individuais serão
ignorados. Assim como no if, cada ramificação pode ser um bloco, e o valor da última expressão no bloco será o valor
retornado.