Kotlin4Noobs

Buscar nas notas

    ?.

    Null Safety e operadores seguros

    Tipos anuláveis, chamada segura, Elvis e o operador !!.

    Kotlin tem um sistema robusto de segurança contra valores nulos, o que ajuda a evitar erros comuns, como NullPointerException (NPE). Aqui está uma visão geral de como Kotlin lida com valores nulos e os operadores seguros que você pode usar.

    Tipos nulos

    Por padrão, todas as variáveis em Kotlin são não nulas, ou seja, você não pode atribuir null a elas. Para declarar uma variável que pode ser null, você deve definir explicitamente o tipo da variável com o sufixo ?:

    val nonNullable: String = "Kotlin"  // Variável não nula
    val nullable: String? = null       // Variável que pode ser nula

    Operador seguro de chamada ?.

    O operador ?. é usado para acessar propriedades ou métodos de um objeto que pode ser nulo, sem lançar uma exceção de ponteiro nulo. Se a variável for null, a chamada será ignorada e o resultado será null:

    val length: Int? = nullable?.length  // Se 'nullable' for null, o resultado será null

    Operador elvis ?:

    O operador Elvis ?: é usado para fornecer um valor padrão caso a expressão à esquerda seja null. É muito útil para evitar retornos null:

    val lengthOrZero: Int = nullable?.length ?: 0  // Retorna 0 se 'nullable' for null

    Operador !! (forçar nulo)

    O operador !! é usado quando você tem certeza de que uma variável não será nula, mesmo que seu tipo permita null. Ele lança uma exceção NullPointerException se a variável for null:

    val length: Int = nullable!!.length  // Lança NPE se 'nullable' for null

    Use o operador !! com cuidado, pois ele anula as verificações de segurança contra nulos de Kotlin.

    Função let

    A função let é frequentemente usada com o operador seguro ?. para executar um bloco de código apenas se a variável não for null:

    nullable?.let {
        println("O comprimento da string é: ${it.length}")
    }

    Neste exemplo, o bloco dentro de let só será executado se nullable não for null.

    Verificações de nulo com if

    Você pode verificar se uma variável é null usando uma expressão if, e o compilador de Kotlin automaticamente infere que a variável não é mais null dentro do bloco if:

    if (nullable != null) {
        println("A variável não é nula. Comprimento: ${nullable.length}")
    } else {
        println("A variável é nula.")
    }

    Aqui está um exemplo que usa vários operadores seguros para trabalhar com variáveis que podem ser nulas:

    fun main() {
        val nullableString: String? = "Kotlin"
    
        // Operador seguro de chamada
        println(nullableString?.length)
    
        // Operador Elvis
        val lengthOrZero: Int = nullableString?.length ?: 0
        println(lengthOrZero)
    
        // Operador !!  (forçar nulo)
        val forcedLength: Int = nullableString!!.length
        println(forcedLength)
    
        // Usando let para evitar verificações nulas
        nullableString?.let {
            println("O comprimento da string é: ${it.length}")
        }
    
        // Verificação de nulo com if
        if (nullableString != null) {
            println("A string não é nula. Comprimento: ${nullableString.length}")
        } else {
            println("A string é nula.")
        }
    }

    Exemplo completo:

    fun main() {
        val nullableString: String? = "Kotlin"
    
        println(nullableString?.length)
    
        val lengthOrZero: Int = nullableString?.length ?: 0
        println(lengthOrZero)
    
        val forcedLength: Int = nullableString!!.length
        println(forcedLength)
    
        nullableString?.let {
            println("O comprimento da string é: ${it.length}")
        }
    
        if (nullableString != null) {
            println("A string não é nula. Comprimento: ${nullableString.length}")
        } else {
            println("A string é nula.")
        }
    }