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

المرحلة الثانية من نظام الأخطاء (docs/en/reference/errors.md)

العامل ؟ يمرر الخطأ إلى

errors/propagation.sn
// المرحلة الثانية من نظام الأخطاء (docs/en/reference/errors.md): العامل ؟ يمرر الخطأ إلى
// المستدعي، ومساعدات السياق تحول الأخطاء ذات الأنواع وتغلفها، والرئيسية نفسها
// ترجع نتيجة: عند الخطأ يطبع البرنامج إطار «انتهى البرنامج بخطأ» بلغته ووصف
// الخطأ، ويخرج بالرمز 1.
استورد المكتبة.أخطاء.failure;
استورد المكتبة.أخطاء.context;
استورد المكتبة.أخطاء.from_number;
استورد المكتبة.نصوص.number;
استورد المكتبة.دخ.println;
استورد المكتبة.نصوص.from_bytes;

عرف اقرأ_المنفذ(النص: نص): نتيجة عدد, فشل {
    // خطأ تحليل العدد خطأ ذو نوع؛ إلى_فشل يحوله فشلا قبل أن يمرره ؟.
    دع المنفذ: عدد = إلى_فشل(حلل_عدد(&النص), فشل_من_خطأ_تحليل_عدد)؟;
    إذا (المنفذ < 1 || المنفذ > 65535) {
        أرجع نتيجة.خطأ(فشل_بهوية(«server», «منفذ_خارج_المدى», «يجب أن يكون المنفذ بين 1 و65535»));
    };
    أرجع نتيجة.نجح(المنفذ);
}

عرف اختر_الأول(القيم: &متجه نص): اختياري نص {
    إذا ((الطول(*القيم) مثل طبيعي) == 0) { أرجع اختياري.لا_شيء(); };
    أرجع اختياري.موجود(انسخ_نص(&(*القيم)[0]));
}

// ؟ على اختيار في دالة ترجع اختيارا يمرر الغياب.
عرف أول_منفذ_مكتوب(القيم: &متجه نص): اختياري نص {
    دع الأول: نص = اختر_الأول(القيم)؟;
    أرجع اختياري.موجود(الأول);
}

عرف الرئيسية(): نتيجة عدد, فشل {
    دع القيم: متغير متجه نص = [];
    ألحق(القيم, «8080»);
    طابق أول_منفذ_مكتوب(&القيم) مع
    | اختياري.موجود(النص) -> {
        دع المنفذ: عدد = مع_سياق(اقرأ_المنفذ(النص), «أثناء بدء الخادم»)؟;
        دع تجاهل: نتيجة عدد, عدد = اطبع_سطر(عدد_إلى_نص(المنفذ));
    }
    | اختياري.لا_شيء -> { };
    أرجع نتيجة.نجح(0);
}

التشغيل

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

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

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

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

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