Como converter String para Long em Kotlin sem enlouquecer: análise de erros comuns
\n\nTodo 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.
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á!
Erro nº 1: Uso ingênuo de toLong() sem tratamento de exceções
\n\nA 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!
val userInput = "123abc"\nval number: Long = userInput.toLong() // Lança NumberFormatException!\n\nPor 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\nComo corrigir? Use try-catch ou, melhor ainda, a alternativa segura — toLongOrNull().
val userInput = "123abc"\nval number: Long? = userInput.toLongOrNull() // Retorna null, sem exceção\nprintln(number) // null\n\nO método toLongOrNull() é seu salvador. Se a string não puder ser convertida, ele simplesmente retorna null, e você pode tratar esse caso tranquilamente.
Erro nº 2: Ignorar null e strings vazias
\n\nEm 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.
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\nDica prática: Sempre verifique se a string está vazia ou use toLongOrNull() em conjunto com o operador elvis ?:.
fun parseUserAge(input: String?): Long {\n return input?.toLongOrNull() ?: 0L // Se for null ou não for número — retorna 0\n}\n\nEssa abordagem torna o código idiomático e seguro.
\n\nErro nº 3: Esquecer espaços e caracteres invisíveis
\n\nUsuá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).
val dirtyString = " 42 "\ndirtyString.toLongOrNull() // null, porque há espaços\n\nSolução: Sempre chame trim() antes da conversão.
val cleanString = dirtyString.trim()\nval number: Long? = cleanString.toLongOrNull()\nprintln(number) // 42\n\nEsta é uma das maneiras mais simples e eficazes de evitar bugs. Lembre-se da regra: trim before you convert.
\n\nErro nº 4: Problemas com localização e separadores
\n\nEm 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"