ملخص - دالة القسمة الآمنة
جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 48 من 66.
التحدي
سهلستتلقى مدخلين. المدخل الأول هو رقم يمثل المقسوم (dividend)، والمدخل الثاني هو رقم يمثل المقسوم عليه (divisor). قم بإنشاء دالة safe_divide تأخذ معاملين من نوع f64 وتعيد Result<f64, &'static str>. يجب أن تعيد الدالة Err("Cannot divide by zero") عندما يكون المقسوم عليه صفراً، وتعيد Ok مع نتيجة القسمة في الحالات الأخرى. استخدم تعبير match للتعامل مع النتيجة وطباعة المخرجات المناسبة.
المتطلبات:
- قراءة المدخل الأول (المقسوم) وإزالة المسافات البيضاء
- تحويل المدخل الأول إلى نوع
f64 - قراءة المدخل الثاني (المقسوم عليه) وإزالة المسافات البيضاء
- تحويل المدخل الثاني إلى نوع
f64 - إنشاء دالة
safe_divideتأخذ معاملين من نوعf64وتعيدResult<f64, &'static str> - داخل الدالة، تحقق مما إذا كان المقسوم عليه هو
0.0:- إذا كان نعم، أعد
Err("Cannot divide by zero") - إذا كان لا، أعد
Ok(dividend / divisor)
- إذا كان نعم، أعد
- استدعاء الدالة مع الرقمين اللذين تم تحويلهما
- استخدام تعبير
matchللتعامل مع الـResult - في حالة
Ok(value)، اطبع:Division result: [value] - في حالة
Err(error)، اطبع:Error: [error]
المدخلات:
- السطر الأول: رقم يمثل المقسوم (مثلاً:
20.0) - السطر الثاني: رقم يمثل المقسوم عليه (مثلاً:
4.0)
المخرجات:
- إذا كانت القسمة ناجحة:
Division result: [result] - إذا كانت القسمة على صفر:
Error: Cannot divide by zero
جرّب بنفسك
use std::io;
// TODO: قم بإنشاء دالة safe_divide هنا
// fn safe_divide(dividend: f64, divisor: f64) -> 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: قم باستدعاء safe_divide واستخدم match للتعامل مع Result
// اطبع المخرجات المناسبة بناءً على النتيجة
}جميع دروس Logic & Flow
1تدفق التحكم المتقدم
تعبير 'match'مطابقة قيم متعددةمطابقة النطاقاتتعبير 'if let'الحلقات التكرارية كتعبيراتمراجعة - محلل أوامر بسيط4تجميع البيانات باستخدام Structs
ما هو الـ Struct؟نظرة عامة على الـ Structsالوصول إلى حقول الـ Structالـ Structs القابلة للتعديلالـ Structs كمعاملات للدوالالـ Tuple Structsمراجعة - إنشاء Book Struct7معالجة الأخطاء باستخدام 'Result'
ما هو 'Result'؟استخدام 'match' مع 'Result'is_ok() و is_err()اختصارات: unwrap و expectعامل علامة الاستفهام '?'تحويل السلاسل النصية إلى أرقامملخص - دالة القسمة الآمنة10الـ Closures والدوال المجهولة
ما هو الـ Closure؟تعريف Closure بسيطالـ Closures مع المعاملاتالتقاط البيئة المحيطةملخص - Closure الجامع البسيط2مقدمة في الـ Vectors
ما هو الـ Vector؟إنشاء Vectorإضافة عناصر باستخدام pushالوصول إلى عناصر الـ Vectorالتكرار عبر الـ Vectorالتكرار القابل للتعديل (Mutable Iteration)إزالة العناصرمراجعة - متتبع نقاط بسيط5أزواج (المفتاح والقيمة) مع Hash Maps
ما هو Hash Map؟إنشاء Hash Mapإدراج أزواج (المفتاح والقيمة)الوصول إلى القيمالتكرار عبر Hash Mapتحديث قيمةإزالة زوجملخص - عداد الكلمات6التعامل مع غياب القيم باستخدام 'Option'
ما هو الـ 'Option'؟استخدام 'match' مع 'Option''is_some()' و 'is_none()'فك تغليف الـ 'Option'الدالة 'expect'توفير قيمة افتراضية: 'unwrap_or'مراجعة - البحث عن عنصر9شرائح الـ String والمزيد
String مقابل &strإنشاء شرائح الـ Stringالشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولى