DEV Community

Maximiliano Burgos
Maximiliano Burgos

Posted on

Curso Kotlin | #7. Entrada de datos

Bienvenido/a a otro capítulo del Curso de Kotlin! Podés consultar el curso completo desde este link que te dejo acá. Podés seguirme por LinkedIn o Twitter si querés estar al tanto de las próximas publicaciones.

Entrada de datos con el método readline

Ahora que ya vimos como definir una variable y los distintos tipos de datos que existen, tenemos todo lo necesario para enviar información escrita a nuestra consola.

Para ello utilizaremos un método llamado readline, de la siguiente manera:

print("Como es tu nombre? > ")
val name = readLine()
println("Tu nombre es $name")
Enter fullscreen mode Exit fullscreen mode

Noten que usé print en la primer linea, y no println. Esto es porque queremos que la entrada de datos se posicione al lado de nuestro texto.

Luego si usamos println para que haga un salto de linea con el resultado.

Cuando ejecutemos el programa, nos pedirá nuestro nombre y lo escribiremos (el texto en verde), y luego daremos enter, recibiendo la salida “Tu nombre es Tom” y el aviso de que nuestro programa ha terminado.

Output

Ahora bien, ¿qué devuelve el método readLine? Si miramos su definición (Control + Click en Windows):

public fun readLine(): kotlin.String? { /* compiled code */ }
Enter fullscreen mode Exit fullscreen mode

Podemos observar que se trata de un nullable String. En el próximo capítulo trataremos el tema de nullables en detalle.

Lo importante en este caso es que se trata de un tipo de dato que ya manejamos un poco en profundidad.

Hay otros métodos interesantes en el tipo String que podemos utilizar, por ejemplo si queremos que todo el texto quede en mayusculas, usaríamos toUpperCase:

println("Tu nombre es ${name?.toUpperCase()}")
#output: Tu nombre es TOM
Enter fullscreen mode Exit fullscreen mode

Y si necesitamos minúsculas, podemos utilizar toLowerCase:

println("Tu nombre es ${name?.toLowerCase()}")
#output: Tu nombre es tom
Enter fullscreen mode Exit fullscreen mode

El “?” al lado de name es necesario porque se trata de una nullable variable. Paciencia, ya lo veremos en el próximo capítulo.

Estos últimos dos métodos son propios de la clase String. Haciendo un repaso de la clase anterior, podemos decir que a su vez es un CharSequence, por lo cual podemos aplicarle un filtro.

Imaginemos que en el nombre introducimos dígitos, lo cual es incorrecto. Queremos limpiar ese input:

print("Como es tu nombre? > ")
val name = readLine()
val nameSanitized = name?.filter { it.isDigit().not() }
println("Tu nombre es $nameSanitized")
Enter fullscreen mode Exit fullscreen mode

Creamos una variable nameSanitized que recibirá el resultado del filtro isDigit, con una adición de la función not, la cual permitirá evaluar una negación.

En pocas palabras, le decimos algo como: Quiero todos los caracteres que sean isDigit igual a false. O sea, que no sean dígitos. Si corremos el programa:

Como es tu nombre? > Max234
Tu nombre es Max
Enter fullscreen mode Exit fullscreen mode

Podemos observar que quitó todos los números.

Ahora bien: Sabemos que readLine devuelve un String, asi que podemos ahorrarnos una linea:

val name = readLine()?.filter { it.isDigit().not() }
println("Tu nombre es $name")
Enter fullscreen mode Exit fullscreen mode

De esta manera podemos encadenar métodos y el código queda mucho más limpio. Incluso si quisiéramos aplicar minúsculas luego del filtro, podemos seguir concatenando métodos:

val name = readLine()?.filter { it.isDigit().not() }?.toLowerCase()
Enter fullscreen mode Exit fullscreen mode

Esto va a funcionar siempre y cuando el valor retornado por cada método sea compatible con el siguiente.

Conclusiones

Esta fue una clase corta, pero atómica. Ver como funciona la lectura de la entrada de datos conjunto de nuestro conocimiento previo en strings, nos ayuda a ver el panorama completo.

Espero que puedan aplicar todos estos conocimientos a su día a día.

¡Los espero en la siguiente clase!

Top comments (0)