نه فقط کد دیگران
نه فقط کد دیگران
ممکن است برخی از شما در این مرحله شک داشته باشید که آیا این یک معامله به اندازه ای است که من می گویم. شاید اگر اصلاً با ابزارهای واقعاً شخص ثالث تعامل نداشته باشید. شاید شما از API های نسخه شده استفاده می کنید یا چنین کتابخانه هایی را خود میزبانی می کنید تا رفتار آن از زیر شما تغییر نکند.
بنابراین، به این فکر کنید: آیا واقعاً می توانید به ابزارهایی که از نظر تئوری کنترل می کنید (در پایه کد خود) اعتماد کنید؟
این طور فکر کنید: اکثر ما موافقیم که حداقل تا حدی باید عملکردهای داخلی خود را با برخی بررسی های دفاعی روی پارامترهای ورودی بسازیم تا مشکلات غیر منتظره را کاهش دهیم/جلوگیری کنیم.
اعتماد بیش از حد به ورودی:
function addNumbers(x,y) {
// + is overloaded with coercion to also be
// string concatenation, so this operation
// isn’t strictly safe depending on what’s
// passed in.
return x + y;
}
addNumbers(21, 21) ; //42
addNumbers(21, ”21”) ; //”2121”
دفاع در برابر ورودی نامعتبر:
function addNumbers(x,y) {
// ensure numerical input
if (typeof x != “number” || typeof y != “number”) {
throw Error( “Bad parameters” );
}
// if we get here, + will safely do numeric addition
return x + y;
}
addNumbers(21, 21) ; //42
addNumbers(21, ”21”) ; // Erorr : “ Bad parameter”
یا شاید هنوز امن اما دوستانه تر:
function addNumbers(x,y) {
// ensure numerical input
x = Number( x );
y = Number( y );
// + will safely do numeric addition
return x + y;
}
addNumbers( 21, 21 ); // 42
addNumbers( 21, “21” ); // 42
با این وجود، این نوع بررسی ها/نرمال سازی ها در ورودی های تابع بسیار رایج است، حتی با کدهایی که از لحاظ نظری کاملاً به آن اعتماد داریم. به نوعی خام، مانند معادل برنامه نویسی اصل ژئوپلیتیک «Trust But Verify» است.
بنابراین، آیا منطقی نیست که ما باید همین کار را در مورد ترکیب فراخوانهای تابع async انجام دهیم، نه فقط با کدهای خارجی، بلکه حتی با کدهایی که میدانیم عموماً «تحت کنترل خودمان» هستند؟ البته که باید
اما تماسهای تلفنی واقعاً چیزی برای کمک به ما ارائه نمیدهند. ما باید همه آن ماشینآلات را خودمان بسازیم، و اغلب به تعداد زیادی دیگ بخار/سربار ختم میشود که برای هر تماس غیرهمگام تکرار میکنیم.
مشکلسازترین مشکل با تماسهای برگشتی، وارونگی کنترل است که منجر به خرابی کامل در تمام این خطوط اعتماد میشود.
اگر کدی دارید که از تماسهای برگشتی استفاده میکند، به خصوص اما نه منحصراً با ابزارهای شخص ثالث، و در حال حاضر نوعی منطق کاهش را برای همه این مشکلات وارونگی اعتماد کنترل به کار نمیبرید، کد شما در حال حاضر دارای اشکالاتی است، حتی اگر آنها شاید هنوز شما را گاز نگرفته باشد باگ های نهفته همچنان باگ هستند.
جهنم واقعا.
قوانین ارسال دیدگاه در سایت