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