إطار CLI لـ Rust: Clap — أداة قوية ومريحة لإنشاء تطبيقات وحدة التحكم

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هو Clap ولماذا هو مطلوب؟



في عالم البرمجة النظامية، أثبتت Rust نفسها كلغة تجمع بين أداء C/C++ وأمان الذاكرة. ومع ذلك، عند إنشاء أدوات وحدة التحكم، غالبًا ما يواجه المطورون المهمة الروتينية لتحليل وسائط سطر الأوامر. مكتبة Clap (محلل وسائط سطر الأوامر) هي إطار CLI الأكثر شهرة ووظيفية لـ Rust، والتي تتولى جميع أعمال معالجة العلامات والخيارات والأوامر الفرعية.



يتيح Clap:

  • توليد المساعدة (--help) والإصدار (--version) تلقائيًا؛
  • معالجة الوسائط الموضعية والخيارات المسماة والعلامات؛
  • إنشاء أوامر فرعية متداخلة (كما في git أو cargo)؛
  • التحقق من صحة أنواع البيانات والتحقق من إلزامية الوسائط؛
  • العمل مع الإكمال التلقائي لأغلفة Bash وZsh وFish وPowerShell.


بفضل الماكرو القوي derive وواجهة برمجة التطبيقات التصريحية، يقلل Clap حجم الكود بمقدار 5–10 مرات مقارنة بالتحليل اليدوي. تدعم المكتبة كلاً من الأدوات البسيطة والواجهات المعقدة التي تحتوي على عشرات الخيارات.



تثبيت Clap في مشروع Rust



أضف التبعية إلى Cargo.toml:



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


العلامة features = ["derive"] تُفعّل دعم الماكرو — هذه هي الطريقة الموصى بها لمعظم المشاريع. للأدوات البسيطة، يمكن استخدام واجهة برمجة التطبيقات builder فقط (بدون derive).



مثال 1: محلل بسيط باستخدام ماكرو derive



لننشئ أداة تقبل اسم مستخدم وعلامة تحية اختيارية:



use clap::Parser;

#[derive(Parser)]#[command(name = "greet")]#[command(about = "تحية بسيطة", long_about = None)]struct Cli { /// اسم المستخدم name: String,

/// عرض التحية بأحرف كبيرة #[arg(short, long)] uppercase: bool,}

fn main() { let cli = Cli::parse();

let greeting = format!("مرحبًا، {}!", cli.name); if cli.uppercase { println!("{}", greeting.to_uppercase()); } else { println!("{}", greeting); }}


قم بتشغيل البرنامج:



$ cargo run -- عالممرحبًا، عالم!

$ cargo run -- عالم --uppercaseمرحبًا، عالم!

$ cargo run -- --help# مساعدة مولدة تلقائيًا


مثال 2: خيارات مع أنواع وقيم افتراضية



يقوم Clap تلقائيًا بتحويل السلاسل إلى الأنواع المطلوبة (أرقام، تعدادات، تواريخ). دعنا نضيف خيارًا لتحديد عدد التكرارات:



use clap::Parser;

#[derive(Parser)]#[command(name = "repeat")]struct Cli { /// النص المراد تكراره text: String,

/// عدد التكرارات (الافتراضي 1) #[arg(short, long, default_value_t = 1)] count: u32,}

fn main() { let cli = Cli::parse(); for _ in 0..cli.count { println!("{}", cli.text); }}


يمكنك الآن تنفيذ:



$ cargo run -- "Rust" -c 3RustRustRust


مثال 3: الأوامر الفرعية (subcommands) — كما في Git



لننشئ أداة صغيرة لإدارة المهام (قائمة مهام) مع أوامر add و list و done:



use clap::{Parser, Subcommand};

#[derive(Parser)]#[command(name = "todo")]#[command(about = "مدير المهام")]struct Cli { #[command(subcommand)] command: Commands,}

#[derive(Subcommand)]enum Commands { /// إضافة مهمة جديدة Add { /// نص المهمة task: String, }, /// عرض جميع المهام List, /// وضع علامة على المهمة كمكتملة Done { /// معرف المهمة id: u32, },}

fn main() { let cli = Cli::parse();

match &cli.comman

توصيات