0Pricing
Learn Rust Coding · Урок

Основы clap

Разбор аргументов

«Основы clap» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.

Зачем нужен clap?

clap (анализатор аргументов командной строки) — фактический стандартный ящик для создания интерфейсов командной строки в Rust.

  • Разбирает аргументы, флаги и параметры
  • Автоматически создаёт --help и --version
  • Проверяет входные данные и сообщает об ошибках понятным образом

Без него Вам пришлось бы вручную перебирать std::env::args() и самостоятельно обрабатывать все крайние случаи.

Чтение args вручную

Прежде чем использовать clap, полезно увидеть исходный подход. std::env::args() возвращает итератор, где первым элементом является имя программы.

fn main() {
    let args: Vec<String> = std::env::args().collect();
    println!("Program: {}", args[0]);
    println!("Got {} extra arg(s)", args.len() - 1);
}

Добавление clap в Cargo.toml

Чтобы использовать clap, объявите его как зависимость. Функция derive открывает API на основе макросов.

  • cargo add clap --features derive

Этот шаг выполняется в терминале и изменяет файлы проекта, поэтому здесь мы его не выполняем.

[dependencies]
clap = { version = "4", features = ["derive"] }

API-конструктор

У clap есть два стиля. API-конструктор создаёт Command во время выполнения, объединяя вызовы методов в цепочку.

use clap::{Command, Arg};

fn main() {
    let cmd = Command::new("greet")
        .arg(Arg::new("name"));
    let matches = cmd.get_matches();
    // access values from matches
}

Позиционные аргументы

Позиционный аргумент передаётся по порядку, а не с помощью флага. Здесь name считывается непосредственно из командной строки.

  • greet Alice устанавливает для name значение Alice
use clap::{Command, Arg};

fn main() {
    let m = Command::new("greet")
        .arg(Arg::new("name").required(true))
        .get_matches();
    let name = m.get_one::<String>("name").unwrap();
    println!("Hello, {}!", name);
}

Необязательные флаги

Флаг — это логический переключатель. Используйте ArgAction::SetTrue, чтобы его наличие переключало значение bool.

  • --loud включает флаг
use clap::{Command, Arg, ArgAction};

fn main() {
    let m = Command::new("greet")
        .arg(Arg::new("loud").long("loud").action(ArgAction::SetTrue))
        .get_matches();
    let loud = m.get_flag("loud");
    println!("loud = {}", loud);
}

Параметры со значениями

Параметр принимает значение, например --count 3. Для удобства задайте ему короткое и длинное имя с помощью short и long.

use clap::{Command, Arg};

fn main() {
    let m = Command::new("greet")
        .arg(Arg::new("count").short('c').long("count"))
        .get_matches();
    if let Some(c) = m.get_one::<String>("count") {
        println!("count = {}", c);
    }
}

Значения по умолчанию

Задайте аргументу значение по умолчанию с помощью default_value, чтобы пользователи могли его не указывать.

  • Если --count отсутствует, ему присваивается значение 1
use clap::{Command, Arg};

fn main() {
    let m = Command::new("greet")
        .arg(Arg::new("count").long("count").default_value("1"))
        .get_matches();
    let count = m.get_one::<String>("count").unwrap();
    println!("count = {}", count);
}

Моделирование результата

Даже без установленного clap мы можем смоделировать, как выглядят разобранные значения. Ниже приведён пример на обычном Rust, показывающий логику, которую clap выполняет за нас.

fn main() {
    let name = "Alice";
    let count: u32 = 3;
    for _ in 0..count {
        println!("Hello, {}!", name);
    }
}

Автоматически создаваемая справка

clap бесплатно создаёт --help на основе метаданных аргументов. Добавьте строки about и help, чтобы сделать справку полезной.

use clap::{Command, Arg};

fn main() {
    Command::new("greet")
        .about("Greets a person")
        .arg(Arg::new("name").help("Who to greet"))
        .get_matches();
}

Флаг версии

Задайте версию один раз, и clap подключит --version. Макрос crate_version! получает её из Cargo.toml.

use clap::Command;

fn main() {
    Command::new("greet")
        .version("1.0.0")
        .get_matches();
}

Быстрая проверка

Проверьте, насколько хорошо Вы усвоили основы clap.

Повторение

Вы изучили основы clap:

  • Добавление с функцией derive
  • API-конструктор использует Command и Arg
  • Позиционные аргументы зависят от порядка, флаги используют SetTrue, а параметры принимают значения
  • default_value задаёт значения по умолчанию
  • --help и --version создаются автоматически

Далее Вы научитесь структурировать более крупные CLI с помощью подкоманд.

Часто задаваемые вопросы

Урок «Основы clap» бесплатный?

Да — полный текст урока «Основы clap» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.

Чему я научусь в уроке «Основы clap»?

Разбор аргументов Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn Rust Coding?

Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Основы clap»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn Rust Coding?

Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы clap
  2. Подкоманды
  3. API derive
  4. Проверка и справка
← Назад к Learn Rust Coding