Ruby: Argumentos en la línea de comandos con ARGV

Fondo

De la misma manera que pasamos argumentos a métodos en Ruby, también podemos pasar argumentos a programas completos. Eso es exactamente lo que hacen los argumentos de la línea de comandos. Cada vez que ejecutamos nuestro programa Ruby podemos introducir diferentes argumentos de línea de comandos, y obtener diferentes resultados.

¿Por qué aprenderlo?##

En la lección de Ruby titulada Putting the Form in Formatter, usaste gets.chomp para introducir la entrada del usuario en tu programa Ruby. El uso de argumentos en la línea de comandos añade una nueva herramienta a tu cinturón de herramientas de Ruby, que puedes utilizar para introducir la entrada del usuario en tu programa si así lo deseas.

Usando argumentos de línea de comandos##

Ruby captura los argumentos de línea de comandos con un arreglo especial llamado ARGV. Cuando se escribe dentro de su programa de Ruby, ARGV tomará un comando de línea de comandos que se parece a esto:ruby testing_argv.rb these are elements in the argv array

y crear una matriz que se parece a esto:

¡Ahora prueba!

Probando ARGV##

  1. En Sublime Text, crea un archivo llamado testing_argv.rb yendo a Archivo > Nuevo Archivo …
  2. Una vez que hayas creado tu archivo de prueba, asegúrate de guardarlo en una ubicación fácil de encontrar, ¡y empecemos a escribir nuestro código!
  3. Configura ARGV para capturar los argumentos de la línea de comandosDentro de testing_argv.rb, asigna ARGV a un array llamado input_array, que vinculará el contenido de ARGV a una variable.

ARGV-Ejemplo-1

Como ARGV crea un array, puedes llamar a cualquier método en input_array que puedas llamar en un array normal. Por ejemplo, puts input_array.length regresará con el número de argumentos que un usuario pasó.

También puede imprimir los resultados de la matriz ARGV utilizando puts input_array.to_s. El archivo completo testing_argv.rb podría ser algo así:

ARGV-Ejemplo-2

Para probar su archivo, ejecute el programa en la línea de comandos con múltiples argumentos a continuación del nombre del archivo, así: ruby testing_argv.rb these are elements in the argv array

Tu línea de comandos debería decirte que hay 7 elementos en el array, e imprimirlos en tu consola, así:

ARGV Salida de la consola Ejemplo 1

Usando Splat para separar el primer argumento del resto##

Para su programa, puede querer usar el primer argumento de la línea de comandos como un comando, y luego usar el resto de los argumentos como una cadena de texto con la que puede hacer cosas. Aquí hay una nueva expresión de Ruby que puede ayudarle a lograr esto simplemente: first_arg, *the_rest = ARGV

¡Aquí estás asignando dos variables al mismo tiempo! La coma las separa, y el * se llama splat. Has utilizado el splat de forma similar en la lección de Codecademy sobre Métodos, Bloques y Ordenación de Ruby. Debido al *, Ruby sabe que debe asignar ARGV a first_arg, y el resto de los argumentos al_resto. Vamos a probarlo:

En tu programa, escribe: puts first_argputs the_rest

Luego ejecuta ruby testing_argv.rb first and all the rest! dentro de tu línea de comandos.

#¿Cómo puedes utilizar esta Técnica?##La línea de comandos puede ser una potente interfaz para un programa que hayas escrito. Estos métodos le permitirán capturar la entrada del usuario, y luego darle un buen uso.

Por ejemplo, si construyes un programa de cajero automático con Ruby, podrías utilizar argumentos de la línea de comandos para llamar a métodos y modificar tu cuenta bancaria. Podrías escribir un array ARGV que tome tu primer argumento de línea de comandos para realizar un método, como «retirar», y luego usar los argumentos que le siguen, quizás «$20», para especificar cuánto dinero retirar.

Hay infinitas formas de usar ARGV y splats para obtener datos de la línea de comandos y hacer que hagan algo por ti. Si quieres llegar al fondo de cómo funciona ARGV, revisa su Ruby-doc aquí.