قبل از شروع، یه چیزی رو صادقانه بگم: این فصل از کتاب بهشدت روی OOP و کلاسها تمرکز داره. اگه مثل من بیشتر تابعی مینویسید، ممکنه بخشهایی ازش برای پروژههای روزمرهتون خیلی کاربردی نباشه. با این حال، ایدههای پشت این اصول ارزش دونستن دارن — حتی اگه مستقیم ازشون استفاده نکنید.

قانون دمیتر (Law of Demeter)
این اصل کمتر شناختهشدهست ولی به نظرم یکی از مفیدترینهاست — صرفنظر از اینکه چه سبکی مینویسید. سه ایده اصلی داره:
یه واحد باید دانش محدودی از واحدهای دیگه داشته باشه
یه واحد فقط باید با دوستان نزدیکش صحبت کنه
یه واحد نباید با غریبهها صحبت کنه
مثال سادهاش اینه: فروشنده نباید مستقیم به کیف پول مشتری دست بزنه — باید از خود مشتری بخواد پول بده. این «غریبه» همون کیف پوله که فروشنده نباید باهاش مستقیم کار کنه.
همین مفهوم توی کد یعنی: یه تابع نباید با جزئیات پیادهسازی لایههای پایینتر مستقیم درگیر بشه. اگه یه تابع برای نمایش پیام تولد، مستقیم داره با DOM کار میکنه، داره با یه «غریبه» حرف میزنه. بهتره یه تابع میانی بسازیم که کار DOM رو انجام بده و تابع اصلی فقط با اون حرف بزنه.
اصل SOLID
SOLID یه مجموعه از پنج اصل طراحیه که بیشتر برای کدنویسی شیگراست. اگه class-based نمینویسید، بعضیهاشون شاید مستقیم به کارتون نیان — ولی ایده پشتشون جهانشمولتره.
اصل مسئولیت واحد میگه هر چیزی باید فقط یه دلیل برای تغییر داشته باشه. توی کد تابعی هم این معنی داره: یه تابع نباید هم داده رو پردازش کنه، هم نمایشش بده، هم لاگ بزنه.
اصل باز-بسته میگه کد باید برای توسعه باز و برای تغییر بسته باشه — یعنی بتونیم رفتارش رو گسترش بدیم بدون اینکه کد اصلی رو دستکاری کنیم. توی دنیای تابعی این رو با composition و higher-order functions میشه پیاده کرد.
اصل جایگزینی لیسکوف بیشتر مربوط به ارثبری و کلاسهاست — اگه class-based نمینویسید، احتمالاً کمتر باهاش روبرو میشید.
اصل جداسازی اینترفیس میگه هیچکس نباید مجبور بشه به چیزی که استفاده نمیکنه وابسته باشه. این رو میشه اینطوری خوند: توابع و ماژولهاتون رو کوچیک و متمرکز نگه دارید.
اصل وارونگی وابستگی میگه ماژولهای سطح بالا نباید مستقیم به جزئیات سطح پایین وابسته باشن — باید یه لایه انتزاع بینشون باشه. این یکی صرفنظر از پارادایم، خیلی کاربردیه.
اصل انتزاع
این بخش به نظرم جذابترین قسمت فصله و کاملاً زباننگاره.
اصل انتزاع میگه: پیادهسازی باید از اینترفیس جدا باشه. دو تا هشدار مهم هم داره:
DRY — خودت رو تکرار نکن. اگه داری کدی رو کپی میکنی، یه چیزی رو کم انتزاع کردی.
YAGNI — بهش نیاز نخواهی داشت. از انتزاع بیش از حد هم بپرهیز.
جایی بین این دو تا، انتزاع ایدهآل قراره. انتزاع زیاد یا کد رو بیش از حد پیچیده میکنه یا بیش از حد ساده — هر دو بد هستن. انتزاع متعادل دقیقاً همون چیزیه که کاربر نیاز داره، نه کمتر، نه بیشتر.
اصول برنامهنویسی تابعی
این بخش برای کسایی که تابعی مینویسن مستقیمترین و کاربردیترین قسمت فصله.
خلوص تابعی یعنی یه تابع فقط بر اساس ورودیهاش خروجی بده و هیچ اثر جانبی نداشته باشه. نتیجهاش کد قابل پیشبینی و راحت برای تسته.
تغییرناپذیری یعنی داده نباید تغییر کنه. بهجای تغییر یه آبجکت، یه نسخه جدید ازش بساز. این مخصوصاً توی دنیای async جاوااسکریپت که داده بین scopeهای مختلف جابجا میشه، خیلی مهمه.
جمعبندی
اگه OOP نمینویسید، بخش SOLID این فصل شاید خیلی مستقیم به دردتون نخوره — و این کاملاً طبیعیه. ولی قانون دمیتر، اصل انتزاع، خلوص تابعی و تغییرناپذیری، ایدههایی هستن که صرفنظر از سبک کدنویسی ارزش نگه داشتن دارن.