السلطان
  1. الرئيسية
  2. الأمثلة
  3. الأخطاء

العمليات القابلة للفشل ترجع `نتيجة`، وكل حالة خطأ قيمة لها نوع

errors/results.sn
// العمليات القابلة للفشل ترجع `نتيجة`، وكل حالة خطأ قيمة لها نوع.
استورد std.io.println;
استورد std.text.number;

عرف حلل_أو_أبلغ(النص: نص): عدد {
    طابق حلل_عدد(&النص) مع
    | نتيجة.نجح(القيمة) -> { أرجع القيمة; }
    | نتيجة.خطأ(خطأ_تحليل_عدد.نص_فارغ) -> { اطبع_سطر("مدخل فارغ"); }
    | نتيجة.خطأ(خطأ_تحليل_عدد.رقم_غير_صالح(_)) -> { اطبع_سطر("ليس عددا"); }
    | نتيجة.خطأ(_) -> { اطبع_سطر("خارج النطاق"); };
    أرجع 0;
}

عرف اقسم_بأمان(اليسار: عدد, اليمين: عدد): نتيجة عدد, نص {
    إذا (اليمين == 0) { أرجع نتيجة.خطأ("قسمة على صفر"); };
    أرجع نتيجة.نجح(اليسار / اليمين);
}

عرف الرئيسية(): عدد {
    اطبع_سطر(عدد_إلى_نص(حلل_أو_أبلغ("1234")));
    اطبع_سطر(عدد_إلى_نص(حلل_أو_أبلغ("-56")));
    حلل_أو_أبلغ("12x");
    حلل_أو_أبلغ("");
    طابق اقسم_بأمان(84, 2) مع
    | نتيجة.نجح(القيمة) -> { اطبع_سطر(عدد_إلى_نص(القيمة)); }
    | نتيجة.خطأ(الرسالة) -> { اطبع_سطر(الرسالة); };
    طابق اقسم_بأمان(1, 0) مع
    | نتيجة.نجح(القيمة) -> { اطبع_سطر(عدد_إلى_نص(القيمة)); }
    | نتيجة.خطأ(الرسالة) -> { اطبع_سطر(الرسالة); };
    أرجع 0;
}

التشغيل

بالمفسر، دون ترجمة:

./build/sultanc run examples/ar/errors/results.sn

أو ترجمه إلى ملف تنفيذي:

./build/sultanc examples/ar/errors/results.sn -o build/example && ./build/example

المصدر على GitHub   كل الأمثلة