String para Long em Kotlin: 5 erros fatais e como evitá-los

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como converter String para Long em Kotlin sem enlouquecer: análise de erros comuns

\n\n

Todo desenvolvedor Kotlin, mais cedo ou mais tarde, enfrenta a tarefa: pegar uma string digitada pelo usuário, recebida de uma API ou lida de um arquivo, e transformá-la em um número do tipo Long. Parece simples, não é? Mas é exatamente aqui, em um terreno aparentemente plano, que iniciantes (e até programadores experientes) cometem erros que levam a falhas no aplicativo, telas vazias e noites sem dormir depurando código.

\n\n

Neste artigo, vamos analisar os cinco erros mais comuns ao converter String para Long em Kotlin. Você aprenderá não apenas como corrigi-los, mas também como escrever um código que não quebre na primeira entrada inválida. Vamos lá!

\n\n

Erro nº 1: Uso ingênuo de toLong() sem tratamento de exceções

\n\n

A maneira mais direta é chamar o método toLong() na string. Sim, funciona, mas apenas se a string contiver um número válido. Caso contrário — olá, NumberFormatException!

\n\n
val userInput = "123abc"\nval number: Long = userInput.toLong() // Lança NumberFormatException!
\n\n

Por que isso é ruim? Uma exceção em tempo de execução é sempre um risco. Se seu aplicativo não tratá-la, o usuário verá uma tela de erro.

\n\n

Como corrigir? Use try-catch ou, melhor ainda, a alternativa segura — toLongOrNull().

\n\n
val userInput = "123abc"\nval number: Long? = userInput.toLongOrNull() // Retorna null, sem exceção\nprintln(number) // null
\n\n

O método toLongOrNull() é seu salvador. Se a string não puder ser convertida, ele simplesmente retorna null, e você pode tratar esse caso tranquilamente.

\n\n

Erro nº 2: Ignorar null e strings vazias

\n\n

Em Kotlin, os tipos são claramente divididos em nullable e non-null. Se você tentar chamar toLong() em uma string que pode ser null, o compilador não deixará passar. Mas tem um detalhe: uma string vazia ("") não é null, e também lançará uma exceção.

\n\n
val nullableString: String? = null\n// nullableString.toLong() // Erro de compilação: apenas chamadas seguras (?.) ou non-null asserted (!!.)\n\nval emptyString = ""\nemptyString.toLongOrNull() // null, tudo certo
\n\n

Dica prática: Sempre verifique se a string está vazia ou use toLongOrNull() em conjunto com o operador elvis ?:.

\n\n
fun parseUserAge(input: String?): Long {\n    return input?.toLongOrNull() ?: 0L // Se for null ou não for número — retorna 0\n}
\n\n

Essa abordagem torna o código idiomático e seguro.

\n\n

Erro nº 3: Esquecer espaços e caracteres invisíveis

\n\n

Usuários são imprevisíveis. Eles podem acidentalmente colocar um espaço antes do número ou no final. Uma string de arquivo pode conter caracteres de quebra de linha \\n. O método toLongOrNull() não remove espaços — ele espera que a string contenha apenas dígitos (e, possivelmente, um sinal de menos).

\n\n
val dirtyString = "  42  "\ndirtyString.toLongOrNull() // null, porque há espaços
\n\n

Solução: Sempre chame trim() antes da conversão.

\n\n
val cleanString = dirtyString.trim()\nval number: Long? = cleanString.toLongOrNull()\nprintln(number) // 42
\n\n

Esta é uma das maneiras mais simples e eficazes de evitar bugs. Lembre-se da regra: trim before you convert.

\n\n

Erro nº 4: Problemas com localização e separadores

\n\n

Em diferentes países, os números são escritos de formas diferentes. Nos EUA e no Brasil, usa-se vírgula para separar milhares (1,234) ou ponto (1.234), e o ponto final para decimais. Na Europa, é o contrário: a vírgula é o separador decimal. O Kotlin, por padrão, espera uma string "limpa"

Blogs

Book Recommendations