Operador de chamada segura
Parte da seção Fundamentos do Journey de Kotlin da Coddy. Lição 14 de 93.
Quando você tem uma variável anulável, não pode chamar métodos ou acessar propriedades diretamente nela: o compilador não permitirá isso porque o valor pode ser nulo. O operador de chamada segura ?. resolve esse problema de forma elegante.
Em vez de usar um ponto comum ., você usa ?. para acessar com segurança membros de um tipo anulável:
fun main() {
val name: String? = "Alice"
val length = name?.length // Retorna 5
println(length)
val nullName: String? = null
val nullLength = nullName?.length // Retorna null (sem crash!)
println(nullLength)
}O operador de chamada segura verifica se o valor é nulo antes de acessar a propriedade ou o método. Se o valor for nulo, a expressão inteira retorna null em vez de causar uma falha. Se o valor existir, ele funciona exatamente como uma chamada normal.
Você também pode encadear várias chamadas seguras:
fun main() {
val text: String? = "Hello"
val result = text?.uppercase()?.length
println(result) // Imprime: 5
}Se qualquer parte da cadeia for nula, a expressão inteira retornará nulo com segurança, sem lançar um erro.
Desafio
FácilVocê recebeu a seguinte variável anulável:
val message: String? = "Kotlin"Use o operador de chamada segura para:
- Obter o comprimento de
messagee imprimi-lo - Converter
messagepara maiúsculas e imprimir o resultado
Em seguida, crie outra variável anulável:
val empty: String? = nullUse o operador de chamada segura para obter o comprimento de empty e imprimi-lo.
Cada resultado deve ser impresso em uma linha separada. Lembre-se: o operador de chamada segura retorna
nullquando o valor énull.
Experimente você mesmo
fun main() {
val message: String? = "Kotlin"
// TODO: Use o operador de chamada segura para obter o comprimento de message e imprimi-lo
// TODO: Use o operador de chamada segura para converter message para maiúsculas e imprimi-lo
val empty: String? = null
// TODO: Use o operador de chamada segura para obter o comprimento de empty e imprimi-lo
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores – Parte 1
Operadores aritméticosOperador móduloAtribuição aumentadaOperadores de comparaçãoRecapitulação – Matemática simples7Entrada e Saída Básicas
Função PrintlnTemplates de StringEntrada com ReadLineConversão de TiposRevisão - Anos até a AposentadoriaRevisão - Verdadeiro ou Falso10Funções
Declare uma funçãoParâmetros e argumentosValores de retornoArgumentos nomeadosValores padrãoFunções de expressão únicaRecapitulação — função SigmaRecapitulação — função de validação2Variáveis
Val vs VarInferência de TiposNúmerosStringBooleanoConvenções de NomenclaturaRecapitulação - Inicializar Variáveis5Operadores – Parte 2
Operadores lógicos – Parte 1Operadores lógicos – Parte 2Operadores lógicos – Parte 3Ternário com expressão ifRecapitulação – Lógica simples8Calculadora de Divisão da Conta
Mensagem de Boas-vindasObtendo a Entrada11FizzBuzz com uma Reviravolta
Visão Geral do JogoA Função FizzBuzz3Nullabilidade
O que é Null SafetyTipos anuláveisOperador de chamada seguraOperador ElvisNoções básicas do desafio de funçõesAsserção de não nuloRecapitulação - Acesso seguro6Tomada de Decisões
Instrução IfIf - ElseIf como ExpressãoExpressão WhenWhen com IntervalosRecapitulação - Calculadora Simples9Laços de Repetição
Laço ForLaço WhileLaço Do-WhileBreakContinueIntervalos em LaçosLaço AninhadoRecapitulação - FatorialRecapitulação - Entrada Dinâmica12Fundamentos de Listas
List vs MutableListAcessando ElementosModificando ListasMétodos de ListaPair e TripleRecapitulação - Lista de ProdutosRecapitulação - Lista Invertida15Rastreador de Despesas Diárias
Visão Geral do ProjetoSair do ProgramaPratique por conta própria: Playground de Kotlin