چند روزیه خیلی این جمله توی سرم تکرار میشه...
و در کنار تمام مسائلی که میشه به پیام عمیق این جمله ربطش داد، خیلی بیشتر میتونم درک کنم که Kyle (و امثالهم) چطور به چنین تواناییای دست پیدا کرده!
منظورم Kyle Simpson نویسندهی مجموعهی You Don't Know JS هستش...
اون جمله و این فهم با کیفیتی که Kyle از JavaScript برای خودش ساخته رو میشه به هم وصل کرد.
ینی فقط نگاه نکرده، وارسی کرده، پوییش کرده... یا همون به انگلیسی Observe کرده...
اولین باری که مثلا با واژهی Closure یا Temporal Dead Zone یا Arrow Functions توی جاوااسکریپت آشنا شدم، انگار کمی که مطالعهش کردم، همون چیزی که میخوندم رو قبولش میکردم. انگار یه فهم خیلی سطحی فقط میخواستم بسازم که بتونم با اون ابزار یا مفاهیم فعلا کار کنم ...
حالا مثلاً میای با خودت میگی وای این Arrow Function چقد خووبه... یه چیزی که فقط دیدیش و همینطوری بصری و هیجانی باهاش حال کردی رو دیگه شروع میکنی فرت فرت استفاده کردن!
بعد یکی از lectureهای همین Kyle رو درمورد Arrow Function دیدم! و خیلی برام جالب و هیجان انگیز بود که او چطور زیرو رو کرده بود این Arrow Function رو و کاملاً برای خودش روشن کرده بود که این ابزار جدیدی که ساخته شده، چه جاهایی واقعا خوبه استفاده کنی و چه جاهایی بده!
الان دیگه EventListener هم میخوام بسازم، دیگه Anonymous Function بهش پاس نمیدم! یه اسم پشتش میذارم
something.addEventListener('click', function somthingClickHandler(){ /* ... */ });
مثلا یه دلیل، به نقل از Kyle:
هر فانکشن بی اسمی که بسازی، وقتی داره execute میشه، وقتی توی Call Stack رو داری رصد میکنی میبینی نوشته (anonymous). پس با این کار، خوانایی کدت رو آوردی پایین! بخاطر همین من (kyle) اینجا همیشه اسم میذارم. توی debug کردن کمکم میکنه...
دلیل دوم: اصلا اومدیم و بعدا نیاز شد برای ارتقاء عملکرد برنامهم، توی بدنهی همون فانکشن به خودش اشاره کنم! مثلا شاید خواستم تابع بازگشتی بنویسم...! حالا که اسم داره میتونم راحت صداش کنم!
پس، زیادم نباید از ساختار خیلی خیلی خلاصهای که Arrow function برام فراهم کرده، همه جا استفاده کنم!
مثلا این دوتا کد رو ببینید.
console.log("ONE"); setTimeout(() => { console.log("TWO"); }, 0); console.log("THREE");
و این:
function count() { for(var i = 1; i <= 5; ++i) { setTimeout(function () { console.log(i); }, i * 1000); } console.log("Done!"); } count();
من "چرایی" این دوتا رو زمانی تونستم حقیقتا درک کنم، که observation رو انجامش دادم. یوهو دیدم اون پشت چه خبره! call stack - event loop - callback queue - microtask queue - scopes - web API - ...
حتمآ در دو پست مجزا، این دو کد بالا رو موشکافی میکنم، خیلی چیزا دستگیرمون خواهد شد
همینجاها بود که احساس کردم دوهزاریم افتاد! اینکه یکی از رازهای موفقیت میتونه دقیقاً همون جملهای باشه که شاید اولین بار به ذهن Arthur Conan Doyle نویسندهی رمانهای شرلوک هولمز خطور کرده بود:
You see, But you do not observe
که داره از سطح کیفیت یک تجربه صحبت میکنه، و تفاوتی که در انتها برات داره. شرلوکهای واقعی دنیای ما، که Kyle هم میتونه به نوبهی خودش، شرلوک هلمزِ سرزمین JavaScript باشه، تفاوتشون با بقیه در "انتخاب اون سطح کیفیت" هستش...
#مثل_شرلوک_باشید ?