'is_some()' و 'is_none()'
جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 37 من 66.
في بعض الأحيان تحتاج إلى التحقق مما إذا كان Option يحتوي على قيمة دون استخراج تلك القيمة فعلياً. توفر لغة Rust طريقتين مريحتين لهذا الغرض: .is_some() و .is_none().
تُرجع كلتا الطريقتين قيمة منطقية (boolean)، مما يجعلهما مثاليين للاستخدام في شروط if:
let maybe_score = Some(85);
if maybe_score.is_some() {
println!("We have a score!");
}
if maybe_score.is_none() {
println!("No score available");
}تُرجع الطريقة .is_some() القيمة true إذا كان الـ Option يحتوي على قيمة Some، و false إذا كان None. أما الطريقة .is_none() فتعمل بطريقة عكسية - حيث تُرجع true لـ None و false لـ Some.
التحدي
سهلستتلقى رقماً كمدخل. قم بإنشاء Option<i32> يحتوي على Some(number) إذا كان الرقم موجباً، أو None إذا كان الرقم صفراً أو سالباً. استخدم .is_some() و .is_none() للتحقق من Option وطباعة الرسالة المناسبة.
المتطلبات:
- اقرأ المدخلات وقم بتحويلها إلى
i32 - قم بإنشاء متغير من نوع
Option<i32>:- إذا كان الرقم موجباً (أكبر من 0)، قم بتعيين
Some(number) - إذا كان الرقم صفراً أو سالباً، قم بتعيين
None
- إذا كان الرقم موجباً (أكبر من 0)، قم بتعيين
- استخدم
.is_some()للتحقق مما إذا كانOptionيحتوي على قيمة - إذا كانت
.is_some()تعيدtrue، اطبع:Positive number detected - استخدم
.is_none()للتحقق مما إذا كانOptionفارغاً - إذا كانت
.is_none()تعيدtrue، اطبع:No positive number
المدخلات:
- عدد صحيح واحد (على سبيل المثال،
42،0، أو-5)
المخرجات:
- إذا كان الرقم موجباً:
Positive number detected - إذا كان الرقم صفراً أو سالباً:
No positive number
ورقة مرجعية
استخدم .is_some() للتحقق مما إذا كان Option يحتوي على قيمة:
let maybe_score = Some(85);
if maybe_score.is_some() {
println!("We have a score!");
}استخدم .is_none() للتحقق مما إذا كان Option فارغاً:
if maybe_score.is_none() {
println!("No score available");
}كلتا الطريقتين تعيدان قيمًا منطقية (true أو false).
جرّب بنفسك
use std::io;
fn main() {
// قراءة المدخلات
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let number: i32 = input.trim().parse().expect("Invalid input");
// TODO: اكتب الكود الخاص بك أدناه
// بناءً على ما إذا كان الرقم موجباً Option<i32> قم بإنشاء
// وتحقق مما إذا كان يحتوي على قيمة ثم اطبع الرسالة المناسبة Option تحقق من الـ
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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الشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولى