Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

استخدام 'match' مع 'Result'

جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 43 من 66.

الآن بعد أن فهمت ما هو الـ Result، دعنا نتعلم الطريقة الأكثر صراحة وقوة للتعامل مع حالتي النجاح والفشل: باستخدام تعبير match.

تماماً كما هو الحال مع Option، فإن match تجبرك على التعامل مع كلا المتغيرين لـ Result. تقوم بإنشاء ذراع لـ Ok للتعامل مع النجاح، وذراع أخرى لـ Err للتعامل مع الفشل:

let result = divide(10, 2);

match result {
    Ok(value) => println!("Division successful: {}", value),
    Err(error) => println!("Division failed: {}", error),
}

عندما يكون الـ Result هو Ok، يقوم الـ match باستخراج القيمة الناجحة وينفذ الذراع الأول. وعندما يكون Err، فإنه يستخرج معلومات الخطأ وينفذ الذراع الثاني. يضمن هذا النمط عدم تجاهل أي خطأ محتمل عن طريق الخطأ.

challenge icon

التحدي

سهل

ستتلقى مدخلين. المدخل الأول هو رقم (كسلسلة نصية)، والمدخل الثاني هو رقم آخر (كسلسلة نصية). قم بإنشاء دالة تحاول قسمة الرقم الأول على الرقم الثاني وتعيد Result<f64, &'static str>. إذا كان الرقم الثاني صفراً، فقم بإرجاع Err مع الرسالة "Division by zero". بخلاف ذلك، قم بإرجاع Ok مع نتيجة القسمة. استخدم تعبير match للتعامل مع حالتي Ok و Err وطباعة الرسالة المناسبة.

المتطلبات:

  • اقرأ المدخل الأول (المقسوم) وقم بإزالة المسافات البيضاء
  • قم بتحويل المدخل الأول إلى f64
  • اقرأ المدخل الثاني (المقسوم عليه) وقم بإزالة المسافات البيضاء
  • قم بتحويل المدخل الثاني إلى f64
  • قم بإنشاء دالة تأخذ معاملين من نوع f64 وتعيد Result<f64, &'static str>
  • داخل الدالة، تحقق مما إذا كان المقسوم عليه هو 0.0:
    • إذا كان نعم، فقم بإرجاع Err("Division by zero")
    • إذا كان لا، فقم بإرجاع Ok(dividend / divisor)
  • استدعِ الدالة مع الرقمين اللذين تم تحويلهما
  • استخدم تعبير match للتعامل مع الـ Result
  • في فرع Ok(value)، اطبع: Result: [value]
  • في فرع Err(error)، اطبع: Error: [error]

المدخلات:

  • السطر الأول: رقم يمثل المقسوم (مثلاً، 10.0)
  • السطر الثاني: رقم يمثل المقسوم عليه (مثلاً، 2.0)

المخرجات:

  • إذا كانت القسمة ناجحة: Result: [result]
  • إذا كانت القسمة على صفر: Error: Division by zero

ورقة مرجعية

استخدم match للتعامل مع كل من متغيري Ok و Err لـ Result:

let result = divide(10, 2);

match result {
    Ok(value) => println!("Division successful: {}", value),
    Err(error) => println!("Division failed: {}", error),
}

يجبرك تعبير match على التعامل مع كل من حالتي النجاح والفشل. عندما يكون الـ Result هو Ok، فإنه يستخرج القيمة الناجحة وينفذ الذراع الأول. وعندما يكون Err، فإنه يستخرج معلومات الخطأ وينفذ الذراع الثاني.

جرّب بنفسك

use std::io;

// TODO: أنشئ دالة القسمة الخاصة بك هنا والتي تعيد Result<f64, &'static str>


fn main() {
    // قراءة المدخل الأول (المقسوم)
    let mut dividend_input = String::new();
    io::stdin().read_line(&mut dividend_input).expect("Failed to read line");
    let dividend: f64 = dividend_input.trim().parse().expect("Invalid number");
    
    // قراءة المدخل الثاني (المقسوم عليه)
    let mut divisor_input = String::new();
    io::stdin().read_line(&mut divisor_input).expect("Failed to read line");
    let divisor: f64 = divisor_input.trim().parse().expect("Invalid number");
    
    // TODO: استدعِ دالة القسمة الخاصة بك واستخدم match للتعامل مع Result
    // اطبع "Result: [value]" في حالة Ok
    // اطبع "Error: [error]" في حالة Err
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow