درک اتحادیه های خطا در زیگ: رسیدگی به خطای ایمن و صریح
زیگ استثنائات را با چیزی بهتر جایگزین می کند: اتحادیه های خطابشر آنها بدون مخفی کردن جریان کنترل ، به شما خطای خطای ایمن ریز و از نوع را می دهند. در این مقاله ، ما چگونگی کار اتحادیه های خطا ، چه زمانی از آنها استفاده می کنیم و چگونه آنها کد شما را ایمن تر و واضح تر می کنند ، تجزیه خواهیم کرد.
مرحله 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 انواع خطای بررسی شده زمان را کامپایل کنید
منفی:
در صورت سوء استفاده (می توان با الگوهای کاهش یافت)
مبتدیان ممکن است همه موارد خطا را فراموش کنند
از آثار خودکار پشته مانند استثنائات پشتیبانی نمی کند
خلاصه
اتحادیه های خطا قدرت اصلی زیگ هستند و قدرت رسیدگی به خطا را با ایمنی طراحی صریح مخلوط می کنند. آنها به شما در نوشتن کد قابل پیش بینی و قابل پیش بینی کمک می کنند – هیچ جادویی ، فقط ارزش. این که آیا شما در حال نوشتن ابزارهای سیستم هستید یا برنامه های سطح بالا ، تسلط بر اتحادیه های خطا باعث می شود کد زیگ شما قوی تر و قوی تر شود.
اگر این مفید بود ، می توانید از من نیز از من حمایت کنید: یک قهوه برای من بخرید