برنامه نویسی

درک اتحادیه های خطا در زیگ: رسیدگی به خطای ایمن و صریح

زیگ استثنائات را با چیزی بهتر جایگزین می کند: اتحادیه های خطابشر آنها بدون مخفی کردن جریان کنترل ، به شما خطای خطای ایمن ریز و از نوع را می دهند. در این مقاله ، ما چگونگی کار اتحادیه های خطا ، چه زمانی از آنها استفاده می کنیم و چگونه آنها کد شما را ایمن تر و واضح تر می کنند ، تجزیه خواهیم کرد.


مرحله 1: اتحادیه خطا چیست؟

اتحادیه خطا مقداری است که ممکن است نتیجه یا خطا باشد. مثل آن فکر کن Result در زنگ زدگی ، اما به زبان ساخته شده است.

نحو:

fn doThing() !i32 {
    return 42; // could also return an error
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این بدان معنی است که doThing ممکن است برگردد i32، یا یک خطا


مرحله 2: رسیدگی به اتحادیه های خطای

زیگ خطاهای رسیدگی را صریح می کند – بدون پنهان try/catchبشر شما مستقیماً با آنها سر و کار دارید.

با استفاده از try

const result = try doThing();
std.debug.print("Value: {}\n", .{result});
  • اگر doThing() موفق می شود ، result مقدار را نگه می دارد.
  • در صورت عدم موفقیت ، خطا در پشته تماس بازگردانده می شود.

با استفاده از catch

const result = doThing() catch {
    std.debug.print("Something went wrong\n", .{});
    return;
};
  • catch به شما امکان می دهد از خطاهای درون خطی بهبود یابید.

مرحله 3: تعریف خطاهای خود

شما می توانید مجموعه خطای سفارشی را تعریف کنید تا API های خود را بیان کنید:

const MyError = error{
    NotFound,
    PermissionDenied,
};

fn readFile(path: []const u8) MyError![]u8 {
    if (path.len == 0) return MyError.NotFound;
    return "file contents";
}

این دقیقاً روشن می کند که چه خطایی ممکن است عملکرد شما برگردد – بدون حدس.


مرحله 4: انتشار در مقابل هندلینگ

زیگ شما را تشویق می کند که در صورت امکان خطاها را برطرف کنید ، یا با استفاده از آنها به وضوح تبلیغ کنید tryبشر

fn wrapper() !void {
    const contents = try readFile("config.toml");
    std.debug.print("{s}\n", .{contents});
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این باعث می شود که wrapper همچنین ممکن است شکست بخورد.


✅ جوانب مثبت و ❌ منفی اتحادیه های خطا

✅ جوانب مثبت:

  • 🔍 رسیدگی به خطای پاک و صریح
  • stee دارای استثنا نیست – جریان کنترل قابل مشاهده است
  • types انواع خطای بررسی شده زمان را کامپایل کنید

❌ منفی:

  • 📜 در صورت سوء استفاده (می توان با الگوهای کاهش یافت)
  • 💥 مبتدیان ممکن است همه موارد خطا را فراموش کنند
  • ⛔ از آثار خودکار پشته مانند استثنائات پشتیبانی نمی کند

خلاصه

اتحادیه های خطا قدرت اصلی زیگ هستند و قدرت رسیدگی به خطا را با ایمنی طراحی صریح مخلوط می کنند. آنها به شما در نوشتن کد قابل پیش بینی و قابل پیش بینی کمک می کنند – هیچ جادویی ، فقط ارزش. این که آیا شما در حال نوشتن ابزارهای سیستم هستید یا برنامه های سطح بالا ، تسلط بر اتحادیه های خطا باعث می شود کد زیگ شما قوی تر و قوی تر شود.


اگر این مفید بود ، می توانید از من نیز از من حمایت کنید: یک قهوه برای من بخرید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا