Functional Programming
পাইথন পুরোপুরি একটি ফাংশনাল ল্যাঙ্গুয়েজ না হলেও এতে ফাংশনাল প্রোগ্রামিংয়ের অনেক পাওয়ারফুল ফিচার আছে। এটি কোডকে গাণিতিকভাবে পরিষ্কার এবং বাগ-ফ্রি রাখতে সাহায্য করে।
১. Pure Functions (পিউর ফাংশন)
একটি পিউর ফাংশনের দুটি প্রধান গুণ থাকে:
- একই ইনপুট দিলে সবসময় একই আউটপুট দিবে।
- এটি ফাংশনের বাইরের কোনো ভেরিয়েবল বা স্টেট পরিবর্তন করবে না (No Side Effects)।
python
# Pure Function
def add(a, b):
return a + b
# Not Pure (ফাইলের স্টেট চেঞ্জ করছে)
def add_to_file(val):
with open("data.txt", "a") as f:
f.write(str(val))২. Immutability (অপরিবর্তনীয়তা)
ফাংশনাল প্রোগ্রামিংয়ে ডাটা পরিবর্তন করার বদলে সবসময় নতুন ডাটা তৈরি করা হয়। পাইথনে Tuple এবং FrozenSet এর মাধ্যমে এটি অর্জন করা যায়।
৩. functools মডিউল
এডভান্সড ফাংশনাল প্রোগ্রামিংয়ের জন্য এটি অত্যন্ত প্রয়োজনীয়।
Partial Functions:
একটি ফাংশনের কিছু প্যারামিটার আগে থেকেই ফিক্স করে রাখার জন্য এটি ব্যবহার করা হয়।
python
from functools import partial
def power(base, exponent):
return base ** exponent
# সবসময় স্কয়ার করবে এমন একটি ফাংশন বানানো
square = partial(power, exponent=2)
print(square(5)) # ২৫৪. First-Class Functions & Higher-Order Functions
- First-Class: ফাংশনকে ভেরিয়েবলে রাখা যায়।
- Higher-Order: এমন ফাংশন যা অন্য কোনো ফাংশনকে আর্গুমেন্ট হিসেবে নেয় বা ফাংশন রিটার্ন করে (যেমন:
map,filter,decorators)।
৫. কেন ব্যবহার করবেন?
- Parallelism: পিউর ফাংশনগুলো মাল্টি-থ্রেডিং এ কোনো সমস্যা ছাড়াই কাজ করতে পারে।
- Testing: পিউর ফাংশন টেস্ট করা অনেক সহজ।
- Predictability: কোড কী করবে তা অনেক বেশি প্রিডিক্টেবল থাকে।
TIP
আধুনিক পাইথনে লিস্ট কমপ্রিহেনশন এবং জেনারেটর ব্যবহার করে ফাংশনাল প্রোগ্রামিংয়ের অনেক কাজ খুব সহজে করা যায়।