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 IntElvis 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 0Verificaçã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
- Tipos anuláveis versus não anuláveis
- Chamadas seguras e Elvis
- let, also e funções de escopo
- Evitando NullPointerExceptions