اعمال استثنا برای رسیدگی به اشتباهات در اکسیر

  • 2022-03-25

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

به نظر می رسد که موضوع یک منبع تکراری از بحث است, به عنوان مارتین گاوسبی جامعه پرسید که چگونه برای مقابله با اشتباهات انتظار می رود و غیر منتظره, و معلوم مایکا Mus موسکا ارما در حال حاضر معرفی یک روش هوشمندانه برای رسیدگی به اشتباهات که توسط اندره ای لیپاردی در کتابخانه نعناع و ردیکس مورد استفاده قرار گرفت. او توییتی دفاع که استثنا یک مقدار بازگشتی بزرگ, بنابراین اجازه دهید حفاری در برای پیدا کردن چگونه است که کار می کند.

  • تمام خطاهای احتمالی یک تابع را در یک استثنا سفارشی قرار دهید;
  • اهرم استثنا مکانیسم پیام برای جلوگیری از جفت;
  • اجازه دهید تماس گیرنده تصمیم بگیرد که خطا انتظار می رود یا نه;

مثال کد:

معاونت استثنا خطا/برنامه من/اشتباه.سابق

معاونت زمینه/برنامه من/حساب.سابق

تماس گیرنده زندگی می کنند, کنترل, و غیره

شما ممکن است درخواست, چرا که نه فقط بازگشت و یا حتی ? اول از همه, سعی کنید برای جلوگیری از بازگشت یک رشته به دلیل است که تطبیق الگوی پیچیده و یک تغییر ساده سیستم خود را شکستن, از سوی دیگر بازگشت یک اتم کاملا خوب است زمانی که تابع خود را نیازی به مقابله با خطاها و پیام های مختلف. اما معمولا توابع متنی یا پیچیده نتایج بیشتری نسبت به یک خطای احتمالی دارند و علاوه بر این معمولا توسط لایه دیگری مصرف می شوند که باید این خطا را به بازخورد مفید برای کاربر تبدیل کنند.

برخی از سناریوها و مزایای عملی

  • در نماهای زنده یا کنترلرها معمولا باید یک پیام فلش نمایش دهید تا کاربر بداند چه اتفاقی می افتد. اگر شما بازگشت این بدان معناست که شما نیاز به الگوی مطابقت با تمام اتم های ممکن برای ایجاد پیام مناسب. با استثنا, همه شما باید انجام دهید این است برای پیاده سازی فرمت _ررر در یک محل واحد و پاسخ استثنا.پیام(خطا) .
  • اگر که همان تابع تغییر اتم فعلی و یا اضافه می کند مقدار بازگشتی دیگر, شما باید از طریق تمام مکان هایی که که تابع نامیده می شود برای به روز رسانی بازی الگوی رفتن. این مستعد خطا است زیرا ممکن است چیزی را از دست بدهید و کامپایلر در اینجا کمکی نمی کند
  • پیام های به اشتراک گذاشته شده و مورد استفاده مجدد قرار. فکر می کنم در مورد خطاهای عمومی مانند مجوز, خطاهای سیستم, و دیگران. این خطاها پیام مشابهی را در همه جا تولید می کنند که نیاز به تکرار تطابق الگو و تعریف پیام در مکان های مختلف دارد. این می تواند با تکیه بر مکانیسم پیام تجویز حل شود.
  • انسجام. پیاده سازی فرمت_پیغام/1 نزدیک به جایی که خطا اتفاق می افتد قابلیت نگهداری را بهبود می بخشد.
  • شفافیت. با داشتن ماژول و یک دلیل در ساختار خطا, شما منشا این خطا را خواهید داشت, از جایی که ناشی می شود. ردیابی پشته زمانی که خطا انتظار می رود کمک نمی کند و مطرح نمی شود.

اما در مورد این چه می شودمجموعه در وسط خطا?

Regular apps, especially web apps, depends a lot on Changesets to return feedback to users but also has to deal with complementary errors on more complex scenarios where returning just an invalid changeset isn’t enough. Suppose a function that deals with form submission but also has to call an external service, check permissions, or deal with that crazy legacy rule. Many different errors or situations may happen: the changeset may be invalid, an external service may be offline, or maybe an error happened but the changeset is valid and needs to be updated to reflect changes on the template. That would require more complex return values like adding more values on the tagged tuple, a struct to store all values, or something. A better approach is to return either > , >یا هر چیزی که لازم است. همه شما نیاز خواهد شد در ساختار استثنا محصور. با بازگشت, شما هم می توانید نمایش خطاهای درون خطی در فرم اگر مجموعه تغییرات معتبر است, استثنا پاسخ.پیام (خطا) برای دادن بازخورد مناسب برای کاربر و یا به روز رسانی تغییرات در حالی که دادن بازخورد برای کاربر در مورد خطای دیگر. بسیار انعطاف پذیر و ساده است.

خطا بخشی از برنامه شماست

شما به یک میاپ درصد عمومی محدود نمی شوید.خطا, در واقع شما می توانید خطاهای صریح و روشن مانند پیاده سازی %برنامه کاربردی میاپ.سرویس به جای %میاپ.خطا در غنی سازی خطاهای خاص دامنه برنامه شما. برخی از مزایای شامل اعمال نفوذ تطبیق الگوی برای جریان کنترل, خطاهای صریح و روشن در هنگام بالا بردن و یا خواندن کد خود را, و در محفظهای قرار دادن ابرداده در مورد خطاهای خاص, اما به کسانی که منافع محدود نمی.

خطا انتظار می رود یا نه?

این به تماس گیرنده بستگی دارد زیرا معمولا به وضعیت فعلی گره خورده است. فرض کنید یک تابع است که محاسبه چیزی بر اساس مجموعه ای از داده ها در صورتی که تابع نامیده می شود توسط یک کنترل کننده و یا زندگی می کنند احتمالا کاربر در حال انتظار برای انتقادات و پیشنهادات, اما اگر که تابع نامیده می شود توسط یک فرایند کالاهای کالا (بیشتر یک فرایند پس زمینه) هیچ دلیلی برای در حال حاضر یک پیام بنابراین بالا بردن به زور روند به راه اندازی مجدد ممکن است بهترین روش وجود دارد. به اختصار, اجازه تماس گیرنده تصمیم گیری:

  • اگر خطا انتظار می رود و یا نیاز به نمایش بازخورد, استثنا پاسخ.پیام(خطا)
  • اگر خطا انتظار نمی رود و یا هیچ راهی برای بازیابی از که وجود دارد, پاسخ افزایش خطا

به یاد داشته باشید که خطا در واقع یک استثنا است, بنابراین بالا بردن ساده به عنوان فراخوانی خطای افزایش است , اما به یاد داشته باشید برای جلوگیری از استفاده سعی کنید/نجات برای جریان کنترل و ذخیره که برای شرایطی که تابع به پایان خط رسیده است و هیچ چیز دیگری به انجام مگر اینکه بالا بردن وجود دارد.

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.