تابع همهکاره را بشکن؛ منطق محاسبه را از Side Effect جدا کن
یک تابع هم داده میگیرد، validate میکند، محاسبه میکند، ایمیل میفرستد و دیتابیس را تغییر میدهد؛ تغییر کوچک همهچیز را درگیر میکند.
خواندن فایل، درخواست شبکه و نوشتن دیتابیس را از منطق تصمیم جدا کن تا تست، reuse و فهم کد سادهتر شود.
چطور دقیقتر به موضوع نگاه کنیم؟
- داخل تابع عملیات بیرونی مثل DB، filesystem، clock و network را علامت بزن.
- منطق محاسباتی را به تابعی با ورودی و خروجی روشن منتقل کن.
- لایه orchestration را مسئول فراخوانی side effectها و مدیریت خطا نگه دار.
- اسم تابعها را با مسئولیت واقعی هماهنگ کن؛ اگر نام به «and» نیاز دارد احتمالاً بیش از یک کار دارد.
چرا این موضوع مهم است؟
side effect زیاد وابستگی پنهان میسازد. جداکردن core logic باعث میشود بخش اصلی با ورودی و خروجی روشن قابل فهم باشد.
سؤالهایی که معمولاً بعدش پیش میآید
تابع چند خط باشد؟
عدد ثابت مهم نیست؛ یک مسئولیت قابل توضیح و وابستگی روشن معیار بهتری است.
همه چیز pure function شود؟
نه؛ برنامه به I/O نیاز دارد، هدف متمرکزکردن side effect در مرزهای روشن است.
