হাইয়ার-অর্ডার ফাংশন (Higher-order Functions) হলো প্রোগ্রামিংয়ের এমন একটি ফাংশন, যা অন্য ফাংশনকে আর্গুমেন্ট হিসেবে নিতে পারে অথবা একটি ফাংশনকে রিটার্ন করতে পারে। সহজ কথায়, হাইয়ার-অর্ডার ফাংশন ফাংশনের সাথে ফাংশন ব্যবহার করে কাজ সম্পন্ন করে। এটি ফাংশনাল প্রোগ্রামিংয়ে অত্যন্ত গুরুত্বপূর্ণ এবং এটি প্রোগ্রামিংয়ের লজিক আরও সংক্ষিপ্ত এবং ডাইনামিক করতে সাহায্য করে।
হাইয়ার-অর্ডার ফাংশনের বৈশিষ্ট্য
১. ফাংশন প্যারামিটার হিসেবে গ্রহণ করা: হাইয়ার-অর্ডার ফাংশন এমন ফাংশন, যা অন্য ফাংশনকে ইনপুট হিসেবে নিতে পারে।
২. ফাংশনকে রিটার্ন করা: হাইয়ার-অর্ডার ফাংশন অন্য কোনো ফাংশনকে আউটপুট হিসেবে প্রদান করতে পারে। এই বৈশিষ্ট্যের কারণে ফাংশনগুলোকে ডাইনামিকভাবে তৈরি ও ব্যবহার করা যায়।
৩. ফাংশনাল প্রোগ্রামিংয়ের ভিত্তি: হাইয়ার-অর্ডার ফাংশন ফাংশনাল প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ, যা কোডকে সংক্ষিপ্ত এবং রিডেবল রাখতে সাহায্য করে।
উদাহরণ: হাইয়ার-অর্ডার ফাংশন
নিচে Python-এ কিছু উদাহরণের মাধ্যমে হাইয়ার-অর্ডার ফাংশন কিভাবে কাজ করে তা ব্যাখ্যা করা হলো।
উদাহরণ ১: ফাংশনকে প্যারামিটার হিসেবে ব্যবহার করা
def greet(name):
return f"Hello, {name}!"
def print_greeting(func, name):
print(func(name))
print_greeting(greet, "Alice") # আউটপুট: Hello, Alice!এখানে print_greeting হলো একটি হাইয়ার-অর্ডার ফাংশন, কারণ এটি greet ফাংশনকে প্যারামিটার হিসেবে গ্রহণ করছে।
উদাহরণ ২: ফাংশনকে রিটার্ন করা
def power(x):
def calculate_power(n):
return n ** x
return calculate_power
square = power(2)
cube = power(3)
print(square(5)) # আউটপুট: 25 (5 ** 2)
print(cube(2)) # আউটপুট: 8 (2 ** 3)এখানে power ফাংশনটি একটি হাইয়ার-অর্ডার ফাংশন, কারণ এটি calculate_power ফাংশনকে রিটার্ন করছে।
হাইয়ার-অর্ডার ফাংশনের সাথে map, filter, এবং reduce ফাংশন
Python-এর map, filter, এবং reduce হলো হাইয়ার-অর্ডার ফাংশনের বাস্তব উদাহরণ। এগুলোকে অন্য ফাংশন বা ল্যাম্বডা এক্সপ্রেশনের সাথে ব্যবহার করে ডেটা প্রসেসিং করা যায়।
উদাহরণ ৩: map ফাংশন ব্যবহার করে
map ফাংশন একটি লিস্টের প্রতিটি আইটেমের উপর একটি নির্দিষ্ট ফাংশন প্রয়োগ করে নতুন একটি লিস্ট তৈরি করে।
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x * x, numbers))
print(squared) # আউটপুট: [1, 4, 9, 16, 25]এখানে lambda x: x * x হলো একটি অ্যানোনিমাস ফাংশন, যা map ফাংশনের মাধ্যমে প্রতিটি আইটেমের উপর প্রয়োগ করা হয়েছে।
উদাহরণ ৪: filter ফাংশন ব্যবহার করে
filter ফাংশন লিস্টের প্রতিটি আইটেমে একটি নির্দিষ্ট শর্ত প্রয়োগ করে এবং যে সব আইটেম সেই শর্ত পূরণ করে সেগুলো দিয়ে নতুন একটি লিস্ট তৈরি করে।
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # আউটপুট: [2, 4, 6]এখানে lambda x: x % 2 == 0 হলো এমন একটি ফাংশন, যা filter ফাংশনের মাধ্যমে শুধু জোড় সংখ্যা নির্বাচন করেছে।
উদাহরণ ৫: reduce ফাংশন ব্যবহার করে
reduce ফাংশন একটি লিস্টের সকল আইটেমকে একত্রিত করে একটি একক মান প্রদান করে। এটি Python-এর functools মডিউল থেকে ইমপোর্ট করতে হয়।
from functools import reduce
numbers = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, numbers)
print(product) # আউটপুট: 24 (1 * 2 * 3 * 4)এখানে lambda x, y: x * y একটি ফাংশন, যা reduce ফাংশনের মাধ্যমে লিস্টের সকল আইটেমের গুণফল প্রদান করেছে।
হাইয়ার-অর্ডার ফাংশনের সুবিধা
১. কোডের সংক্ষিপ্ততা: হাইয়ার-অর্ডার ফাংশন কোডকে সংক্ষিপ্ত করে এবং একই কাজ পুনরাবৃত্তি এড়ায়।
২. রিইউজেবিলিটি: একবার লেখা ফাংশন বিভিন্ন প্রসেসিং টাস্কের জন্য পুনরায় ব্যবহার করা যায়।
৩. ডাইনামিক প্রোগ্রামিং: হাইয়ার-অর্ডার ফাংশনের সাহায্যে ডাইনামিক প্রোগ্রামিং করা যায়, যেখানে এক ফাংশন থেকে অন্য ফাংশন তৈরি বা রিটার্ন করা যায়।
৪. ফাংশনাল প্রোগ্রামিং স্টাইল: হাইয়ার-অর্ডার ফাংশন ফাংশনাল প্রোগ্রামিংয়ের একটি ভিত্তি, যা কোডকে আরও মডুলার এবং রিডেবল রাখে।
হাইয়ার-অর্ডার ফাংশনের সীমাবদ্ধতা
১. কোডের জটিলতা: ফাংশন ইনপুট বা আউটপুট হিসেবে ব্যবহার করলে কোড জটিল হতে পারে এবং বোঝা কঠিন হতে পারে।
২. ডিবাগিং কঠিন: হাইয়ার-অর্ডার ফাংশনের ক্ষেত্রে কোডের ভুল খুঁজে বের করা কিছুটা কঠিন হতে পারে, কারণ একাধিক স্তরে ফাংশনগুলোর এক্সিকিউশন ঘটে।
সংক্ষেপে, হাইয়ার-অর্ডার ফাংশন প্রোগ্রামিংয়ে এমন একটি ধারণা, যা ফাংশনাল প্রোগ্রামিংয়ের লজিক সহজ ও কার্যকরী করে। এটি কোড সংক্ষিপ্ত করে এবং ফাংশনগুলোকে পুনরায় ব্যবহারযোগ্য করে তোলে। তবে, এটি ব্যবহারে কোড জটিল হতে পারে, তাই ফাংশনের লজিক ভালোভাবে বুঝে ব্যবহার করাই উত্তম।
হায়ার-অর্ডার ফাংশন (Higher-Order Function) হলো এমন একটি ফাংশন, যা অন্য ফাংশনকে প্যারামিটার হিসেবে নিতে পারে, অথবা ফাংশনকে রিটার্ন হিসেবে প্রদান করতে পারে। এটি প্রোগ্রামিংয়ের একটি শক্তিশালী বৈশিষ্ট্য, যা ফাংশনকে আরও ডাইনামিক ও পুনরায় ব্যবহারযোগ্য করে তোলে। ফাংশনাল প্রোগ্রামিংয়ে হায়ার-অর্ডার ফাংশন খুবই গুরুত্বপূর্ণ, কারণ এটি কোডকে ছোট, পরিষ্কার, এবং পুনরায় ব্যবহারযোগ্য করে তোলে।
হায়ার-অর্ডার ফাংশনের বৈশিষ্ট্য
১. ফাংশন প্যারামিটার হিসেবে গ্রহণ: হায়ার-অর্ডার ফাংশন অন্য ফাংশনকে প্যারামিটার হিসেবে নিতে পারে। উদাহরণস্বরূপ, map, filter, এবং reduce ফাংশনগুলো অন্য ফাংশনকে প্যারামিটার হিসেবে গ্রহণ করে।
২. ফাংশন রিটার্ন করতে পারে: হায়ার-অর্ডার ফাংশন অন্য ফাংশনকে রিটার্ন হিসেবে দিতে পারে, যা কোডের ডাইনামিজম বৃদ্ধি করে এবং একই ফাংশনকে ভিন্ন প্রেক্ষিতে ব্যবহার করতে সহায়তা করে।
হায়ার-অর্ডার ফাংশনের উদাহরণ
উদাহরণ ১: ফাংশন প্যারামিটার হিসেবে ব্যবহার (Python)
map একটি হায়ার-অর্ডার ফাংশন, যা একটি লিস্টের প্রতিটি উপাদানে নির্দিষ্ট একটি ফাংশন প্রয়োগ করে।
def square(x):
return x * x
numbers = [1, 2, 3, 4]
squared_numbers = list(map(square, numbers))
print(squared_numbers) # আউটপুট: [1, 4, 9, 16]এখানে map ফাংশনটি square ফাংশনকে প্যারামিটার হিসেবে গ্রহণ করেছে এবং numbers তালিকার প্রতিটি উপাদানে square ফাংশন প্রয়োগ করেছে।
উদাহরণ ২: ফাংশন রিটার্ন করা
হায়ার-অর্ডার ফাংশন ফাংশনকে রিটার্ন করতেও পারে। উদাহরণস্বরূপ:
def multiplier(factor):
def multiply_by(x):
return x * factor
return multiply_by
times_three = multiplier(3)
print(times_three(10)) # আউটপুট: 30এখানে multiplier ফাংশনটি একটি হায়ার-অর্ডার ফাংশন, কারণ এটি একটি ফাংশন multiply_by রিটার্ন করছে। times_three হলো multiplier(3) ফাংশনের ফলাফল, যা যে কোনো সংখ্যাকে ৩ দিয়ে গুণ করতে পারবে।
উদাহরণ ৩: filter এবং reduce ব্যবহার
filter ফাংশন একটি শর্ত অনুযায়ী লিস্টের উপাদানগুলোকে ফিল্টার করে। উদাহরণস্বরূপ, একটি লিস্ট থেকে শুধুমাত্র জোড় সংখ্যাগুলো বের করা:
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # আউটপুট: [2, 4, 6]reduce ফাংশন লিস্টের উপাদানগুলোকে একটি একক ফলাফলে রূপান্তরিত করতে ব্যবহৃত হয়।
from functools import reduce
numbers = [1, 2, 3, 4]
sum_numbers = reduce(lambda x, y: x + y, numbers)
print(sum_numbers) # আউটপুট: 10এখানে reduce ফাংশনটি লিস্টের সবগুলো উপাদানকে যোগ করে একটি একক মান প্রদান করছে।
হায়ার-অর্ডার ফাংশনের সুবিধা
১. কোডের পুনঃব্যবহারযোগ্যতা: হায়ার-অর্ডার ফাংশন ব্যবহার করে ফাংশনগুলোকে সহজে পুনঃব্যবহার করা যায়।
২. কোডের সরলতা বৃদ্ধি: একই কাজ বারবার না লিখে একটি ফাংশন ব্যবহার করা যায়, যা কোডের সরলতা বৃদ্ধি করে।
৩. ডাইনামিক প্রোগ্রামিং: হায়ার-অর্ডার ফাংশনের সাহায্যে প্রোগ্রামিং আরও ডাইনামিক ও নমনীয় হয়।
সংক্ষেপে, হায়ার-অর্ডার ফাংশন প্রোগ্রামিংয়ে একটি শক্তিশালী ধারণা, যা কোডকে ছোট, সহজ এবং পুনঃব্যবহারযোগ্য করে তোলে, এবং এটি ফাংশনাল প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ।
ফাংশনাল প্রোগ্রামিংয়ের অন্যতম বৈশিষ্ট্য হলো ফাংশনকে প্যারামিটার হিসেবে পাস করা এবং ফাংশনকে রিটার্ন করা। এই বৈশিষ্ট্যগুলোর মাধ্যমে প্রোগ্রামিং আরও ডাইনামিক এবং পুনরায় ব্যবহারযোগ্য হয়ে ওঠে। ফাংশনগুলোকে প্রথম শ্রেণির নাগরিক (First-Class Citizens) হিসেবে ব্যবহার করা যায়, অর্থাৎ এগুলোকে অন্যান্য ডেটা টাইপের মতো ভেরিয়েবল হিসেবে সংরক্ষণ, প্যারামিটার হিসেবে পাস এবং ফাংশন থেকে রিটার্ন করা যায়।
ফাংশনকে প্যারামিটার হিসেবে পাস করা
ফাংশনাল প্রোগ্রামিংয়ের অন্যতম শক্তিশালী বৈশিষ্ট্য হলো ফাংশনকে প্যারামিটার হিসেবে পাস করা। এর মাধ্যমে ফাংশনগুলোকে আরও জেনেরিক এবং পুনরায় ব্যবহারযোগ্য করে তোলা যায়। এটি হায়ার-অর্ডার ফাংশন তৈরিতে ব্যবহৃত হয়, যেখানে একটি ফাংশন অন্য একটি ফাংশনকে প্যারামিটার হিসেবে গ্রহণ করে।
উদাহরণ (Python):
def apply_operation(x, y, operation):
return operation(x, y)
def add(a, b):
return a + b
def multiply(a, b):
return a * b
# add এবং multiply ফাংশনকে প্যারামিটার হিসেবে পাঠানো হচ্ছে
print(apply_operation(5, 3, add)) # আউটপুট: 8
print(apply_operation(5, 3, multiply)) # আউটপুট: 15এখানে apply_operation একটি হায়ার-অর্ডার ফাংশন, যা operation প্যারামিটার হিসেবে একটি ফাংশন গ্রহণ করে। এটি add এবং multiply ফাংশনকে প্যারামিটার হিসেবে পাস করে আলাদা আলাদা আউটপুট প্রদান করছে।
ফাংশনকে রিটার্ন করা
ফাংশনাল প্রোগ্রামিংয়ে একটি ফাংশন অন্য একটি ফাংশনকে রিটার্ন করতে পারে। এটি ক্লোজার তৈরিতে সহায়ক, যেখানে একটি ফাংশন তার লোকাল ভেরিয়েবল এবং ফাংশন সহ রিটার্ন হয়। এই পদ্ধতি কোডকে আরও ডাইনামিক করে এবং ফাংশনগুলোকে আরও ফ্লেক্সিবলভাবে ব্যবহার করার সুযোগ দেয়।
উদাহরণ (Python):
def power(exponent):
def raise_to_power(x):
return x ** exponent
return raise_to_power
# power ফাংশন থেকে নতুন ফাংশন তৈরি করা হচ্ছে
square = power(2)
cube = power(3)
print(square(5)) # আউটপুট: 25
print(cube(5)) # আউটপুট: 125এখানে power ফাংশনটি raise_to_power নামক একটি ফাংশন রিটার্ন করছে, যা তার চারপাশের exponent ভেরিয়েবল অ্যাক্সেস করতে পারে। এই ক্লোজারের কারণে square এবং cube ফাংশন ভিন্ন ভিন্ন exponent মানে কাজ করে।
ফাংশন প্যারামিটার এবং ফাংশন রিটার্নের ব্যবহারিক সুবিধা
১. কোডের পুনরায় ব্যবহারযোগ্যতা: ফাংশন প্যারামিটার হিসেবে পাস করার মাধ্যমে সাধারণ ফাংশনগুলোকে কাস্টমাইজ করা যায়, ফলে কোডকে পুনরায় ব্যবহারযোগ্য করা সহজ হয়।
২. কোডের ডাইনামিক আচরণ: ফাংশন রিটার্ন করার মাধ্যমে ফাংশনগুলো ডাইনামিক আচরণ করে। অর্থাৎ, প্রোগ্রামের প্রয়োজনে আলাদা আলাদা কাজ সম্পন্ন করার জন্য একই ফাংশন থেকে ভিন্ন ভিন্ন ফাংশন তৈরি করা যায়।
৩. জটিল কাজ সহজে সম্পাদন: হায়ার-অর্ডার ফাংশনের সাহায্যে জটিল কাজকে সহজে সম্পাদন করা যায়, কারণ এতে কোড ছোট, সংক্ষিপ্ত এবং পাঠযোগ্য থাকে।
ফাংশনকে প্যারামিটার হিসেবে পাস করা এবং ফাংশন রিটার্ন করা - তুলনামূলক চিত্র
| বৈশিষ্ট্য | ফাংশনকে প্যারামিটার হিসেবে পাস করা | ফাংশনকে রিটার্ন করা |
|---|---|---|
| বিবরণ | ফাংশন প্যারামিটার হিসেবে পাস করে নির্দিষ্ট কাজ সম্পাদন করা যায় | ফাংশন থেকে আরেকটি ফাংশন রিটার্ন করা যায় |
| কোডের নমনীয়তা | ফাংশনগুলো আরও কাস্টমাইজ করা যায় | প্রয়োজন অনুযায়ী নতুন ফাংশন তৈরি করা যায় |
| ব্যবহারিক উদাহরণ | map, filter, reduce | ক্লোজার, ফ্যাক্টরি ফাংশন |
| কোডের জটিলতা | জটিল কাজ ছোট ফাংশনে ভাগ করা যায় | ফাংশনের ভেতর ফাংশন তৈরি করে ক্লোজার তৈরি করা যায় |
| প্রোগ্রামিং প্যারাডাইম | সাধারণত হায়ার-অর্ডার ফাংশন তৈরিতে ব্যবহৃত | ক্লোজার বা ফাংশন কারখানা তৈরি করতে ব্যবহৃত |
ফাংশনকে প্যারামিটার হিসেবে পাস করা এবং ফাংশনকে রিটার্ন করা প্রোগ্রামিংয়ের নমনীয়তা এবং কার্যকারিতা বৃদ্ধি করে। এটি প্রোগ্রামারদের জন্য একটি শক্তিশালী টুল হিসেবে কাজ করে এবং ফাংশনাল প্রোগ্রামিংয়ে অত্যন্ত গুরুত্বপূর্ণ একটি বৈশিষ্ট্য।
ম্যাপ (map), ফিল্টার (filter) এবং রিডিউস (reduce) ফাংশন হলো ফাংশনাল প্রোগ্রামিংয়ের কিছু গুরুত্বপূর্ণ টুল, যা Python সহ বিভিন্ন প্রোগ্রামিং ভাষায় ব্যবহৃত হয়। এই ফাংশনগুলো তালিকা বা সিকোয়েন্সের উপর কার্যকর এবং পুনরাবৃত্তিমূলক কাজ সম্পন্ন করতে বিশেষভাবে সহায়ক। এই ফাংশনগুলো কোডকে সংক্ষিপ্ত, কার্যকর এবং রিডেবল করে তোলে।
১. ম্যাপ (map) ফাংশন
map ফাংশন একটি ফাংশন এবং একটি iterable (যেমন লিস্ট, টাপল, সেট) গ্রহণ করে এবং সেই ফাংশনটি iterable-এর প্রতিটি উপাদানের উপর প্রয়োগ করে একটি নতুন iterable প্রদান করে। এটি প্রতিটি উপাদানকে ফাংশনের মাধ্যমে প্রক্রিয়া করে নতুন মানের একটি iterable তৈরি করে।
সিনট্যাক্স:
map(function, iterable)উদাহরণ:
numbers = [1, 2, 3, 4, 5]
# প্রতিটি সংখ্যার দ্বিগুণ করবে
doubled = list(map(lambda x: x * 2, numbers))
print(doubled) # আউটপুট: [2, 4, 6, 8, 10]কিভাবে কাজ করে?
এই উদাহরণে lambda ফাংশন x এর মানকে ২ দ্বারা গুণ করে এবং map ফাংশন এটি numbers তালিকার প্রতিটি উপাদানের উপর প্রয়োগ করে নতুন তালিকা তৈরি করে।
২. ফিল্টার (filter) ফাংশন
filter ফাংশন একটি ফাংশন এবং একটি iterable গ্রহণ করে এবং সেই ফাংশনের শর্ত অনুসারে কেবলমাত্র যেসব উপাদান শর্ত পূরণ করে তাদের একটি নতুন iterable তৈরি করে। এটি প্রতিটি উপাদানকে শর্তের ভিত্তিতে যাচাই করে এবং শুধুমাত্র True ফলাফল দেয়া উপাদানগুলোকে রেখে বাকিগুলো বাদ দেয়।
সিনট্যাক্স:
filter(function, iterable)উদাহরণ:
numbers = [1, 2, 3, 4, 5, 6]
# শুধু জোড় সংখ্যা রেখে দেবে
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # আউটপুট: [2, 4, 6]কিভাবে কাজ করে?
এই উদাহরণে lambda ফাংশন শুধুমাত্র এমন সংখ্যাগুলিকে True প্রদান করে, যেগুলো ২ দিয়ে বিভাজ্য। filter ফাংশন সেই শর্ত পূরণকারী উপাদানগুলো নতুন তালিকায় যুক্ত করে।
৩. রিডিউস (reduce) ফাংশন
reduce ফাংশন একটি ফাংশন এবং একটি iterable নেয় এবং সেটি ধারাবাহিকভাবে প্রথম দুটি উপাদান নিয়ে সেই ফাংশনের কার্যকরী ফলাফল প্রদান করে। এরপর সেই ফলাফল এবং পরবর্তী উপাদান নিয়ে আবার ফাংশন কার্যকর করে, এবং এভাবে চলতে থাকে যতক্ষণ পর্যন্ত সব উপাদান প্রসেস না হয়। এটি সাধারণত একটি লিস্টের সকল উপাদানকে একক মানে সংকুচিত করতে ব্যবহৃত হয়।
সিনট্যাক্স:
from functools import reduce
reduce(function, iterable)উদাহরণ:
from functools import reduce
numbers = [1, 2, 3, 4, 5]
# সব সংখ্যার গুণফল দেবে
product = reduce(lambda x, y: x * y, numbers)
print(product) # আউটপুট: 120 (1*2*3*4*5)কিভাবে কাজ করে?
এই উদাহরণে lambda ফাংশন x এবং y গ্রহণ করে তাদের গুণফল প্রদান করে। reduce ফাংশন প্রথমে তালিকার প্রথম দুটি উপাদানকে গুণ করে ফলাফল হিসেবে নেয় এবং তারপরে সেই ফলাফল ও পরবর্তী উপাদানকে গুণ করে নতুন ফলাফল তৈরি করে, এভাবে তালিকার শেষ পর্যন্ত চলে।
তুলনামূলকভাবে map, filter এবং reduce এর ব্যবহার
| ফাংশন | কাজ করার ধরন | উদ্দেশ্য |
|---|---|---|
| map | প্রতিটি উপাদানে ফাংশন প্রয়োগ করা | প্রতিটি উপাদানে ফাংশন প্রয়োগ করে নতুন iterable তৈরি করা |
| filter | উপাদান বাছাই করা | শর্ত পূরণকারী উপাদান বাছাই করে নতুন iterable তৈরি করা |
| reduce | ধারাবাহিকভাবে উপাদান গুলোকে সংকুচিত করা | iterable-এর উপাদানগুলোকে সংকুচিত করে একক মানে নিয়ে আসা |
উদাহরণসমূহ একত্রে
ধরা যাক, আমাদের একটি তালিকা রয়েছে এবং আমরা এর প্রতিটি জোড় সংখ্যাকে দ্বিগুণ করতে এবং তাদের যোগফল বের করতে চাই।
from functools import reduce
numbers = [1, 2, 3, 4, 5, 6]
# প্রথমে filter এর মাধ্যমে শুধু জোড় সংখ্যা বের করছি
even_numbers = filter(lambda x: x % 2 == 0, numbers)
# এরপর map এর মাধ্যমে প্রতিটি জোড় সংখ্যাকে দ্বিগুণ করছি
doubled_even_numbers = map(lambda x: x * 2, even_numbers)
# সবশেষে reduce এর মাধ্যমে সব উপাদানের যোগফল বের করছি
sum_of_doubled_even_numbers = reduce(lambda x, y: x + y, doubled_even_numbers)
print(sum_of_doubled_even_numbers) # আউটপুট: 24এই উদাহরণে প্রথমে filter ব্যবহার করে কেবল জোড় সংখ্যাগুলো রাখা হয়েছে। এরপর map ব্যবহার করে প্রতিটি জোড় সংখ্যাকে দ্বিগুণ করা হয়েছে, এবং সবশেষে reduce ব্যবহার করে সেগুলোর যোগফল বের করা হয়েছে।
সংক্ষেপে, map, filter, এবং reduce ফাংশনগুলো ফাংশনাল প্রোগ্রামিংয়ের সহজতর কৌশল হিসেবে ব্যবহৃত হয় যা তালিকা বা iterable-এর উপর নির্দিষ্ট কার্যকরী ফাংশন প্রয়োগ করে কোডকে সংক্ষিপ্ত এবং কার্যকর করে তোলে।
Read more