منو سایت

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

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

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

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

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

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

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

تابع چیست؟

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

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

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

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

ننوشت

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

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

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

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

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

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

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

اف،ایکس) = 2ایکس

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

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

f (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 می کند.

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