ফাংশনাল ট্রান্সফরমেশন (Functional Transformations) হল সেই অপারেশনসমূহ যা কালেকশনগুলির উপাদানগুলোর উপর ফাংশন প্রয়োগ করে তাদের পরিবর্তন বা নতুন কালেকশন তৈরি করতে সহায়ক হয়। স্কালার কালেকশনগুলোতে map, filter, flatMap, reduce, এবং অন্যান্য হাইঅর্ডার ফাংশন ব্যবহার করে ফাংশনাল ট্রান্সফরমেশন করা যায়।
এই ট্রান্সফরমেশনগুলি প্রধানত ইমমিউটেবিলিটি (Immutable) নীতির উপর ভিত্তি করে কাজ করে, অর্থাৎ মূল কালেকশনটি অপরিবর্তিত থাকে এবং একটি নতুন কালেকশন তৈরি হয়।
১. map ফাংশন
map ফাংশন একটি ফাংশনকে কালেকশনের প্রতিটি উপাদানে প্রয়োগ করে এবং একটি নতুন কালেকশন তৈরি করে।
উদাহরণ:
val numbers = List(1, 2, 3, 4, 5)
val squaredNumbers = numbers.map(x => x * x)
println(squaredNumbers) // List(1, 4, 9, 16, 25)এখানে map ফাংশন প্রতিটি উপাদানে x * x ফাংশন প্রয়োগ করেছে, ফলে একটি নতুন কালেকশন তৈরি হয়েছে যা সংখ্যাগুলোর বর্গফল ধারণ করে।
২. filter ফাংশন
filter ফাংশন একটি শর্তাবলী (predicate) অনুসারে কালেকশনের উপাদানগুলোকে ফিল্টার করে এবং একটি নতুন কালেকশন তৈরি করে যেখানে শুধু শর্ত পূরণকারী উপাদানগুলো থাকবে।
উদাহরণ:
val numbers = List(1, 2, 3, 4, 5, 6)
val evenNumbers = numbers.filter(x => x % 2 == 0)
println(evenNumbers) // List(2, 4, 6)এখানে filter ফাংশন ব্যবহার করে শুধু সেগুলি নির্বাচন করা হয়েছে যা জোড় সংখ্যা।
৩. flatMap ফাংশন
flatMap ফাংশন একটি কালেকশনের প্রতিটি উপাদানে একটি ফাংশন প্রয়োগ করে এবং প্রত্যেক উপাদানের জন্য একটি নতুন কালেকশন তৈরি করে। তারপর এই নতুন কালেকশনগুলোকে একত্রিত (flatten) করে একটি একক কালেকশনে রূপান্তরিত করা হয়।
উদাহরণ:
val listOfLists = List(List(1, 2), List(3, 4), List(5, 6))
val flattenedList = listOfLists.flatMap(x => x)
println(flattenedList) // List(1, 2, 3, 4, 5, 6)এখানে, flatMap প্রতিটি উপাদানকে (যা নিজেই একটি লিস্ট) সমতল করেছে এবং একটি একক লিস্ট তৈরি করেছে।
৪. reduce ফাংশন
reduce ফাংশন একটি কালেকশনের সমস্ত উপাদানকে একত্রিত (combine) করতে ব্যবহৃত হয়। এটি একটি বাইনারি ফাংশন গ্রহণ করে এবং একে একে উপাদানগুলোকে পরস্পরের সাথে একত্রিত করে একটি একক ফলাফল তৈরি করে।
উদাহরণ:
val numbers = List(1, 2, 3, 4, 5)
val sum = numbers.reduce((x, y) => x + y)
println(sum) // 15এখানে, reduce ফাংশন সমস্ত সংখ্যার যোগফল বের করেছে।
৫. fold ফাংশন
fold ফাংশন reduce এর মতোই কাজ করে, তবে এতে একটি ইনিশিয়াল মান (initial value) প্রদান করা হয়। এটি কালেকশনের উপাদানগুলোকে এই ইনিশিয়াল মানের সাথে একত্রিত করে।
উদাহরণ:
val numbers = List(1, 2, 3, 4, 5)
val product = numbers.fold(1)((x, y) => x * y)
println(product) // 120এখানে, fold ফাংশন একে একে সব সংখ্যার গুণফল বের করেছে, কিন্তু এটি প্রথমে ইনিশিয়াল মান 1 থেকে শুরু করেছে।
সারাংশ
স্কালাতে ফাংশনাল ট্রান্সফরমেশনগুলো (যেমন map, filter, flatMap, reduce, fold) খুবই শক্তিশালী এবং কার্যকরী টুলস যা কালেকশনের উপাদানগুলোর উপর বিভিন্ন প্রক্রিয়া পরিচালনা করতে সহায়ক। এই ফাংশনগুলো ডেটা প্রক্রিয়াকরণের জন্য সহজ, পরিষ্কার, এবং কার্যকরী উপায় প্রদান করে।
Read more