O Operador !!
Force um valor não nulo e conheça os riscos
O Operador !! é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 3 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 Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.
Forçando a não nulidade
Às vezes, você tem certeza de que um valor anulável não é nulo, mas o compilador ainda reclama.
O operador de asserção de não nulo !! instrui o compilador a confiar em você e tratar o valor como não nulo.
Uso básico
Adicionar !! converte um tipo anulável no tipo correspondente não nulo.
Se o valor realmente não for nulo, o código funcionará exatamente como uma chamada normal.
fun main() {
val name: String? = "Kotlin"
println(name!!.length)
}O perigo
Se o valor for realmente null, !! lançará uma NullPointerException exatamente nesse ponto.
Esse é o único lugar em que o Kotlin permite que um NPE aconteça, e a responsabilidade é inteiramente sua.
fun main() {
val name: String? = null
try {
println(name!!.length)
} catch (e: NullPointerException) {
println("Boom: NullPointerException")
}
}Por que ele existe
O operador é intencionalmente desagradável. Dois pontos de exclamação se destacam na revisão do código, sinalizando um local em que você ignorou a rede de segurança.
Ele existe para os casos raros em que você realmente sabe mais do que o compilador.
A chamada segura geralmente é melhor
Na maioria das situações, uma chamada segura ?. com Elvis ?: é mais segura e igualmente curta.
Compare abaixo as duas abordagens para o mesmo objetivo.
fun main() {
val name: String? = null
val safeLength = name?.length ?: 0
println(safeLength)
}Evite encadear !!
Nunca encadeie vários !!, como em a!!.b!!.c. Se isso causar uma falha, você não poderá saber qual parte era nula.
Separe a expressão ou use chamadas seguras.
fun main() {
val text: String? = "hi"
// bad style: text!!.uppercase()!! is hard to debug
val good = text?.uppercase() ?: ""
println(good)
}Um uso legítimo
Um caso aceitável: um valor que você definiu anteriormente e sabe que já foi inicializado.
Mesmo assim, prefira lateinit ou reestruture o código quando possível.
fun main() {
var config: String? = null
config = "loaded"
// we just assigned it, so !! is safe here
println(config!!.uppercase())
}Lendo o rastreamento da pilha
Quando !! falha, a exceção aponta para a linha exata. Essa precisão é a única vantagem em comparação com um resultado incorreto silencioso.
Use a mensagem para encontrar e corrigir a suposição que estava errada.
fun length(text: String?): Int {
return text!!.length
}
fun main() {
println(length("abc"))
// length(null) would throw on the !! line
}Refatorando para remover !!
A maioria dos usos de !! pode ser removida tratando nulos corretamente. Abaixo, um valor alternativo com Elvis torna a função total e livre de falhas.
fun length(text: String?): Int {
return text?.length ?: 0
}
fun main() {
println(length("abc"))
println(length(null))
}Regra prática
Trate cada !! como uma pergunta: tenho certeza absoluta de que isso nunca será nulo?
- Se sim e for raro → aceitável
- Se não tiver certeza → use
?.e?:
Reunindo tudo
O operador !! é uma ferramenta perigosa:
- Ele força um valor anulável a assumir um tipo não nulo
- Ele lança uma NullPointerException se o valor for nulo
- Prefira chamadas seguras e Elvis em quase todos os casos
fun main() {
val sure: String? = "definitely here"
println(sure!!.length)
val maybe: String? = null
println(maybe?.length ?: -1)
}Verificação rápida
Teste sua compreensão sobre o operador de asserção de não nulo.
Recapitulação
Você aprendeu sobre o operador !!:
- Ele afirma que um valor anulável não é nulo
- Ele lança uma NullPointerException quando essa afirmação está errada
- Deve ser o último recurso, não um hábito
A seguir, você verá como a nulidade chega do Java por meio dos tipos de plataforma.
Perguntas Frequentes
A aula “O Operador !!” é grátis?
Sim — o texto completo de “O Operador !!” é 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 Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.
O que vou aprender em “O Operador !!”?
Force um valor não nulo e conheça os riscos Você pratica Kotlin 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 Kotlin Academy?
Nenhuma experiência prévia é necessária. Kotlin 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 3 de 4.
Quanto tempo leva a aula “O Operador !!”?
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 Kotlin Academy?
Sim. Cada aula de Kotlin 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.