কার্রিং (Currying) হলো ফাংশনাল প্রোগ্রামিংয়ের একটি কৌশল, যেখানে একটি ফাংশন একাধিক আর্গুমেন্ট গ্রহণ করার পরিবর্তে প্রতিবারে একটি আর্গুমেন্ট গ্রহণ করে এবং একটি নতুন ফাংশন রিটার্ন করে, যা পরবর্তী আর্গুমেন্ট গ্রহণ করে। এটি মূলত একটি ফাংশনকে একাধিক আর্গুমেন্ট থেকে একটির আর্গুমেন্টে বিভক্ত করে। কার্রিং ফাংশনাল প্রোগ্রামিংয়ের অন্যতম গুরুত্বপূর্ণ ধারণা এবং এটি কোডকে আরও মডুলার, পুনঃব্যবহারযোগ্য ও কার্যকর করে তোলে।
কার্রিং-এর সুবিধা
১. কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি
কার্রিং একটি ফাংশনকে ধাপে ধাপে আর্গুমেন্ট গ্রহণের সুযোগ দেয়। এতে করে আংশিকভাবে কোনো ফাংশনের কাজ করতে হলে পুরো ফাংশনটি পুনরায় লিখতে হয় না, বরং আংশিক ফাংশন ব্যবহার করে কার্য সম্পাদন করা যায়।
২. ফাংশন কম্পোজিশনের সুবিধা
কার্রিং ফাংশনগুলোকে কম্পোজ করার জন্য কার্যকরী পদ্ধতি, যা কোডকে ছোট ছোট অংশে ভেঙে পুনরায় গঠন করতে সহায়তা করে। এটি ফাংশনাল প্রোগ্রামিংয়ে ফাংশনগুলোর সংমিশ্রণকে আরও সহজ করে তোলে।
৩. কোডের রিডেবিলিটি ও মডুলারিটি বৃদ্ধি
কার্রিং ফাংশনগুলোর আউটপুট হিসেবে প্রতিবার একটি নতুন ফাংশন প্রদান করে, যা কোডকে রিডেবল ও মডুলার করে তোলে। প্রতিটি ধাপে আর্গুমেন্ট প্রদান করলে কী কাজ হবে তা স্পষ্টভাবে দেখা যায়।
৪. আংশিক প্রয়োগের সুবিধা (Partial Application)
কার্রিং ফাংশনগুলো আংশিকভাবে প্রয়োগ করার সুবিধা দেয়, অর্থাৎ পুরো ফাংশনের পরিবর্তে কিছু আর্গুমেন্ট দিয়ে কাজ সম্পন্ন করা যায়। এই পদ্ধতি জটিল সমস্যাগুলোর সমাধান সহজ করতে সহায়তা করে।
কার্রিং-এর বাস্তব উদাহরণ
ধরা যাক, আমাদের একটি ফাংশন দরকার যেখানে তিনটি ভিন্ন সংখ্যার গুণফল বের করা হবে। কার্রিং ব্যবহার করে এই কাজটি ধাপে ধাপে করা যায়।
উদাহরণ (Python এ):
def multiply(x):
def multiply_y(y):
def multiply_z(z):
return x * y * z
return multiply_z
return multiply_y
# কার্রিং ফাংশন কল করে প্রতিটি আর্গুমেন্ট প্রদান করা
result = multiply(2)(3)(4)
print(result) # আউটপুট: 24ব্যাখ্যা:
এখানে multiply ফাংশনটি তিনটি আলাদা ফাংশন প্রদান করে যেখানে প্রতিটি ফাংশন একক আর্গুমেন্ট গ্রহণ করে এবং পরবর্তী ফাংশন রিটার্ন করে। প্রথম multiply(2) কল করা হলে এটি multiply_y ফাংশনকে রিটার্ন করে, যেখানে y এর মান ৩ দিয়ে কাজ হবে এবং সবশেষে multiply_z ফাংশন রিটার্ন করে যেখানে z এর মান ৪ দিয়ে গুণফল বের হবে।
কার্রিং-এর বাস্তব প্রয়োগ
১. আংশিকভাবে ফাংশন প্রয়োগ করা (Partial Application)
ধরা যাক, আমরা একটি ফাংশন তৈরি করতে চাই যা একটি নির্দিষ্ট হার (rate) অনুযায়ী যেকোনো মূল্যে (amount) ট্যাক্স যোগ করবে।
def tax_calculator(rate):
def calculate(amount):
return amount + (amount * rate)
return calculate
# একটি নির্দিষ্ট ১৫% হার সহ ট্যাক্স ক্যালকুলেটর তৈরি করা
add_tax = tax_calculator(0.15)
# বিভিন্ন মূল্যে ট্যাক্স যোগ করা
print(add_tax(100)) # আউটপুট: 115.0
print(add_tax(200)) # আউটপুট: 230.0এখানে, tax_calculator(0.15) ফাংশনটি প্রথমে ১৫% হারের একটি ট্যাক্স ক্যালকুলেটর তৈরি করে, যা বিভিন্ন মূল্যে ট্যাক্স যোগ করতে ব্যবহার করা যায়। এটি আংশিক প্রয়োগের একটি দারুণ উদাহরণ।
২. ফাংশন কম্পোজিশন ও পাইপলাইন
কার্রিং ফাংশনগুলো ফাংশন কম্পোজিশনে সহজে সংযুক্ত হতে পারে, যেখানে একটি ফাংশনের আউটপুট পরবর্তী ফাংশনের ইনপুট হিসেবে কাজ করে।
উদাহরণ:
def add(a):
def add_b(b):
return a + b
return add_b
def multiply(a):
def multiply_b(b):
return a * b
return multiply_b
# কম্পোজিশন করে একটি পাইপলাইন তৈরি করা
result = multiply(2)(add(3)(4)) # আউটপুট: 14, কারণ (3+4) * 2
print(result)এখানে, add এবং multiply ফাংশনকে কার্রিং ব্যবহার করে কম্পোজিশন করা হয়েছে। প্রথমে add(3)(4) এর আউটপুট ৭ আসে, যা multiply(2) এর ইনপুট হিসেবে কাজ করে এবং চূড়ান্ত আউটপুট ১৪ প্রদান করে।
৩. টেমপ্লেট ফাংশন তৈরি করা
কার্রিং ফাংশন ব্যবহার করে নির্দিষ্ট আর্গুমেন্টের উপর ভিত্তি করে টেমপ্লেট ফাংশন তৈরি করা যায়। এটি বিশেষ করে ডেটা প্রসেসিং বা কনফিগারেশন ভিত্তিক কাজে সহায়ক।
def greeting(language):
def greet(name):
if language == "en":
return f"Hello, {name}!"
elif language == "es":
return f"Hola, {name}!"
else:
return f"Hi, {name}!"
return greet
# ইংরেজি ভাষায় গ্রীটিং ফাংশন
english_greet = greeting("en")
print(english_greet("Alice")) # আউটপুট: Hello, Alice!
# স্প্যানিশ ভাষায় গ্রীটিং ফাংশন
spanish_greet = greeting("es")
print(spanish_greet("Carlos")) # আউটপুট: Hola, Carlos!এখানে, greeting ফাংশনটি বিভিন্ন ভাষায় অভিবাদন প্রদানের জন্য টেমপ্লেট ফাংশন তৈরি করে। এটি ফ্লেক্সিবল এবং পুনরায় ব্যবহারযোগ্য কোড লেখায় সহায়তা করে।
সংক্ষেপে কার্রিং এর সুবিধাসমূহ
১. কোড পুনঃব্যবহারযোগ্য: আংশিক প্রয়োগের মাধ্যমে ফাংশনগুলিকে পুনরায় ব্যবহারযোগ্য করে।
২. ফাংশন কম্পোজিশন: কার্রিং ফাংশনগুলোকে সহজে সংযুক্ত করা যায়, যা পাইপলাইন তৈরি করতে সহায়তা করে।
৩. মডুলার প্রোগ্রামিং: কার্রিং ফাংশনগুলোর প্রতিটি স্তরে নির্দিষ্ট কাজ সম্পন্ন করে, যা কোডের মডুলারিটি বাড়ায়।
৪. রিডেবিলিটি বৃদ্ধি: প্রতিটি ধাপে আর্গুমেন্ট নির্ধারণের কারণে কোডের রিডেবিলিটি বৃদ্ধি পায়।
কার্রিং ফাংশনাল প্রোগ্রামিংয়ে একটি শক্তিশালী কৌশল, যা ফাংশনগুলোকে আরও মডুলার, পুনঃব্যবহারযোগ্য, এবং কার্যকরী করে তোলে। বিভিন্ন প্রোগ্রামিং সমস্যায় কার্রিং-এর মাধ্যমে কার্যকর সমাধান পাওয়া যায়।