Kotlin4Noobs

Buscar nas notas

    when

    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 if como expressão para retornar ou atribuir valores, o uso de else é 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.