reduce এবং fold হল ফাংশনাল প্রোগ্রামিংয়ে ব্যবহৃত দুটি অত্যন্ত গুরুত্বপূর্ণ অপারেশন যা স্কালাতে কালেকশনগুলির উপাদানগুলোর উপর একত্রিত অপারেশন বা রিডাকশন (reduction) প্রক্রিয়া করতে ব্যবহৃত হয়। এই দুটি ফাংশন মূলত কালেকশনের সকল উপাদানকে একটি একক মানে পরিণত করার জন্য ব্যবহৃত হয়, কিন্তু তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে।
reduce ফাংশন
reduce ফাংশনটি কালেকশনের উপাদানগুলোকে একত্রিত করার জন্য ব্যবহৃত হয়, কিন্তু এটি ডিফল্ট ভ্যালু (initial value) ব্যবহার করে না। এর মানে হলো, reduce প্রথম দুটি উপাদানকে নিয়ে কাজ শুরু করে, তারপর পরবর্তী উপাদানটির সাথে পুনরায় অপারেশন করে এবং এভাবে সকল উপাদানকে একত্রিত করে একটি একক মান তৈরি করে।
reduce এর সাধারণ স Sintেক্স:
val result = collection.reduce((a, b) => operation)এখানে a এবং b দুটি উপাদান, এবং operation হলো দুটি উপাদানকে একত্রিত করার জন্য ব্যবহৃত ফাংশন।
উদাহরণ:
val numbers = List(1, 2, 3, 4)
// Summing the elements using reduce
val sum = numbers.reduce((x, y) => x + y)
println(sum) // 10
// Finding the maximum value using reduce
val max = numbers.reduce((x, y) => if (x > y) x else y)
println(max) // 4এখানে, reduce ফাংশন প্রথমে 1 এবং 2 কে যোগ করে, তারপর সেই ফলাফলকে 3 এর সাথে যোগ করে, এবং অবশেষে 4 এর সাথে যোগ করে মোট মান বের করে।
fold ফাংশন
fold ফাংশনটি ডিফল্ট ভ্যালু (initial value) দিয়ে শুরু হয়, যা reduce এর সাথে মূল পার্থক্য। fold প্রথমে একটি প্রাথমিক মান (initial value) নিয়ে শুরু করে এবং তারপর কালেকশনের উপাদানগুলোর সাথে কাজ করে। এটি নিরাপদ, কারণ যদি কালেকশনটি খালি হয়, তবে fold একটি নির্দিষ্ট প্রাথমিক মান রিটার্ন করবে, কিন্তু reduce খালি কালেকশনের ক্ষেত্রে একটি ত্রুটি (error) সৃষ্টি করতে পারে।
fold এর সাধারণ স Sintেক্স:
val result = collection.fold(initialValue)((a, b) => operation)এখানে initialValue হলো প্রথম মান যা শুরুতে ব্যবহার করা হয়, এবং a এবং b দুটি উপাদান।
উদাহরণ:
val numbers = List(1, 2, 3, 4)
// Summing the elements using fold with initial value
val sum = numbers.fold(0)((x, y) => x + y)
println(sum) // 10
// Finding the maximum value using fold with initial value
val max = numbers.fold(Int.MinValue)((x, y) => if (x > y) x else y)
println(max) // 4এখানে, fold প্রথমে 0 (initial value) দিয়ে শুরু হয় এবং তারপর প্রতিটি উপাদানকে ওই মানের সাথে যোগ করে। একইভাবে, সর্বাধিক মান বের করার জন্য Int.MinValue ব্যবহার করা হয়েছে।
reduce এবং fold এর মধ্যে পার্থক্য
- ডিফল্ট ভ্যালু (Initial Value):
reduce: ডিফল্ট ভ্যালু নেই, প্রথম দুটি উপাদানকে নিয়ে অপারেশন শুরু হয়।fold: একটি প্রাথমিক মান (initial value) প্রদান করতে হয় যা অপারেশন শুরু করার জন্য ব্যবহৃত হয়।
- খালি কালেকশন:
reduce: খালি কালেকশনের উপরreduceচালানো হলে ত্রুটি (error) ঘটবে।fold: খালি কালেকশনের জন্য একটি প্রাথমিক মান ফেরত দেয়, তাই এটি নিরাপদ।
- নিরাপত্তা:
reduce: খালি কালেকশনের জন্য নিরাপদ নয়, এটি অবশ্যই অন্তত দুটি উপাদান থাকতে হবে।fold: এটি নিরাপদ, কারণ আপনি একটি ডিফল্ট মান প্রদান করতে পারেন।
সারাংশ
reduceএবংfoldদুটি গুরুত্বপূর্ণ ফাংশনাল অপারেশন যা কালেকশনের উপাদানগুলির উপর একত্রিত অপারেশন বা রিডাকশন করতে ব্যবহৃত হয়।reduceডিফল্ট ভ্যালু ছাড়া কাজ করে, তবে এটি খালি কালেকশনের জন্য ত্রুটি সৃষ্টি করতে পারে, যেখানেfoldএকটি প্রাথমিক মান নিয়ে কাজ শুরু করে এবং নিরাপদভাবে কাজ করতে পারে।foldব্যবহার করার সময় খালি কালেকশনের জন্য একটি নিরাপদ প্রাথমিক মান দিতে পারা যায়।
Read more