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")
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.
Ahora bien, ¿qué devuelve el método readLine? Si miramos su definición (Control + Click en Windows):
public fun readLine(): kotlin.String? { /* compiled code */ }
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
Y si necesitamos minúsculas, podemos utilizar toLowerCase:
println("Tu nombre es ${name?.toLowerCase()}")
#output: Tu nombre es tom
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")
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
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")
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()
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)