کتابخانه‌ی استاندارد · پایه

اختیاری option

مقداری که ممکن است باشد یا نباشد، بدون پوچ و بدون عددهای جادویی مثل منفی یک.

واردسازی اختیاری
در این صفحه
  1. گونه‌ها
  2. روال‌ها

گاهی جواب یک روال «هیچ» است: جستجو چیزی پیدا نکرده یا تنظیمی تعریف نشده. برگرداندن منفی یک یا رشته‌ی تهی برای این حالت راحت است، اما بعداً فراموش می‌شود و باگ می‌سازد. اختیاری<T> این را صریح می‌کند: یا یک مقدار از گونه‌ی T دارد، یا ندارد.

اگر علاوه بر «نبودن»، دلیل شکست هم مهم است، نتیجه مناسب‌تر است.

گونه‌ها

اختیاری Option

ساختار اختیاری<T>
ساختاری که یک مقدار و یک پرچم «هست یا نیست» را کنار هم نگه می‌دارد. آن را با یک مقدار یا هیچ مقدار بسازید تا دو فیلدش همیشه با هم جور باشند.
نامانگلیسیگونهتوضیح
valuevalueTخود مقدار. اگر present نادرست باشد، مقدار صفر گونه‌ی T است و معنایی ندارد.
presentpresentمنطقیاگر مقداری در کار باشد، درست است.
option-Option.salam
واردسازی اختیاری

روال جستجو(نام‌ها: وکتور<رشته>، دنبال: رشته): اختیاری.اختیاری<صحیح>:
    هر (ش، ن) در نام‌ها:
        اگر ن == دنبال:
            برگشت اختیاری.یک مقدار(ش)
        پایان
    پایان
    برگشت اختیاری.هیچ مقدار()
پایان

روال ریشه:
    ناپایا نام‌ها := وکتور {} برگردان وکتور<رشته>
    دیرکن نام‌ها.آزادکن()
    نام‌ها.بیفزا("علی")
    نام‌ها.بیفزا("مریم")
    ی := جستجو(نام‌ها، "مریم")
    ن := جستجو(نام‌ها، "رضا")
    سرچاپ اختیاری.دارد(ی)، اختیاری.ندارد(ی)، ی.value، ی.present
    سرچاپ اختیاری.دارد(ن)، اختیاری.ندارد(ن)
    سرچاپ اختیاری.بازکن(ی)، اختیاری.انتظار(ی، "باید پیدا می‌شد")
    سرچاپ اختیاری.یابرگردان(ن، -۱)
پایان
خروجیtrue false 1 true false true 1 1 -1

روال‌ها

یک مقدار 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