Curso Kotlin | #7. Entrada de datos
Tags: kotlin, spanish, beginners, programming
Published: 2022-12-13 13:52:06

Bienvenido/a a otro capítulo del Curso de Kotlin! Podés consultar el curso completo desde [este link](https://github.com/maxwellnewage/kotlin-course) que te dejo acá. Podés seguirme por [LinkedIn](https://www.linkedin.com/in/maximilianoburgos/) o [Twitter](https://twitter.com/maxwellnewage) 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:

```kotlin
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.

![Output](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qi8h59er2qtqv6oxh5qu.png)

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

```kotlin
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:

```kotlin
println("Tu nombre es ${name?.toUpperCase()}")
#output: Tu nombre es TOM
```

Y si necesitamos minúsculas, podemos utilizar toLowerCase:

```kotlin
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:

```kotlin
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:

```kotlin
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:

```kotlin
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:

```kotlin
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!