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

is_ok() و is_err()

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

في بعض الأحيان تحتاج إلى التحقق بسرعة مما إذا كان Result يمثل نجاحاً أو فشلاً دون استخراج القيم الفعلية. توفر Rust طريقتين مريحتين لهذا الغرض: .is_ok() و .is_err().

تُرجع كلتا الطريقتين قيمة منطقية (boolean)، مما يجعلهما مثاليتين لعمليات التحقق الشرطية البسيطة. تُرجع الطريقة .is_ok() القيمة true إذا كان الـ Result هو Ok، والقيمة false إذا كان Err. تعمل الطريقة .is_err() بشكل عكسي:

let success: Result = Ok(42);
let failure: Result = Err("Something went wrong");

if success.is_ok() {
    println!("Operation succeeded!");
}

if failure.is_err() {
    println!("Operation failed!");
}

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

challenge icon

التحدي

سهل

ستتلقى مدخلين. المدخل الأول هو رقم (كسلسلة نصية)، والمدخل الثاني هو مؤشر حالة (success أو failure). قم بإنشاء Result<i32, &'static str> بناءً على الحالة. إذا كانت الحالة هي success، فقم بإنشاء Ok يحتوي على الرقم الذي تم تحليله. إذا كانت الحالة هي failure، فقم بإنشاء Err مع الرسالة "Operation failed". استخدم .is_ok() و .is_err() للتحقق من حالة النتيجة وطباعة الرسالة المناسبة.

المتطلبات:

  • اقرأ المدخل الأول (الرقم) وقم بإزالة المسافات البيضاء (trim)
  • قم بتحليل المدخل الأول إلى i32
  • اقرأ المدخل الثاني (الحالة) وقم بإزالة المسافات البيضاء (trim)
  • قم بإنشاء متغير Result<i32, &'static str>:
    • إذا كانت الحالة هي success، فقم بتعيين Ok(parsed_number)
    • إذا كانت الحالة هي failure، فقم بتعيين Err("Operation failed")
  • استخدم .is_ok() للتحقق مما إذا كانت النتيجة ناجحة:
    • إذا كانت القيمة صحيحة، اطبع: Success detected
  • استخدم .is_err() للتحقق مما إذا كانت النتيجة خطأ:
    • إذا كانت القيمة صحيحة، اطبع: Error detected

المدخلات:

  • السطر الأول: رقم (على سبيل المثال، 42)
  • السطر الثاني: إما success أو failure

المخرجات:

  • إذا كانت الحالة هي success: Success detected
  • إذا كانت الحالة هي failure: Error detected

ورقة مرجعية

توفر لغة Rust طريقتين للتحقق من حالة Result دون استخراج قيمها:

  • .is_ok() - تُرجع true إذا كان الـ Result هو Ok، و false خلاف ذلك
  • .is_err() - تُرجع true إذا كان الـ Result هو Err، و false خلاف ذلك
let success: Result<i32, &str> = Ok(42);
let failure: Result<i32, &str> = Err("Something went wrong");

if success.is_ok() {
    println!("Operation succeeded!");
}

if failure.is_err() {
    println!("Operation failed!");
}

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

جرّب بنفسك

use std::io;

fn main() {
    // قراءة المدخل الأول (رقم)
    let mut number_input = String::new();
    io::stdin().read_line(&mut number_input).expect("Failed to read line");
    let number_input = number_input.trim();
    
    // تحويل الرقم إلى i32
    let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
    
    // قراءة المدخل الثاني (الحالة)
    let mut status = String::new();
    io::stdin().read_line(&mut status).expect("Failed to read line");
    let status = status.trim();
    
    // TODO: بناءً على الحالة Result<i32, &'static str> قم بإنشاء
    // Ok(parsed_number) إذا كانت الحالة "success"، فقم بإنشاء
    // Err("Operation failed") إذا كانت الحالة "failure"، فقم بإنشاء
    
    // TODO: للتحقق من النتيجة وطباعة الرسالة المناسبة .is_err() و .is_ok() استخدم
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow