Cómo convertir String a Long en Kotlin y no volverse loco: análisis de errores típicos
\n\nCada desarrollador de Kotlin, tarde o temprano, se enfrenta a la tarea: tomar una cadena que ingresó un usuario, llegó como respuesta de una API o se leyó de un archivo, y convertirla en un número de tipo Long. Parecería que no podría ser más sencillo. Pero es aquí, de la nada, donde los principiantes (y también los programadores experimentados) cometen errores que provocan fallos en la aplicación, pantallas vacías y noches de insomnio depurando.
En este artículo, analizaremos los cinco errores más comunes al convertir String a Long en Kotlin. Aprenderá no solo cómo corregirlos, sino también cómo escribir código que no se rompa ante la primera entrada no válida. ¡Allá vamos!
Error n.º 1: Uso ingenuo de toLong() sin manejo de excepciones
\n\nLa forma más directa es llamar al método toLong() en la cadena. Sí, funciona, pero solo si la cadena contiene un número válido. De lo contrario — ¡hola, NumberFormatException!
val userInput = "123abc"\nval number: Long = userInput.toLong() // ¡Lanzará NumberFormatException!\n\n¿Por qué es malo? Una excepción en tiempo de ejecución es siempre un riesgo. Si su aplicación no la maneja, el usuario verá un cierre forzado.
\n\n¿Cómo solucionarlo? Use try-catch o, mejor aún, una alternativa segura: toLongOrNull().
val userInput = "123abc"\nval number: Long? = userInput.toLongOrNull() // Devolverá null, sin ninguna excepción\nprintln(number) // null\n\nEl método toLongOrNull() es su salvador. Si la cadena no se puede convertir, simplemente devuelve null y usted puede manejar ese caso con tranquilidad.
Error n.º 2: Ignorar null y cadenas vacías
\n\nEn Kotlin, los tipos se dividen explícitamente en nullable y non-null. Si intenta llamar a toLong() en una cadena que podría ser null, el compilador no lo permitirá. Pero hay un truco: una cadena vacía ("") no es null y también lanzará una excepción.
val nullableString: String? = null\n// nullableString.toLong() // Error de compilación: solo llamadas seguras (?.) o con aserción non-null (!!.)\n\nval emptyString = ""\nemptyString.toLongOrNull() // null, todo bien\n\nConsejo práctico: Siempre verifique si la cadena está vacía o use toLongOrNull() junto con el operador Elvis ?:.
fun parseUserAge(input: String?): Long {\n return input?.toLongOrNull() ?: 0L // Si es null o no es un número — devolvemos 0\n}\n\nEste enfoque hace que el código sea idiomático y seguro.
\n\nError n.º 3: Olvidar los espacios y caracteres invisibles
\n\nLos usuarios son seres impredecibles. Pueden poner accidentalmente un espacio antes del número o al final. Una cadena de un archivo puede contener caracteres de nueva línea \\n. El método toLongOrNull() no sabe recortar la cadena: espera que la cadena consista solo en dígitos (y, posiblemente, un signo menos).
val dirtyString = " 42 "\ndirtyString.toLongOrNull() // null, porque hay espacios\n\nSolución: Siempre llame a trim() antes de la conversión.
val cleanString = dirtyString.trim()\nval number: Long? = cleanString.toLongOrNull()\nprintln(number) // 42\n\nEsta es una de las formas más simples y efectivas de evitar errores. Recuerde la regla: trim before you convert.
\n\nError n.º 4: Problemas con la localización y los separadores
\n\nEn diferentes países, los números se escriben de manera diferente. En EE. UU. y Rusia, se usa una coma (1,234) o un espacio (1 234) para separar los miles, y los decimales se separan con un punto. En Europa, es al revés: la coma es el separador decimal. Kotlin, por defecto, espera una cadena «limp