Основы 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 — локальная установка не требуется.
Все уроки этого курса
- Основы clap
- Подкоманды
- API derive
- Проверка и справка