0Pricing
Learn Rust Coding · درس

التحقق والتعليمات

واجهات CLI مصقولة

التحقق والتعليمات درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

Polishing your CLI

تتحقق واجهة سطر الأوامر (CLI) الرائعة من صحة المدخلات مبكراً وتوفر مساعدة واضحة. تدعم مكتبة clap كلاً من الخصائص ومحللات القيم.

  • رفض القيم الخاطئة برسائل ودية
  • توثيق كل وسطة (argument)

نطاقات القيم

قيّد الوسيطة الرقمية بنطاق باستخدام value_parser. ويُرفض الإدخال خارج النطاق تلقائيًا.

use clap::Parser;

#[derive(Parser)]
struct Cli {
    #[arg(long, value_parser = clap::value_parser!(u16).range(1..=65535))]
    port: u16,
}

الخيارات المعدودة

استخدم #[derive(ValueEnum)] لحصر الوسيطة في مجموعة ثابتة من السلاسل النصية.

use clap::{Parser, ValueEnum};

#[derive(Clone, ValueEnum)]
enum Mode { Fast, Safe }

#[derive(Parser)]
struct Cli {
    #[arg(long, value_enum)]
    mode: Mode,
}

دالة تحقق مخصصة

مرّر إلى value_parser دالة تُرجع Result. وتحول clap قيمة Err إلى خطأ في الاستخدام.

fn parse_even(s: &str) -> Result<u32, String> {
    let n: u32 = s.parse().map_err(|_| "not a number".to_string())?;
    if n % 2 == 0 { Ok(n) } else { Err("must be even".to_string()) }
}

تجربة منطق التحقق

دالة التحقق هي Rust عادية. شغّلها لترى كيف يعيد فحص الزوجي والفردي Ok أو Err.

fn parse_even(s: &str) -> Result<u32, String> {
    let n: u32 = s.parse().map_err(|_| "not a number".to_string())?;
    if n % 2 == 0 { Ok(n) } else { Err("must be even".to_string()) }
}

fn main() {
    println!("{:?}", parse_even("4"));
    println!("{:?}", parse_even("7"));
}

المجموعات المطلوبة والتعارضات

عبّر عن العلاقات بين الوسائط. يمنع conflicts_with استخدام رايتين غير متوافقتين معًا.

use clap::Parser;

#[derive(Parser)]
struct Cli {
    #[arg(long)]
    quiet: bool,
    #[arg(long, conflicts_with = "quiet")]
    verbose: bool,
}

نص المساعدة لكل حقل

يتحول التعليق التوثيقي الموجود فوق الحقل إلى نص المساعدة الخاص به. وهذه هي الطريقة الاصطلاحية لتوثيق الوسائط.

use clap::Parser;

#[derive(Parser)]
struct Cli {
    /// The file to process
    input: String,
}

المساعدة الطويلة مقابل القصيرة

تعرض clap ملخصًا قصيرًا عند استخدام -h والنص الكامل عند استخدام --help. افصل بينهما باستخدام #[arg(short_help, long_help)] عند الحاجة.

use clap::Parser;

#[derive(Parser)]
struct Cli {
    #[arg(long, long_help = "A detailed explanation shown only with --help")]
    flag: bool,
}

إرجاع Result من main

بالنسبة إلى أخطاء وقت التشغيل بعد التحليل، أرجع Result من main. يمرّر العامل ? الأخطاء، وتطبعها البرامج الخالية من clap مع خروج غير صفري.

fn main() -> Result<(), String> {
    let value = "42";
    let n: i32 = value.parse().map_err(|_| "bad number".to_string())?;
    println!("parsed {}", n);
    Ok(())
}

تنسيق أخطاء مخصص

تنسّق clap أخطاء الاستخدام تلقائيًا، لكن يمكنك إنشاء تنسيقك الخاص باستخدام clap::Error وcmd.error() لرسائل خاصة بالسياق.

use clap::{CommandFactory, Parser};

#[derive(Parser)]
struct Cli { value: i32 }

fn fail() {
    let mut cmd = Cli::command();
    cmd.error(clap::error::ErrorKind::ValueValidation, "value too large").exit();
}

ملخص التحقق في Rust العادية

يتمثل جوهر التحقق في واجهة CLI في فحص قيمة والإبلاغ عن خطأ واضح. إليك العملية كاملة.

fn validate_port(p: u32) -> Result<u32, String> {
    if (1..=65535).contains(&p) { Ok(p) }
    else { Err(format!("port {} out of range", p)) }
}

fn main() {
    match validate_port(8080) {
        Ok(p) => println!("using port {}", p),
        Err(e) => eprintln!("error: {}", e),
    }
}

اختبار سريع

اختبر فهمك للتحقق من الصحة والمساعدة.

مراجعة

يمكنك الآن بناء واجهات CLI مصقولة:

  • يفرض value_parser النطاقات والقواعد المخصصة
  • يحصر ValueEnum الخيارات
  • ينمذج conflicts_with الرايات غير المتوافقة
  • تتحول التعليقات التوثيقية إلى نص مساعدة
  • أرجع Result من main للتعامل مع أخطاء وقت التشغيل

بهذا تكتمل دورة clap.

الأسئلة الشائعة

هل درس «التحقق والتعليمات» مجاني؟

نعم — نص درس «التحقق والتعليمات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

ماذا ستتعلم في «التحقق والتعليمات»؟

واجهات CLI مصقولة تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟

لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «التحقق والتعليمات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟

نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات clap
  2. الأوامر الفرعية
  3. واجهة Derive البرمجية
  4. التحقق والتعليمات
← العودة إلى Learn Rust Coding