Aceptar la entrada del usuario con Gets en Ruby
Al crear una aplicación de línea de comandos (CLI) en Ruby, una funcionalidad común es recibir información de los usuarios, incluido el nombre de un usuario o una respuesta sí/no
. Aquí es donde la palabra clave gets
es útil.
Este tutorial mostrará cómo crear un programa CLI muy simple que permita a los usuarios ingresar sus nombres y saludarlos con el nombre que ingresaron.
Código de ejemplo:
puts "Hi, welcome to my app."
puts "Enter your name to get started: "
name = gets
puts "Hello #{name}, nice to have you here"
Producción :
Hi, welcome to my app.
Enter your name to get started:
Arriba está el resultado que obtengo después de ejecutar el código. En este punto, el programa me pide que ingrese mi nombre. Esto es lo que hace gets
; crea un aviso y espera la entrada del usuario.
A continuación se muestra el resultado completo que obtengo después de ingresar mi nombre como John
y presionar la tecla Enter.
Hi, welcome to my app.
Enter your name to get started:
John
Hello John
, nice to have you here
Debes haber notado algo extraño en el resultado de arriba. ¿Por qué el saludo Hello John, nice to have you here
se rompió después de John
? Para comprender lo que realmente está sucediendo, inspeccione la variable name
.
Código de ejemplo:
puts "Hi, welcome to my app."
puts "Enter your name to get started: "
name = gets
puts name.inspect
puts "Hello #{name}, nice to have you here"
Producción :
Hi, welcome to my app.
Enter your name to get started:
John
"John\n"
Hello John
, nice to have you here
Arriba está el resultado completo que obtengo después de ingresar John
como mi nombre. Puede ver que la variable name
aparece como John\n
.
Así se comporta gets
; agrega automáticamente \n
a cualquier valor que reciba como entrada del usuario, esto se llama el carácter de nueva línea, y cada vez que aparece en un texto, significa que el texto debe dividirse en ese punto y continuar en una nueva línea.
Una buena forma de arreglar esto es utilizar el método chomp
, que elimina cualquier carácter especial final, no solo el carácter de nueva línea (\n
) sino también el carácter de retorno de carro (\r
). Puedes leer más aquí sobre cómo funciona chomp
.
Código de ejemplo:
puts "Hi, welcome to my app."
puts "Enter your name to get started: "
name = gets.chomp
puts "Hello #{name}, nice to have you here"
Producción :
Hi, welcome to my app.
Enter your name to get started:
John
Hello John, nice to have you here