Contenido del curso

Lectura de datos del usuario con readLine

Resumen

Leer datos del usuario en Kotlin con readLine te permite construir aplicaciones interactivas que respondan a lo que la persona digita por consola. Aquí aprendes a capturar entradas, manejar valores nulos y limpiar texto para armar, por ejemplo, un sistema de email funcional.

¿Cómo se capturan datos del usuario en Kotlin?

En Kotlin, la lectura por consola se hace con la función readLine, que devuelve un String? (un string que admite valores nulos). Esa nulabilidad no es un detalle menor: es la razón por la que necesitas dominar los operadores de seguridad antes de pedirle datos al usuario.

El flujo básico empieza con un mensaje. Usas print en lugar de println cuando quieres que el usuario escriba justo después del texto, en la misma línea [00:34].

kotlin print("Ingresa tu email: ") val email = readLine() println("Tu email es $email")

Cuando ejecutas el programa, la consola se queda esperando hasta que escribas algo y presiones enter. Lo que digites queda almacenado en la variable email y puedes reutilizarlo en cualquier parte del programa.

¿Qué devuelve readLine en Kotlin? Devuelve un String?, es decir, una cadena que puede contener el texto digitado o null si se alcanza el end of file. Si solo presionas enter sin escribir, devuelve una cadena vacía, no null.

¿Por qué readLine puede devolver null y cómo manejarlo?

La documentación oficial aclara que readLine retorna null únicamente cuando se alcanza el end of file, no cuando el usuario presiona enter sin escribir [02:10]. Para forzar ese caso en una terminal, usas Cmd+D en macOS o Ctrl+D en Linux. Un enter vacío en cambio genera un salto de línea (\n), que es un carácter, no un nulo.

Para protegerte de ese posible null, el patrón más limpio es asignar un valor por defecto con el Elvis operator (?:):

kotlin val email = readLine() ?: "sin email" val destinatario = readLine() ?: "sin email" val asunto = readLine() ?: "sin asunto"

Con esto, si la lectura llega a ser nula, la variable toma el valor por defecto y tu programa no rompe.

¿Cuándo conviene usar el operador de llamado seguro?

Cuando quieres invocar un método sobre un valor que puede ser nulo, usas el operador ?.. Es la alternativa segura a !!, que lanza una excepción si el valor es nulo. En la práctica, ?. te permite encadenar llamadas sin riesgo de que el programa se caiga.

¿Cómo limpiar texto ingresado por el usuario con trim?

Una entrada de usuario casi nunca llega perfecta. Para eliminar espacios al inicio y al final de una cadena, Kotlin ofrece la función trim. Como el resultado de readLine puede ser nulo, combinas trim con el operador de llamado seguro:

kotlin print("Ingresa el mensaje: ") val mensajeSinLimpiar = readLine() val mensajeLimpio = mensajeSinLimpiar?.trim() ?: ""

Aquí pasan dos cosas interesantes. Primero, ?.trim() solo ejecuta trim si mensajeSinLimpiar no es nulo. Segundo, el ?: final asegura que mensajeLimpio siempre sea un String no nulo, listo para usarse sin más validaciones [05:48].

¿Qué hace trim en Kotlin? Elimina los espacios en blanco al principio y al final de un string. Es útil para normalizar entradas de usuario antes de guardarlas o procesarlas.

¿Cómo armar una vista previa de email leyendo varios campos?

Una vez tienes las variables limpias, puedes componer una salida estructurada. Este es el patrón completo que se construye en la clase para simular un sistema de envío de correos:

kotlin fun main() { print("Ingresa tu email: ") val email = readLine() ?: "sin email"

print("Ingresa el destinatario: ") val destinatario = readLine() ?: "sin email" print("Ingresa el asunto: ") val asunto = readLine() ?: "sin asunto" print("Ingresa el mensaje: ") val mensajeLimpio = readLine()?.trim() ?: "" println("--- Vista previa del email ---") println("De: $email") println("Para: $destinatario") println("Asunto: $asunto") println("Mensaje: $mensajeLimpio")

}

Al ejecutar, ingresas remitente, destinatario, asunto y mensaje, y la consola devuelve un preview ordenado del correo. Si en algún campo presionas Cmd+D para forzar un nulo, los valores por defecto entran en acción y el programa sigue corriendo.

¿Qué atajo agiliza duplicar líneas en el editor?

Dentro de IntelliJ o Android Studio, Cmd+D en macOS o Ctrl+D en Windows/Linux duplica la línea actual. Ojo: ese mismo atajo en la terminal envía el end of file y puede terminar la ejecución, así que el contexto importa.

Con esta base ya manejas dos pilares de cualquier app interactiva: mostrar datos al usuario con print y println, y leer datos con readLine para que el flujo de tu programa dependa de la entrada real. ¿Qué tipo de validaciones agregarías tú al email antes de mostrar la vista previa? Cuéntalo en los comentarios.