Aceptar la entrada del usuario con Gets en Ruby

Nurudeen Ibrahim 18 abril 2022
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