الأوامر الفرعية
واجهات CLI منظمة
الأوامر الفرعية درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
ما الأوامر الفرعية؟
تتيح الأوامر الفرعية لملف تنفيذي واحد توفير عدة إجراءات، مثل git commit وgit push.
- لكل أمر فرعي وسائطه الخاصة
- تتوسع البنية مع نمو واجهة CLI الخاصة بك
تمثّل clap هذه الأوامر باستخدام قيم Command متداخلة.
إضافة أمر فرعي
أرفق أمرًا فرعيًا باستخدام .subcommand(). ويصبح الأمر الأب موزّعًا للأوامر.
use clap::Command;
fn main() {
Command::new("todo")
.subcommand(Command::new("add"))
.subcommand(Command::new("list"))
.get_matches();
}مطابقة الأمر الفرعي المحدد
بعد التحليل، تخبرك subcommand() بالابن الذي نُفّذ. طابِق اسمه لتوزيع التنفيذ.
use clap::Command;
fn main() {
let m = Command::new("todo")
.subcommand(Command::new("add"))
.subcommand(Command::new("list"))
.get_matches();
match m.subcommand() {
Some(("add", _)) => println!("adding"),
Some(("list", _)) => println!("listing"),
_ => println!("no subcommand"),
}
}الوسائط داخل أمر فرعي
يحمل الأمر الفرعي وسائطه الخاصة. يأخذ الأمر add أدناه وصفًا لمهمة.
use clap::{Command, Arg};
fn main() {
Command::new("todo")
.subcommand(
Command::new("add")
.arg(Arg::new("task").required(true))
)
.get_matches();
}قراءة وسائط الأمر الفرعي
العنصر الثاني في الزوج هو ArgMatches الفرعي. استخرج القيم منه كما تفعل في المستوى الأعلى.
use clap::{Command, Arg};
fn main() {
let m = Command::new("todo")
.subcommand(Command::new("add").arg(Arg::new("task")))
.get_matches();
if let Some(("add", sub)) = m.subcommand() {
let task = sub.get_one::<String>("task").unwrap();
println!("add: {}", task);
}
}اشتراط وجود أمر فرعي
استخدم subcommand_required(true) لكي تطبع ثنائية البرنامج العارية صفحة المساعدة بدلًا من ألا تفعل شيئًا.
use clap::Command;
fn main() {
Command::new("todo")
.subcommand_required(true)
.arg_required_else_help(true)
.subcommand(Command::new("list"))
.get_matches();
}نمذجة التوزيع في Rust العادية
جوهر واجهة CLI التي تستخدم أوامر فرعية هو المطابقة مع سلسلة نصية. يعكس هذا المثال القابل للتشغيل منطق التوزيع ذلك.
fn main() {
let cmd = "add";
let task = "Buy milk";
match cmd {
"add" => println!("Added: {}", task),
"list" => println!("Listing tasks"),
other => println!("Unknown command: {}", other),
}
}الأوامر الفرعية المتداخلة
يمكن للأوامر الفرعية أن تحتوي بدورها على أوامر فرعية، مثل cargo build --release مقارنةً بالأشجار الأعمق. ما عليك سوى تداخل المزيد من استدعاءات .subcommand().
use clap::Command;
fn main() {
Command::new("app")
.subcommand(
Command::new("config")
.subcommand(Command::new("get"))
.subcommand(Command::new("set"))
)
.get_matches();
}مساعدة لكل أمر فرعي
يحصل كل أمر فرعي على صفحة --help الخاصة به. أضف سلسلة about لوصفه.
use clap::Command;
fn main() {
Command::new("todo")
.subcommand(
Command::new("add").about("Add a new task")
)
.get_matches();
}الأسماء المستعارة
وفّر للمستخدمين اختصارات باستخدام visible_alias. والآن يعمل ls كما يعمل list.
use clap::Command;
fn main() {
Command::new("todo")
.subcommand(
Command::new("list").visible_alias("ls")
)
.get_matches();
}إرجاع رموز الخروج
تشير واجهة CLI المصقولة إلى النجاح أو الفشل. أرجع رمزًا غير صفري من أمر فرعي باستخدام std::process::exit، أو أرجع Result من main.
fn main() {
let success = true;
if !success {
std::process::exit(1);
}
println!("ok");
}اختبار سريع
اختبر فهمك للأوامر الفرعية.
مراجعة
يمكنك الآن بناء واجهات CLI منظّمة باستخدام الأوامر الفرعية:
- أضف أبناءً باستخدام
.subcommand() - وزّع التنفيذ عبر مطابقة
m.subcommand() - لكل أمر فرعي وسائطه وصفحة المساعدة الخاصة به
- استخدم
subcommand_requiredوالأسماء المستعارة لتحسين الواجهة
التالي: تحوّل واجهة derive API البُنى إلى محللات للوسائط.
الأسئلة الشائعة
هل درس «الأوامر الفرعية» مجاني؟
نعم — نص درس «الأوامر الفرعية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
ماذا ستتعلم في «الأوامر الفرعية»؟
واجهات CLI منظمة تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الأوامر الفرعية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات clap
- الأوامر الفرعية
- واجهة Derive البرمجية
- التحقق والتعليمات