Appearance
گاهی اوقات یک تابعی داریم و می خوایم ببینیم دقیقا چیکار میکنه و چه رفتاری داره.
خب کار های زیادی هست تا به رفتارش پی ببریم ، مثلا یکیش این هست که جریان برنامه رو trace کنیم و ببینیم رفتار این تابع چی هست ، یا یک جا صداش بزنیم ولی گاهی اوقات این تابع مستقیم از ما چیزی دریافت نمیکنه مثلا کتابخانه ریکوئست پایتون یک معماری نسبتا پیچیده داره و ما اگر بخوایم یک تابعی که ورودی و خروجی توابع دیگه است رو به تنهایی استفاده کنیم به شدت به مشکل میخوریم چون اصلا ذات برناممون یک جور دیگست (داخل پایتون ما باید ریکوئستی ارسال کنیم تا توابع مربوط به پروکسی استفاده بشن) و میشه به راحتی فهمید که trace کردن جریان برنامه هم توی یک سیستم بزرگ ممکنه کمی سخت و زمان بر باشه(توی ریکوئست پایتون امتحان کردم و فاجعه بود) روشی که استفاده میشه این هست که یک تابع داشته باشیم که دقیقا مثل تابع اصلی رفتار کنه ولی بعضی کد های مربوط به ما مثلا آرگومنت های ورودی رو چاپ کنه یا وضعیت خاصی رو اعلام کنه بدون اینکه به منطق برنامه آسیبی وارد بشه!
INFO
کار کرد اصلی مانکی پجینگ ، mocking هست ، چون من اولین بار برای بررسی توابع کتابخانه ریکوئست باهاش مواجه شدم ، کاربرد لاگ گرفتن از تابع بیشتر برام تداعی شد!
یک مثال خیلی ساده ازش ببینیم :
js
function sum(a , b){
return a + b
}
const realSum = sum;
sum = function(...args){
console.log("args : " , args);
return realSum(...args);
};
console.log(sum(5 , 10));کاربرد های اصلی مانکی پجینگ به شرح ز یر هست :
mocking:
تغییر داده در وسط برنامه ، مثلا api یا داده ای که در نهایت قرار هست به سروری ارسال بشه.
پچ کردن برنامه:
گاهی اوقات برنامه ما یک باگی داره، و ما نمی تونیم منتظر انتشار نسخه جدیدش بمونیم، پس بدون اینکه سورسش رو تغییر بدیم داخل برنامه خودمون پچش می کنیم. یک چالش این پایین آوردم سعی کنید انجامش بدید.
چالش :
یک قطعه کدی هست که یک آبجکت sum داره که یک رفتار اشتباه داره ، پرتاب میمون های فضایی به جو کره زمین بخاطر این قطعه کد داره کنسل میشه ، اگر میخوام که میمون ها به فضا برن باید این قطعه کد رو درست کنی ، برای حل این سوال روی دکمه زیر کلیک کن
WARNING
بهتره این ها رو توی تست های استفاده کنیم ، چون رفتار تابع رو تغییر میدن و قطعا توی یک سیستم بزرگ کار خیلی جالبی نیست !!
یک چالش سخت تر !!
چالش :
میمون ها می خوان به فضا برن ولی تاریخ پرتاب روی سال 2050 تنظیم شده ولی اونا نمی تونن اینقدر صبر کنن چون پیر میشن و می میرن! کمکشون کنید