0Pricing
Android Academy · Aula

Chamadas seguras e Elvis

Operadores ?. e ?:.

Chamadas seguras e Elvis é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Android Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Android Academy inclui 4 aulas no total.

Além das verificações com if

Verificar cada valor anulável com um if funciona, mas o código fica prolixo rapidamente. O Kotlin oferece operadores compactos criados para tratar valores nulos.

Esta lição aborda o operador de chamada segura ?. e o operador Elvis ?:, duas ferramentas que você usará constantemente.

O operador de chamada segura

O operador ?. chama um método somente se o valor não for nulo. Se for nulo, toda a expressão será avaliada como null, em vez de causar um travamento.

É um atalho seguro para o padrão de verificar se o valor não é nulo.

fun main() {
    val name: String? = "Coddy"
    println(name?.length)
}

Chamada segura em um valor nulo

Quando o receptor é nulo, a chamada segura é interrompida e retorna null. Nenhuma exceção é lançada.

Aqui, o resultado impresso é a palavra null, não um travamento.

fun main() {
    val name: String? = null
    println(name?.length)  // prints: null
}

Encadeando chamadas seguras

Você pode encadear ?. em várias etapas. Se qualquer elo for nulo, toda a cadeia será interrompida e produzirá null.

Isso é perfeito para navegar por dados opcionais aninhados.

class Address(val city: String?)
class User(val address: Address?)

fun cityOf(u: User?): String? {
    return u?.address?.city
}

O operador Elvis

O operador Elvis ?: fornece um valor alternativo quando o lado esquerdo é nulo. Ele recebeu esse nome por causa do penteado do cantor, ao qual o símbolo se assemelha.

Leia assim: use o valor da esquerda ou, caso contrário, use o valor da direita.

fun main() {
    val name: String? = null
    val shown = name ?: "Guest"
    println(shown)  // prints: Guest
}

Elvis com chamadas seguras

A chamada segura e o Elvis funcionam muito bem juntos. Use ?. para acessar um valor e ?: para fornecer um padrão caso algo seja nulo.

Esse padrão transforma um resultado anulável em um resultado garantidamente não nulo.

fun main() {
    val name: String? = null
    val len: Int = name?.length ?: 0
    println(len)  // prints: 0
}

Exemplo de comprimento padrão

Aqui, o tipo do resultado é um Int comum, não Int?. O operador Elvis removeu a possibilidade de nulo.

Após ?: com um valor alternativo não nulo, o compilador sabe que o valor nunca poderá ser nulo.

val title: String? = "Kotlin"
val length: Int = title?.length ?: 0
// length is a non-null Int

Elvis para retorno antecipado

Como return e throw são expressões no Kotlin, você pode colocá-los à direita do Elvis.

Essa é uma forma clara de sair antecipadamente quando um valor obrigatório está ausente.

fun process(input: String?) {
    val text = input ?: return
    println(text.uppercase())
}

Chamada segura com let

Combine ?. com let para executar um bloco somente quando o valor não for nulo. Dentro dele, o valor não é nulo e recebe o nome it.

Esse é um padrão comum para trabalhar com valores opcionais.

fun main() {
    val email: String? = "a@b.com"
    email?.let {
        println("Sending to " + it)
    }
}

Reunindo tudo

Um programa curto pode mostrar a chamada segura e o Elvis trabalhando juntos para produzir uma mensagem amigável.

Observe que nenhuma instrução if é necessária, mas o código nunca corre o risco de travar por causa de um valor nulo.

fun main() {
    val nickname: String? = null
    val display = nickname?.uppercase() ?: "ANONYMOUS"
    println(display)
}

Quando usar cada um

Use ?. quando quiser que um resultado nulo continue fluindo sem causar problemas. Use ?: quando quiser substituir o nulo por um valor padrão concreto.

Juntos, eles abrangem a grande maioria dos casos cotidianos de tratamento de valores nulos sem verificações prolixas.

val count = list?.size ?: 0
// safe call reads size, Elvis defaults to 0

Verificação rápida

Teste sua compreensão sobre chamadas seguras e o operador Elvis.

Recapitulação

A chamada segura ?. chama um membro somente se o receptor não for nulo; caso contrário, produz null. O operador Elvis ?: substitui um nulo por um valor alternativo.

Encadeá-los remove a possibilidade de nulo de forma clara. A seguir, você explorará com mais profundidade funções de escopo, como let e also.

Perguntas Frequentes

A aula “Chamadas seguras e Elvis” é grátis?

Sim — o texto completo de “Chamadas seguras e Elvis” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Android Academy, atualize para CoddyKit PRO. O curso de Android Academy inclui 4 aulas no total.

O que vou aprender em “Chamadas seguras e Elvis”?

Operadores ?. e ?:. Você pratica Android Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Android Academy?

Nenhuma experiência prévia é necessária. Android Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Chamadas seguras e Elvis”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Android Academy?

Sim. Cada aula de Android Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Tipos anuláveis versus não anuláveis
  2. Chamadas seguras e Elvis
  3. let, also e funções de escopo
  4. Evitando NullPointerExceptions
← Voltar para Android Academy