Clap para Rust: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es Clap y para qué sirve?

\n\n

Clap (Command Line Argument Parser) es una biblioteca potente, rápida y conveniente para analizar argumentos de línea de comandos en el lenguaje Rust. Permite a los desarrolladores definir fácilmente qué argumentos, banderas, opciones y subcomandos debe aceptar su aplicación, generar automáticamente ayuda (--help), validar tipos de datos y manejar errores de entrada.

\n\n

¿Para qué sirve Clap? En lugar de analizar manualmente std::env::args() y escribir decenas de líneas de código para la validación, Clap hace todo el trabajo por usted. Simplemente describe la estructura de su CLI, y la biblioteca se encarga del análisis, la generación de mensajes de error y el formato de las sugerencias. Clap soporta:

\n
    \n
  • Argumentos posicionales (obligatorios y opcionales).
  • \n
  • Opciones nombradas (banderas) con nombres cortos y largos.
  • \n
  • Subcomandos (como en git commit).
  • \n
  • Autocompletado para shells (bash, zsh, fish, PowerShell).
  • \n
  • Validación de valores, valores por defecto, valores múltiples y mucho más.
  • \n
\n\n

Clap es el estándar de facto para crear aplicaciones CLI en el ecosistema Rust. Se utiliza en proyectos conocidos como cargo, ripgrep (rg), fd y muchos otros.

\n\n

Instalación

\n\n

Clap es una biblioteca para Rust, por lo que se instala a través del gestor de paquetes cargo. Agregue la siguiente línea a su archivo Cargo.toml:

\n\n
[dependencies]\nclap = { version = "4.5", features = ["derive"] }
\n\n

Recomendamos usar macros derive (característica derive), ya que es la forma más moderna y conveniente de trabajar con Clap. Si solo necesita la funcionalidad básica sin derive, puede escribir:

\n\n
[dependencies]\nclap = "4.5"
\n\n

Después de agregar la dependencia, ejecute el comando cargo build para descargar y compilar la biblioteca.

\n\n

Inicio rápido con ejemplo de código

\n\n

Vamos a crear una aplicación simple que recibe un nombre de usuario y una bandera opcional de saludo. Cree un nuevo proyecto:

\n\n
cargo new hello_clap\ncd hello_clap
\n\n

Reemplace el contenido de src/main.rs con el siguiente código:

\n\n
use clap::Parser;\n\n/// Programa simple para saludar\n#[derive(Parser)]\n#[command(name = "greeter")]\n#[command(about = "Saluda al usuario", long_about = None)]\nstruct Cli {\n    /// Nombre del usuario\n    name: String,\n\n    /// Número de veces que se repetirá el saludo\n    #[arg(short = 'c', long = "count", default_value_t = 1)]\n    count: u8,\n}\n\nfn main() {\n    let cli = Cli::parse();\n\n    for _ in 0..cli.count {\n        println!("¡Hola, {}!", cli.name);\n    }\n}
\n\n

Ahora ejecute el programa:

\n\n
cargo run -- Mundo\n# Salida: ¡Hola, Mundo!\n\ncargo run -- Mundo -c 3\n# Salida:\n# ¡Hola, Mundo!\n# ¡Hola, Mundo!\n# ¡Hola, Mundo!\n\ncargo run -- --help\n# Salida de ayuda
\n\n

Como puede ver, Clap generó automáticamente la ayuda, procesó los argumentos y realizó la validación de tipos (si pasa -c sin un número, se producirá un error).

\n\n

Métodos y funciones principales de Clap

\n\n

Veamos los métodos y atributos clave que proporciona Clap. Usaremos el enfoque con macros derive, ya que es el más popular.

\n\n

1. #[derive(Parser)]

\n

Qué hace: Convierte su estructura en un analizador de línea de comandos. Es la macro principal con la que todo comienza. Implementa automáticamente el trait Parser para su estructura.

\n

Parámetros: Atributos de la estructura (#[command(...)]) y de los campos (#[arg(...)]).

\n

Ejemplo:

\n
use clap::Parser;\n\n#[derive(Parser)]\n#[command(name = "myapp")]\nstruct C                    

Recommendations