مصاحبه استخدام برنامه نویس: تابع خالص چیست؟


وجود توابع خالص که در فارسی به آنها توابع خالص نیز گفته می شود در موارد مختلفی مانند برنامه نویسی تابعی و ساخت برنامه های تحت React ضروری است. اما Pure Function به چه معناست؟

تابع خالص تابعی است که دارای شرایط زیر باشد:

  • یک ورودی خاص همیشه به یک خروجی خاص منجر می شود.
  • بدون عوارض جانبی.

قبل از اینکه به طور جدی وارد بحث توابع خالص شویم، احتمالاً بد نیست که بحث خود تابع را کمی باز کنیم تا بتوانیم برنامه نویسی تابعی را بهتر درک کنیم.

تابع چیست؟

تابع فرآیندی است که یک ورودی (که آرگومان نیز نامیده می شود) از ما دریافت می کند و یک خروجی مورد انتظار (که مقدار نیز نامیده می شود) را برمی گرداند. توابع یکی از اهداف زیر را انجام می دهند:

ویژگی های نقشه برداری: بر اساس یک ورودی داده شده یک خروجی تولید کنید. اساساً یک تابع مقادیر ورودی را به مقادیر خروجی تبدیل می کند.

ویژگی های انجام عمل: یک تابع را می توان برای انجام چند مرحله به صورت متوالی فراخوانی کرد. این مراحل در مجموع رویه نامیده می شوند و برنامه نویسی در این سبک برنامه نویسی رویه ای نامیده می شود.

توابع ورودی/خروجی: برخی از توابع برای برقراری ارتباط با سایر اجزای سیستم مانند صفحه نمایش، ذخیره سازی، گزارش های سیستم یا شبکه استفاده می شود.

ننوشت

همه توابع خالص مربوط به نقشه برداری هستند. توابع آرگومان های ورودی را برای برگرداندن خروجی ترسیم می کنند. یعنی برای هر مجموعه ای از ورودی ها یک خروجی وجود دارد. تابع این ورودی ها را می گیرد و خروجی مربوطه را برمی گرداند.

برای مثال، تابع “Math.max()” اعداد را به عنوان آرگومان های خود می گیرد و بزرگترین عدد را در خروجی برمی گرداند.

Math.max(2, 8, 5); // 8

در این مثال، 2، 8، و 5 آرگومان های تابع هستند. مقادیر وارد تابع شدند.

اما “Math.max()” تابعی است که اعداد آرگومان را می گیرد و بزرگترین آنها را در خروجی برمی گرداند. در این مثال، بزرگترین رقم، عدد 8 است و در خروجی تابع برگردانده می شود.

توابع به ویژه در ریاضیات و علوم کامپیوتر مهم هستند و به ما در پردازش داده ها به روش های مفید کمک می کنند. یک برنامه نویس خوب از نام های توصیفی برای نام گذاری توابع استفاده می کند تا بعداً اگر خودش یا شخص دیگری کد را دید، بتواند تابع تابع را از نام آن تشخیص دهد.

توابع را نیز در ریاضی می بینیم و عملکرد توابع در ریاضی بسیار شبیه به عملکرد جاوا اسکریپت است. در جبر و ریاضی، احتمالاً توابعی مانند این را دیده اید:

f(ایکس) = 2ایکس

در این مثال، تابعی به نام f آرگومانی به نام x می گیرد و آن را در 2 ضرب می کند.

برای استفاده از این تابع کافی است به جای x یک مقدار قرار دهید:

است (2)

در عمل، درست مانند نوشتن است:

4

بنابراین، هر جا f(2) را ببینیم، می توانیم آن را برابر با 4 در نظر بگیریم.

حالا بیایید این تابع را در جاوا اسکریپت بنویسیم:

const double = x => x * 2

می توانید خروجی تابع را با استفاده از “console.log()” بررسی کنید:

console.log( double(5)); // 10

به یاد دارید که گفتیم که f(2) را می توان با 4 در توابع ریاضی جایگزین کرد؟ در جاوا اسکریپت، موتور جاوا اسکریپت “double(5)” را با پاسخ 10 جایگزین می کند.

توابع خالص یا توابع خالص

تابع خالص تابعی است که:

  • با توجه به ورودی یکسان، خروجی مشابهی تولید می کند.
  • هیچ عارضه ای ایجاد نمی کند.

بنابراین، console.log(double(5)) مانند console.log(10) خواهد بود.

این عبارت درست است زیرا double() یک تابع خالص است. اما اگر double() یک عارضه جانبی داشت، مانند ذخیره یک مقدار در حافظه یا نوشتن چیزی در کنسول، نمی‌توانید double(5) را با 10 جایگزین کنید بدون اینکه معنی آن را تغییر دهید.

منطقی است که توابع ناخالص را بدون فراخوانی مقداری که برمی‌گردانند فراخوانی کنیم، در حالی که توابع خالص اینطور نیستند.

توصیه می کنیم از توابع خالص استفاده کنید. یعنی اگر عملاً امکان برآوردن نیازهای برنامه از طریق توابع خالص وجود دارد، باید استفاده از چنین توابعی را به گزینه های دیگر پیش روی خود ترجیح دهید. توابع خالص ساده ترین شکل بلوک های سازنده کد برنامه را در اختیار ما قرار می دهند.

شاید مهم ترین قانون طراحی در علوم کامپیوتر قانون KISS (Keep It Stupid Simple) باشد. به این معنا که شما کد را به ساده ترین شکل ممکن می نویسید. استفاده از توابع خالص یکی از راه های پیروی از این قانون است.

توابع خالص دارای خواص مفید بسیاری هستند و اساس برنامه نویسی تابعی را تشکیل می دهند. توابع خالص کاملاً مستقل از شرایط خارجی هستند و بنابراین از خطاهای خارجی محافظت می شوند.

ماهیت مستقل چنین توابعی آنها را به کاندیدای عالی برای پردازش موازی CPU تبدیل می کند.

به دلیل ماهیت مستقل توابع خالص، سهولت قابل حمل و مقداردهی اولیه آنها، برنامه شما را انعطاف پذیرتر و سازگارتر با تغییرات آینده می کند.

دیدگاهتان را بنویسید