কার্রিং (Currying) হলো প্রোগ্রামিংয়ের একটি পদ্ধতি যেখানে একটি ফাংশন একাধিক আর্গুমেন্ট নেওয়ার পরিবর্তে প্রতিবার শুধুমাত্র একটি আর্গুমেন্ট গ্রহণ করে এবং প্রতিবারে নতুন একটি ফাংশন রিটার্ন করে। এই রিটার্নকৃত ফাংশনগুলো পরবর্তীতে বাকি আর্গুমেন্টগুলো গ্রহণ করতে পারে। কার্রিং মূলত জটিল ফাংশনগুলোকে ছোট ছোট অংশে বিভাজিত করতে সহায়ক, যা কোডকে পুনরায় ব্যবহারযোগ্য এবং আরও নমনীয় করে তোলে।
কার্রিং কীভাবে কাজ করে?
কার্রিং পদ্ধতিতে একটি ফাংশনকে এমনভাবে বিভাজিত করা হয় যে ফাংশনটি একবারে সব আর্গুমেন্ট নেওয়ার পরিবর্তে প্রতিবার একটি করে আর্গুমেন্ট নেয় এবং প্রতিবার নতুন ফাংশন রিটার্ন করে, যা পরবর্তী আর্গুমেন্ট নিতে প্রস্তুত থাকে। কার্রিং ফাংশনাল প্রোগ্রামিংয়ে বিশেষভাবে ব্যবহৃত হয়, কারণ এটি ফাংশন কম্পোজিশন ও ফাংশনাল অ্যাবস্ট্রাকশনকে সহজ করে।
উদাহরণ (Python):
# সাধারণ ফাংশন যা তিনটি আর্গুমেন্ট গ্রহণ করে
def add(x, y, z):
return x + y + z
print(add(2, 3, 5)) # আউটপুট: 10এই add ফাংশনটি কার্রিংয়ের মাধ্যমে আলাদা করা যেতে পারে যাতে এটি একবারে একটি করে আর্গুমেন্ট গ্রহণ করে।
# কার্রিং প্রয়োগ করে add ফাংশন তৈরি
def curried_add(x):
def add_y(y):
def add_z(z):
return x + y + z
return add_z
return add_y
# কার্রিং ফাংশন ব্যবহার
result = curried_add(2)(3)(5)
print(result) # আউটপুট: 10এখানে curried_add ফাংশনটি প্রতিবার একটি করে আর্গুমেন্ট গ্রহণ করে এবং পরবর্তী ফাংশনকে রিটার্ন করে। curried_add(2) প্রথম আর্গুমেন্ট ২ গ্রহণ করে add_y রিটার্ন করে, যা আবার add_y(3) এর মাধ্যমে দ্বিতীয় আর্গুমেন্ট গ্রহণ করে এবং পরবর্তীতে add_z(5) তৃতীয় আর্গুমেন্ট নিয়ে শেষ ফলাফল প্রদান করে।
কার্রিংয়ের সুবিধা
১. পুনরায় ব্যবহারযোগ্যতা: কার্রিংয়ের মাধ্যমে ফাংশনের কিছু আর্গুমেন্ট নির্দিষ্ট করে রেখে বাকি আর্গুমেন্ট পরবর্তীতে নির্দিষ্ট করা যায়, যা কোডকে পুনঃব্যবহারযোগ্য করে তোলে।
- ফাংশন কম্পোজিশন: কার্রিং ফাংশনকে ছোট ছোট অংশে ভেঙে ফাংশন কম্পোজিশন করা সহজ করে তোলে, যা জটিল কাজকে সহজে সমাধান করতে সহায়ক।
- কোডের নমনীয়তা: কার্রিং ফাংশনগুলোকে আরও ডাইনামিক করে তোলে এবং বিভিন্ন আর্গুমেন্টের ভিত্তিতে কাজ করতে সাহায্য করে।
ব্যবহারিক উদাহরণ
ধরা যাক আমরা একটি ফাংশন তৈরি করতে চাই যা কোনো সংখ্যাকে নির্দিষ্ট মান দিয়ে গুণ করবে। কার্রিংয়ের মাধ্যমে এটি করা হলে বিভিন্ন মান দিয়ে সেটিকে পরিবর্তন করা যাবে।
def multiply_by(x):
return lambda y: x * y
double = multiply_by(2) # গুণ ২ দ্বারা
triple = multiply_by(3) # গুণ ৩ দ্বারা
print(double(5)) # আউটপুট: 10
print(triple(5)) # আউটপুট: 15এখানে multiply_by ফাংশনটি কার্রিং করে বিভিন্ন গুণক তৈরি করা হয়েছে, যেমন double এবং triple। এটি বিভিন্ন কাজে পুনঃব্যবহারযোগ্য।
কার্রিং বনাম পারশিয়াল অ্যাপ্লিকেশন
কার্রিংয়ের সাথে পারশিয়াল অ্যাপ্লিকেশন সম্পর্কিত, তবে এগুলো আলাদা। কার্রিং সব আর্গুমেন্টের জন্য একাধিক ফাংশন রিটার্ন করে, তবে পারশিয়াল অ্যাপ্লিকেশন কোনো ফাংশনের কিছু আর্গুমেন্ট নির্দিষ্ট করে রেখে বাকি আর্গুমেন্টগুলো পরে নির্দিষ্ট করা হয়। Python-এ functools.partial এর মাধ্যমে এটি করা যায়।
উদাহরণ (Python):
from functools import partial
def add(x, y, z):
return x + y + z
add_five = partial(add, 5)
print(add_five(3, 2)) # আউটপুট: 10এখানে add_five নামক পারশিয়াল ফাংশন তৈরি করা হয়েছে যেখানে প্রথম আর্গুমেন্ট ৫ নির্দিষ্ট করা হয়েছে।
কার্রিং পদ্ধতিটি ফাংশনকে ছোট ছোট অংশে ভাগ করে একটি নমনীয় এবং পুনঃব্যবহারযোগ্য কোডবেস তৈরি করতে সহায়ক। এটি ফাংশনাল প্রোগ্রামিংয়ে বহুল ব্যবহৃত একটি কৌশল, যা জটিল ফাংশনগুলোকে সহজে প্রয়োগ করার সুযোগ করে দেয়।