সহজ ভাষায় এটা একটা প্রোগ্রামিং স্টাইল যেটা বিশেষত নির্ভর করে ফাংশনের উপর। higher-order-function গুলো এই ধারার মুল জিনিষ। যে ফাংশন আরেকটি ফাংশনকে আর্গুমেন্ট হিসেবে নিতে পারে এবং অথবা রিটার্ন এলিমেন্ট হিসেবে একটি ফাংশন রিটার্ন করতে পারে তাকে higher-order-function বলা হয়। যেমন -
>>> def make_twice(func, arg):
... return func(func(arg))
...
>>> def add_five(x):
... return x + 5
...
>>> print(make_twice(add_five, 10))
20
>>>
উপরের উদাহরণে, প্রথমেই আমরা make_twice
ফাংশনকে কল করছি আর এর ডেফিনেশন মোতাবেক এর কাছে একটি ফাংশন এবং একটি ভ্যালু পাঠিয়েছি। যে ফাংশন পাঠিয়েছি সেটা হচ্ছে add_five
এবং ভ্যালুটি 10
.
অন্যদিকে make_twice
ফাংশনের মধ্যে func
হিসেবে সেই add_five
ফাংশনকে ক্যাচ করছি এবং একাধিকবার সেটাকে কল করছি। আবার, func
তথা add_five
এর একটি আর্গুমেন্ট লাগে। তাই, প্রথমবার এক্সিকিউটের সময় এর মধ্যে 10 কে পাঠিয়ে দিচ্ছি এবং রিটার্ন হয়ে আসছে 15 এবং দ্বিতীয়বার সেই 15 -ই গিয়ে ফাইনালি 20 কে রেজাল্ট হিসেবে পাচ্ছি।
ফাংশনাল প্রোগ্রামিং-এর সাথে সাথে পিওর এবং ইম্পিওর ফাংশনের বিষয় চলে আসে। পিওর ফাংশন হচ্ছে সেই ফাংশন যার কোন পার্শ্ব-প্রতিক্রিয়া নাই এবং যে ফাংশন কোন কিছু রিটার্ন করে শুধুমাত্র তার আর্গুমেন্ট ভ্যালুর উপর ভিত্তি করেই। যেমন -
>>> def my_pure_function(a,b):
... c = (2 * a) + (2 * b)
... return c
...
>>> my_pure_function(5,10)
30
উপরের প্রোগ্রামে my_pure_function
দুটো আর্গুমেন্ট নেয় এবং সেগুলোর উপর কিছু ক্যালকুলেশন করে একটি ভ্যালু রিটার্ন করে। শুরু থেকে শেষ নাগাদ এই ফাংশন বাইরের কোন ভ্যালুর উপর নির্ভর করে না বা বাইরের কোন ভ্যালুকে পরিবর্তনের সাথে সম্পৃক্ত নয়। এটাকে একটা পিওর ফাংশন বলা যেতে পারে।
>>> my_list = []
>>> def my_impure_function(arg):
... my_list.append(arg)
...
>>> my_impure_function(10)
>>> print(my_list)
[10]
উপরে my_impure_function
এর কাছে একটি ভ্যালু গেলে সে তার বাইরে অবস্থান করা একটি লিস্ট যার নাম, my_list
, এর মধ্যে সেই ভ্যালুকে ঢুকিয়ে দিচ্ছে। এই ফাংশনের কাজের গণ্ডি একটু বাড়তি। এটাকে ইম্পিওর ফাংশন বলা হয়।