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

نتیجه result

برگرداندن «یا مقدار درست یا خطا» از یک روال، به‌جای استثنا.

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

سلام استثنا ندارد. روالی که ممکن است شکست بخورد، به‌جای پرتاب خطا یک نتیجه برمی‌گرداند: یا موفق همراه با مقدار، یا خطا همراه با توضیح مشکل. صدازننده با همخوان هر دو حالت را بررسی می‌کند و مترجم نمی‌گذارد یکی از قلم بیفتد.

درون روالی که خودش نتیجه برمی‌گرداند، عملگر ? کار را کوتاه می‌کند: پس از یک فراخوانی، مقدار درست را بیرون می‌کشد و اگر خطا بود، همان خطا را بی‌درنگ برمی‌گرداند. درس جداشمارها این الگو را قدم‌به‌قدم توضیح می‌دهد.

گونه‌ها

نتیجه Result

جداشمار نتیجه<T، E>:
    موفق(value: T)
    خطا(error: E)
پایان
جداشماری عام با دو حالت. T گونه‌ی مقدار درست است و E گونه‌ی خطا، که بیشتر وقت‌ها رشته است. مقدارش را با نتیجه.نتیجه.موفق(...) یا نتیجه.نتیجه.خطا(...) بسازید.
نامانگلیسیگونهتوضیح
موفقOk(value: T)کار درست انجام شده و مقدارش در value است.
خطاErr(error: E)کار انجام نشده و توضیح مشکل در error است.
result-Result.salam
واردسازی نتیجه

روال سن(م: رشته): نتیجه.نتیجه<صحیح، رشته>:
    ع := م.به صحیح()
    اگر ع <= ۰ یا ع > ۱۵۰:
        برگشت نتیجه.نتیجه.خطا("سن نامعتبر: " + م)
    پایان
    برگشت نتیجه.نتیجه.موفق(ع)
پایان

روال ریشه:
    هر م در ["۳۰"، "۲۰۰"]:
        ن := سن(م)
        سرچاپ همخوان ن:
            موفق(س) => "سن پذیرفته شد: " + س
            خطا(پیام) => پیام
        پایان
    پایان
پایان
خروجیسن پذیرفته شد: 30 سن نامعتبر: ۲۰۰

روال‌ها

موفق است IsOk

روال موفق است<T، E>(r: نتیجه<T، E>): منطقی
اگر نتیجه موفق باشد، درست برمی‌گرداند.
result-IsOk.salam
واردسازی نتیجه

روال تقسیم(الف: صحیح، ب: صحیح): نتیجه.نتیجه<صحیح، رشته>:
    اگر ب == ۰:
        برگشت نتیجه.نتیجه.خطا("تقسیم بر صفر")
    پایان
    برگشت نتیجه.نتیجه.موفق(الف / ب)
پایان

روال ریشه:
    درست‌ها := تقسیم(۹، ۳)
    غلط := تقسیم(۱، ۰)
    سرچاپ نتیجه.موفق است(درست‌ها)، نتیجه.خطا است(درست‌ها)
    سرچاپ نتیجه.موفق است(غلط)، نتیجه.خطا است(غلط)
    سرچاپ نتیجه.با پیش فرض(درست‌ها، -۱)، نتیجه.با پیش فرض(غلط، -۱)
    سرچاپ نتیجه.انتظار(درست‌ها، "باید تقسیم می‌شد")
پایان
خروجیtrue false false true 3 -1 3

خطا است IsErr

روال خطا است<T، E>(r: نتیجه<T، E>): منطقی
اگر نتیجه خطا باشد، درست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: result-IsOk.salam

با پیش فرض UnwrapOr

روال با پیش فرض<T، E>(r: نتیجه<T، E>، fallback: T): T
اگر نتیجه موفق باشد، مقدارش را برمی‌گرداند و اگر خطا باشد، مقدار پیش‌فرضی که داده‌اید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: result-IsOk.salam

انتظار Expect

روال انتظار<T، E>(r: نتیجه<T، E>، msg: رشته): T
مقدار نتیجه‌ی موفق را برمی‌گرداند. اگر نتیجه خطا باشد، برنامه با پیامی که داده‌اید متوقف می‌شود؛ پس فقط جایی به کارش ببرید که مطمئنید خطا ممکن نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: result-IsOk.salam