برنامه نویسی

ترکیب تابع در JS – Bangla

سلام توسعه دهندگان 👋
امروز در مورد ترکیب تابع بحث خواهیم کرد. هنگام کار با توابع در جاوا اسکریپت یا هر زبان برنامه نویسی کاربردی، گاهی اوقات در مورد Function Composition می شنوم. بنابراین، ترکیب تابع چیست؟ چرا استفاده می شود و چگونه انجام می شود؟ بحث امروز در مورد آن

ترکیب تابع روشی است که در آن چندین تابع با هم ترکیب می شوند تا یک تابع جدید را تشکیل دهند و خروجی یک تابع به عنوان ورودی برای تابع دیگر عمل می کند. این بیشتر شبیه “کار کردن گام به گام” یا ” فراخوانی یک تابع پس از دیگری” است.

بیایید یک مثال کوچک ببینیم:
فرض کنید دو عملکرد وجود دارد

const addingBy = (x)=> x + 2 ; //এই ফাংশনের কাজে হচ্ছে x ভ্যালুকে ২ দিয়ে যোগ করা 

const multiplyBy = (x)=> x * 5 ; //এই ফাংশনের কাজে হচ্ছে x ভ্যালুকে ৫ দিয়ে গুন করা 

//এখন ধরা যাক X=4, এবং বলা হলো x কে আগে addingBy দিয়ে যোগ করতে হবে তারপর multiplyBy দিয়ে গুন করতে হবে
//তাহলে আমরা যেভাবে করতে পারি তা হলোঃ

const result = multiplyBy(addingBy(4)) // output :30
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح:

1. ابتدا addingBy(4) اجرا می شود و نتیجه این خواهد بود: 4 + 2 = 6

2. MultiplyBy(6) اجرا می شود و addingBy(4) جایگزین 6 فوق می شود و نتیجه خواهد شد: 6*5 = 30

ترکیب عملکرد را می توان با مراحل تهیه چای مقایسه کرد. هر مرحله به عنوان یک تابع عمل می کند و همه مراحل با هم مانند ترکیب تابع هستند یعنی:

  1. عملکرد آب جوش:

    ابتدا آب را بجوشانید.

- ফাংশন: `boilWater() → hotWater`
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. اضافه کردن عملکرد چای:

    برگ های چای یا کیسه های چای را به آب جوش اضافه کنید.

- ফাংশন: `addTea(hotWater) → teaMixture`
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. عملکرد اضافه کردن شکر و شیر:

    شکر و شیر را به مخلوط چای اضافه کنید.

- ফাংশন: `addSugarAndMilk(teaMixture) → readyTea`
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا بیایید با کمک یک کد کوچک ببینیم

const boilWater = () => "hotWater";
const addTea = (water) => `${water} + tea`;
const addSugarAndMilk = (tea) => `${tea} + sugar and milk`;

// Composition:
const makeTea = (boilWater, addTea, addSugarAndMilk) => {
  const hotWater = boilWater();
  const teaMixture = addTea(hotWater);
  return addSugarAndMilk(teaMixture);
};

console.log(makeTea(boilWater, addTea, addSugarAndMilk));
// Output: "hotWater + tea + sugar and milk"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح:

هر مرحله (تابع) از خروجی یکدیگر استفاده می کند و در نهایت یک فنجان چای (خروجی نهایی) می گیریم. این مانند ترکیب تابع عمل می کند که در آن خروجی یک تابع ورودی تابع دیگری است. 😊

نکته ای که در اینجا باید به آن توجه کرد این است که برای هر ترکیب تابع یک تابع وجود دارد که در زبان برنامه نویسی تابع “compose” نامیده می شود. در مثال بالا، makeTea تابع نوشتن است.

حالا بیایید تابع compose را با جزئیات بحث کنیم. اما قبل از آن، بیایید در مورد برخی از روش‌های کاهش آرایه ایده بگیریم.

Array.reduce() یک روش آرایه در جاوا اسکریپت است که تمام عناصر یک آرایه را به یک مقدار کاهش می دهد. این روش یک تابع تماس و یک مقدار اولیه می گیرد.

نحو روش کاهش:
array.reduce(callback(accumulator, currentValue), initialValue)
کجا:

  • پاسخ به تماس: برای هر عنصر اجرا خواهد شد
  • accumulator: نتایج عملیات قبلی را ذخیره می کند
  • مقدار فعلی: مقدار عنصر فعلی
  • initialValue: مقدار اولیه (اختیاری) مثال:
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // Output: 10
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

روش کاهش نقش بسیار مهمی در ترکیب تابع ایفا می کند، زیرا از طریق آن می توانیم چندین تابع را در یک تابع واحد ترکیب کنیم.

compose تابع یک تابع مرتبه بالاتر (HOF) است که چندین تابع را به عنوان پارامتر می پذیرد و یک تابع جدید را برمی گرداند. این تابع جدید برای هر تابع از راست به چپ به این ترتیب اجرا می شود. یعنی ابتدا تابع سمت راست اجرا یا فراخوانی می شود، سپس تابع کنار آن اجرا یا فراخوانی می شود و به همین ترتیب. از راست به چپ این دستور ادامه خواهد داشت.

const compose = (...functions) => {
  return (input) => {
    return functions.reduceRight((acc, fn) => {
      return fn(acc);
    }, input);
  };
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

مثال:

فرض کنید در اینجا 3 تابع داریم یعنی addBy5، multiplyBy2 و subtractBy10. حالا می خواهیم یک تابع compose بگیریم تا توابع بالا را که در ابتدا هر مقداری را ارسال می کنیم، فراخوانی کنیم. به عنوان مثال، مقدار اولیه ما 6 خواهد بود

خب حالا بیایید کد را ببینیم

const add5 = (x) => x + 5;
const multiplyBy2 = (x) => x * 2;
const subtract10 = (x) => x - 10;

const composedFunction = compose(subtract10, multiplyBy2, add5);
const result = composedFunction(6);

console.log(result); // Output: 12

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا ابتدا 3 تابع addBy5، multiplyBy2 و subtractBy10 را می گیریم. حالا می خواهیم این توابع را مرحله به مرحله کار کنیم. برای آن، یک تابع compose می گیریم که در آن می توانیم مقادیر و توابع اولیه را به عنوان آرگومان ارسال کنیم. بنابراین تابع compose در داخل متغیر compposedFunction با توابع بالا فراخوانی می شود. از آنجایی که compose تابع دیگری را برمی گرداند و آن تابع در ابتدا مقداری را به عنوان پارامتر دریافت می کند، تابع برگشتی در متغیر compposedFunction تعریف می شود. اکنون می توانیم 6 اولیه را به عنوان آرگومان در حین فراخوانی تابع compposedFunction ارسال کنیم. و این تابع داخلی توابع ارسال شده به عنوان پارامتر به تابع compose را با مقدار اولیه به ترتیب راست به چپ کاهش می دهد و 12 را برمی گرداند.

چرا از Funciton Compostion استفاده کنیم؟

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

با ترکیب تابع، می توانیم از توابع کوچک با هم برای انجام کارهای پیچیده استفاده کنیم، بنابراین مجبور نیستیم یک کد را چندین بار بنویسیم. هر تابع بر روی یک وظیفه یا مسئولیت خاص، یعنی کدنویسی تمرکز دارد مدولارو قابل استفاده مجدد می سازد

علاوه بر وظایف پیچیده ما از ترکیب تابع اعلامی و مختصر یا اجازه می دهد تا به روش های کوتاه مانند:

// without funciton compostion
const result = Math.sqrt(Math.abs(parseInt("-16", 10)));
console.log(result); // 4

// with funciton compostion
const parse = (str) => parseInt(str, 10);
const abs = (n) => Math.abs(n);
const sqrt = (n) => Math.sqrt(n);

const process = compose(sqrt, abs, parse);

console.log(process("-16")); // 4
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

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

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا