اختیاری option
مقداری که ممکن است باشد یا نباشد، بدون پوچ و بدون عددهای جادویی مثل منفی یک.
واردسازی اختیاری
گاهی جواب یک روال «هیچ» است: جستجو چیزی پیدا نکرده یا تنظیمی تعریف نشده. برگرداندن منفی یک یا رشتهی تهی برای این حالت راحت است، اما بعداً فراموش میشود و باگ میسازد. اختیاری<T> این را صریح میکند: یا یک مقدار از گونهی T دارد، یا ندارد.
اگر علاوه بر «نبودن»، دلیل شکست هم مهم است، نتیجه مناسبتر است.
گونهها
اختیاری Option
ساختار اختیاری<T>یک مقدار یا هیچ مقدار بسازید تا دو فیلدش همیشه با هم جور باشند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| value | value | T | خود مقدار. اگر present نادرست باشد، مقدار صفر گونهی T است و معنایی ندارد. |
| present | present | منطقی | اگر مقداری در کار باشد، درست است. |
واردسازی اختیاری
روال جستجو(نامها: وکتور<رشته>، دنبال: رشته): اختیاری.اختیاری<صحیح>:
هر (ش، ن) در نامها:
اگر ن == دنبال:
برگشت اختیاری.یک مقدار(ش)
پایان
پایان
برگشت اختیاری.هیچ مقدار()
پایان
روال ریشه:
ناپایا نامها := وکتور {} برگردان وکتور<رشته>
دیرکن نامها.آزادکن()
نامها.بیفزا("علی")
نامها.بیفزا("مریم")
ی := جستجو(نامها، "مریم")
ن := جستجو(نامها، "رضا")
سرچاپ اختیاری.دارد(ی)، اختیاری.ندارد(ی)، ی.value، ی.present
سرچاپ اختیاری.دارد(ن)، اختیاری.ندارد(ن)
سرچاپ اختیاری.بازکن(ی)، اختیاری.انتظار(ی، "باید پیدا میشد")
سرچاپ اختیاری.یابرگردان(ن، -۱)
پایانروالها
یک مقدار Some
روال یک مقدار<T>(x: T): اختیاری<T>نمونهی این مورد همراه با موارد بالاتر آمده است: option-Option.salam
هیچ مقدار None
روال هیچ مقدار<T>(): اختیاری<T>T از جایی که مقدار به کار میرود، مثلاً گونهی برگشتی روال، معلوم میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: option-Option.salam
دارد IsSome
روال دارد<T>(o: اختیاری<T>): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: option-Option.salam
ندارد IsNone
روال ندارد<T>(o: اختیاری<T>): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: option-Option.salam
یابرگردان UnwrapOr
روال یابرگردان<T>(o: اختیاری<T>، fallback: T): Tنمونهی این مورد همراه با موارد بالاتر آمده است: option-Option.salam
بازکن Unwrap
روال بازکن<T>(o: اختیاری<T>): Tنمونهی این مورد همراه با موارد بالاتر آمده است: option-Option.salam
انتظار Expect
روال انتظار<T>(o: اختیاری<T>، msg: رشته): Tبازکن، ولی اگر خالی باشد با پیامی که خودتان دادهاید متوقف میشود؛ پیام خوب، پیدا کردن مشکل را آسان میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: option-Option.salam