Bienvenidos sean a este post, hoy veremos como usar argumentos desde la linea de comandos.
Cuando utilizamos programas ya sea desde una terminal o la ventana de comandos tenemos la posibilidad de pasar argumentos para complementar a nuestro programa, un ejemplo:
tinchicus@dbn001vrt:~/lenguajes/rust$ cargo new hola_mundo
En este caso tenemos al script cargo donde el primer argumento es new para indicar al script que use el modulo para crear un nuevo proyecto, el siguiente argumento es el nombre del proyecto, esto es a lo que nos referimos con los argumentos de la linea de comandos, si repasamos otros lenguajes como C o C++ para poder utlizarlos tenemos la siguiente opcion en el encabezado del main:
int main(int argc, char *argv[])
En este caso el primer argumento de la funcion nos permite establecer la cantidad de argumentos que recibe, el segundo sera el array que contiene cada uno de los argumentos que informamos, tengamos en cuenta que el primer argumento, argv[0], sera el nombre del programa y a partir del siguiente seran cada uno de los argumentos que informemos, pero Rust no lo hace de esta forma sino que lo hace de una manera diferente.
Para poder manerjar los argumentos debemos utilizar a la libreria standard, mas exactamente este modulo:
std::env::args
En este caso usamos al modulo de argumentos del entorno, y al igual que vimos con C para mayor simplicidad lo almacenaremos en un Vector de tipo String (Vec<String>) porque env::args devuelve un iterador que contiene un String, a diferencia de lo visto anteriormente no podemos pasar a la funcion main para procesarlos sino que debemos usarlo de forma distinta..
Para entenderlo un poco mejor vamos a crear un nuevo proyecto que llamaremos argumento, una vez generado vamos a modificar el archivo main.rs creado con el siguiente codigo:
main.rs
use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
println!("Pasaste {:?} argumentos, ellos fueron {:?}",
args.len() - 1,
&args[1..]);
}
Primero importaremos el modulo de entorno de la libreria standard, despues dentro del main crearemos una nueva variable que llamaremos args, esta sera de tipo Vector para recibir un valor de tipo String, luego usaremos la funcion args para crear el iterador de los argumentos informados pero la funcion collect sera la encargada de hacer la magia, ya que este convertira al iterador generado en un Vector, la siguiente linea sera la encargada de informar la cantidad y cuales argumentos pasamos, para ello usamos al metodo len con nuestra variable, recuerden que es de tipo Vector y disponemos de este metodo para saber la cantidad, en este caso le restamos uno, la segunda es para mostrarlos y para ello le decimos que inicie desde 1 y los dos puntos (..) es para decirle que continue hasta que termine, esto se usa mucho en otros lenguajes, con esto ya tenemos lo basico para poder recibir los argumentos y mostrarlos, compilemos y veamos como es su salida:
tinchicus@dbn001vrt:~/lenguajes/rust/argumento$ cargo run A B C D E F G H
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/argumento A B C D E F G H`
Pasaste 8 argumentos, ellos fueron ["A", "B", "C", "D", "E", "F", "G", "H"]
tinchicus@dbn001vrt:~/lenguajes/rust/argumento$
Para este caso pasamos ocho letras despues del run, si observamos la salida nos informa correctamente la cantidad y luego nos mostro cada uno de los informados, como pueden ver es un poco mas complicado obtener estos datos pero si puede ser mas practico para algunas practicas y nos permitira manejarlo de mejor forma, obviamente esto esta pensado para como vimos al principio informar determinadas acciones que nuestro codigo podra procesar automaticamente y darnos el resultado.
En resumen, hoy hemos visto como recibir argumentos desde la linea de comandos, lo comparamos con otros lenguajes, hemos visto quien es la encargada de esto, despues vimos un ejemplo simple para ponerlo en practica, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
