Higher-Order Functions এবং Functional Collections (হায়ার-অর্ডার ফাংশন এবং ফাংশনাল কালেকশনস)

স্কালা কালেকশন (Scala Collections) - Computer Programming

297

ফাংশনাল প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ ধারণা হল হায়ার-অর্ডার ফাংশন (Higher-Order Functions)। স্কালাতে, হায়ার-অর্ডার ফাংশনগুলি এক ধরনের ফাংশন যা অন্য ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করতে পারে অথবা ফাংশন ফেরত দিতে পারে। এগুলি ডেটা প্রক্রিয়াকরণের ক্ষেত্রে অত্যন্ত শক্তিশালী টুলস হিসেবে কাজ করে।

এছাড়াও, ফাংশনাল কালেকশনস হলো এমন কালেকশন, যা ফাংশনাল প্রোগ্রামিং স্টাইল অনুসরণ করে, এবং এসব কালেকশন তাদের উপাদানগুলোর উপর হায়ার-অর্ডার ফাংশন যেমন map, filter, reduce ইত্যাদি অ্যাপ্লাই করতে সক্ষম।


হায়ার-অর্ডার ফাংশন (Higher-Order Functions)

হায়ার-অর্ডার ফাংশনগুলি এমন ফাংশন যা নিম্নলিখিত কাজ করতে পারে:

  1. ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করা: একটি ফাংশন অন্য ফাংশনকে আর্গুমেন্ট হিসেবে নিতে পারে।
  2. ফাংশন ফেরত দেওয়া: একটি ফাংশন অন্য একটি ফাংশন ফেরত দিতে পারে।

উদাহরণ:

// একটি হায়ার-অর্ডার ফাংশন যা একটি ফাংশন গ্রহণ করে এবং তাকে প্রয়োগ করে
def applyFunction(f: Int => Int, x: Int): Int = f(x)

// একটি সাধারণ ফাংশন
def double(x: Int): Int = x * 2

val result = applyFunction(double, 4)
println(result) // 8

এখানে, applyFunction একটি হায়ার-অর্ডার ফাংশন যা double ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করছে এবং সেটি প্রয়োগ করছে।


ফাংশনাল কালেকশনস (Functional Collections)

ফাংশনাল কালেকশনস হল এমন কালেকশন যেগুলি ফাংশনাল প্রোগ্রামিংয়ের স্টাইল অনুসরণ করে এবং এগুলির উপাদানগুলির উপর বিভিন্ন ফাংশনাল অপারেশন করতে সক্ষম। স্কালাতে এই ধরনের কালেকশনগুলি বিভিন্ন ধরনের অপারেশন সমর্থন করে, যেমন:

  1. map: প্রতিটি উপাদানে একটি ফাংশন প্রয়োগ করে নতুন একটি কালেকশন তৈরি করে।
  2. filter: একটি শর্তাবলী অনুসারে উপাদানগুলো ফিল্টার করে।
  3. reduce: কালেকশনের উপাদানগুলোকে একত্রিত করে একটি একক মান তৈরি করে।

উদাহরণ:

  1. map ব্যবহার:
val numbers = List(1, 2, 3, 4, 5)
val doubled = numbers.map(x => x * 2)
println(doubled) // List(2, 4, 6, 8, 10)
  1. filter ব্যবহার:
val evenNumbers = numbers.filter(x => x % 2 == 0)
println(evenNumbers) // List(2, 4)
  1. reduce ব্যবহার:
val sum = numbers.reduce((x, y) => x + y)
println(sum) // 15

ফাংশনাল প্রোগ্রামিংয়ের সুবিধা

ফাংশনাল প্রোগ্রামিং এবং হায়ার-অর্ডার ফাংশনগুলি উন্নত সফটওয়্যার ডিজাইনে সহায়ক হয়। কিছু গুরুত্বপূর্ণ সুবিধা হলো:

  • অপারেশনগুলির পুনঃব্যবহারযোগ্যতা: একটি হায়ার-অর্ডার ফাংশন একাধিক স্থানে ব্যবহার করা যেতে পারে, যা কোড পুনঃব্যবহারযোগ্যতা বাড়ায়।
  • ইমমিউটেবিলিটি: কালেকশনগুলির উপর ফাংশনাল অপারেশন ইমমিউটেবল (অপরিবর্তনীয়) হিসেবে কাজ করে, ফলে কোন উপাদান পরিবর্তন না করে নতুন কালেকশন তৈরি হয়।
  • পারালাল প্রক্রিয়া: ফাংশনাল স্টাইলের কারণে কোড সহজেই সমান্তরাল প্রক্রিয়াকরণের জন্য প্রস্তুত হয়, যা বড় পরিসরে ডেটা প্রক্রিয়াকরণের ক্ষেত্রে কার্যকরী।

সারাংশ

হায়ার-অর্ডার ফাংশন এবং ফাংশনাল কালেকশনস ফাংশনাল প্রোগ্রামিংয়ের অন্যতম মূল উপাদান। স্কালাতে, এগুলি ফাংশনাল প্রোগ্রামিংয়ের সুবিধাগুলিকে কাজে লাগিয়ে ডেটা প্রক্রিয়াকরণ আরও সুশৃঙ্খল, পুনঃব্যবহারযোগ্য, এবং কার্যকরী করে তোলে। map, filter, এবং reduce এর মতো ফাংশনগুলি বিভিন্ন ধরনের ডেটা প্রক্রিয়া সহজ করে তোলে, যা উন্নত সফটওয়্যার ডিজাইনে সহায়ক হয়।

Content added By

Higher-Order Functions (হায়ার-অর্ডার ফাংশন) হল এমন ফাংশন যা অন্য ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করতে পারে অথবা ফাংশন ফেরত দিতে পারে। এর মানে হলো, একটি হায়ার-অর্ডার ফাংশন অন্যান্য ফাংশনগুলির উপর কাজ করতে পারে, যা ফাংশনাল প্রোগ্রামিং ভাষাগুলোর একটি অন্যতম প্রধান বৈশিষ্ট্য।


হায়ার-অর্ডার ফাংশনের বৈশিষ্ট্য

  1. ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ
    হায়ার-অর্ডার ফাংশন একটি ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করতে পারে। এর ফলে, ফাংশনগুলি একে অপরের সাথে সম্পর্কিত হয়ে কাজ করতে পারে।
  2. ফাংশন ফেরত দেয়
    হায়ার-অর্ডার ফাংশন একটি নতুন ফাংশন ফেরত দিতে পারে। এই ফাংশনটি পরবর্তীতে প্রয়োগ করা যায়।
  3. ফাংশন প্রোগ্রামিংয়ের মৌলিক ধারণা
    ফাংশনাল প্রোগ্রামিং ভাষায় হায়ার-অর্ডার ফাংশন একটি অপরিহার্য উপাদান, যা কোডের পুনঃব্যবহারযোগ্যতা, বুদ্ধিমত্তা এবং কার্যকারিতা বাড়ায়।

উদাহরণ

  1. ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ:
// একটি হায়ার-অর্ডার ফাংশন যা একটি ফাংশন গ্রহণ করে এবং তা প্রয়োগ করে
def applyFunction(f: Int => Int, x: Int): Int = f(x)

// একটি সাধারণ ফাংশন
def double(x: Int): Int = x * 2

val result = applyFunction(double, 4)
println(result) // 8

এখানে, applyFunction একটি হায়ার-অর্ডার ফাংশন যা double ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করছে এবং x এর মান দ্বিগুণ করছে।


  1. ফাংশন ফেরত দেওয়া:
// একটি হায়ার-অর্ডার ফাংশন যা একটি ফাংশন ফেরত দেয়
def multiplier(factor: Int): (Int => Int) = {
  (x: Int) => x * factor
}

val multiplyBy2 = multiplier(2)
println(multiplyBy2(5)) // 10

এখানে, multiplier একটি ফাংশন গ্রহণ করছে এবং একটি নতুন ফাংশন ফেরত দিচ্ছে, যা একটি নির্দিষ্ট গুণফল তৈরি করে। এই ফাংশনটি multiplyBy2(5) হিসাবে ব্যবহৃত হচ্ছে।


হায়ার-অর্ডার ফাংশনের সুবিধা

  1. পুনঃব্যবহারযোগ্যতা
    হায়ার-অর্ডার ফাংশনগুলি কোড পুনঃব্যবহারযোগ্য করার সুবিধা প্রদান করে। একবার একটি ফাংশন তৈরি হলে সেটি বিভিন্ন স্থানে ব্যবহার করা যায়।
  2. ফাংশনাল প্রোগ্রামিংয়ের সুবিধা
    হায়ার-অর্ডার ফাংশন ফাংশনাল প্রোগ্রামিং এর শক্তি বৃদ্ধি করে। এটি আরও ছোট, পরিষ্কার এবং কার্যকর কোড লিখতে সাহায্য করে।
  3. অ্যাবস্ট্রাকশন
    ফাংশনাল অ্যাবস্ট্রাকশন এবং ফাংশন কম্পোজিশনের মাধ্যমে সমস্যাগুলোর সমাধান সহজ হয়।

সারাংশ

হায়ার-অর্ডার ফাংশন হলো এমন ফাংশন যা অন্য ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করে অথবা ফেরত দেয়। এটি ফাংশনাল প্রোগ্রামিংয়ের অন্যতম মৌলিক ধারণা, যা কোডের পুনঃব্যবহারযোগ্যতা বাড়ায় এবং কোড লেখার পদ্ধতি আরও কার্যকরী ও বুদ্ধিমান করে তোলে।

Content added By

ফাংশনাল প্রোগ্রামিং (Functional Programming) একটি প্রোগ্রামিং প্যারাডাইম যেখানে ফাংশনগুলোকে মূল ভিত্তি হিসেবে ব্যবহার করা হয়। এখানে, ফাংশনগুলোকে প্রথম শ্রেণির নাগরিক হিসেবে বিবেচনা করা হয়, অর্থাৎ ফাংশনগুলোকে আর্গুমেন্ট হিসেবে পাঠানো বা রিটার্ন করা সম্ভব। স্কালাতে, ফাংশনাল প্রোগ্রামিংয়ের ধারণা এবং কালেকশনস একসাথে খুবই শক্তিশালী টুল হিসেবে কাজ করে।

ফাংশনাল প্রোগ্রামিংয়ের মূল বৈশিষ্ট্য

  1. ইমমিউটেবিলিটি (Immutability):
    ফাংশনাল প্রোগ্রামিংয়ে ডেটা পরিবর্তনযোগ্য নয়, বরং নতুন মান তৈরি করা হয়। অর্থাৎ, একবার কোনো কালেকশন তৈরি হলে তার উপাদানগুলো পরিবর্তন করা যাবে না। এর ফলে প্রোগ্রামটির পূর্বাবস্থায় ফিরে যাওয়া এবং ডিবাগ করা সহজ হয়।
  2. হায়ার-অর্ডার ফাংশন (Higher-Order Functions):
    এই ধরনের ফাংশনগুলো অন্যান্য ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করতে পারে অথবা অন্য ফাংশন ফেরত দিতে পারে।
  3. পিউর ফাংশন (Pure Functions):
    কোনো ফাংশনের আউটপুট তার ইনপুটের উপর নির্ভরশীল এবং কোনো পার্শ্বপ্রতিক্রিয়া (side effects) থাকে না।

স্কালার কালেকশনস এবং ফাংশনাল প্রোগ্রামিং

স্কালা ভাষায় কালেকশনস যেমন List, Set, Map ইত্যাদি ইমমিউটেবল থাকে এবং এগুলোর উপরে ফাংশনাল অপারেশনসমূহ অত্যন্ত সহজে প্রয়োগ করা যায়। কিছু সাধারণ ফাংশনাল অপারেশন যেগুলি স্কালার কালেকশনসে ব্যবহার করা হয়:

  1. map:
    একটি কালেকশনের প্রতিটি উপাদানের উপর একটি ফাংশন প্রয়োগ করে একটি নতুন কালেকশন তৈরি করা হয়।

    val numbers = List(1, 2, 3, 4, 5)
    val squared = numbers.map(x => x * x)
    println(squared) // List(1, 4, 9, 16, 25)
  2. filter:
    একটি শর্তের ভিত্তিতে উপাদানগুলি ফিল্টার করে নতুন কালেকশন তৈরি করা হয়।

    val evenNumbers = numbers.filter(x => x % 2 == 0)
    println(evenNumbers) // List(2, 4)
  3. reduce:
    একটি কালেকশনের উপাদানগুলোকে একটি একক মানে একত্রিত করে। এটি সাধারণত কোনো অ্যাকামুলেটর বা অ্যাগ্রিগেট ফাংশন ব্যবহার করে।

    val sum = numbers.reduce((x, y) => x + y)
    println(sum) // 15
  4. fold:
    reduce এর মতো, কিন্তু এটি একটি ইনিশিয়াল ভ্যালু গ্রহণ করে, যা reduce-এর মতো কোনো অ্যাকামুলেটর ফাংশন দ্বারা প্রক্রিয়া করা হয়।

    val product = numbers.fold(1)((x, y) => x * y)
    println(product) // 120
  5. flatMap:
    এটি map এবং flatten এর সংমিশ্রণ। একটি কালেকশনের প্রতিটি উপাদানকে একটি নতুন কালেকশন তৈরি করতে মানচিত্রিত করে এবং তারপর সেই কালেকশনগুলিকে একত্রিত করে।

    val listOfLists = List(List(1, 2), List(3, 4), List(5, 6))
    val flatList = listOfLists.flatMap(x => x)
    println(flatList) // List(1, 2, 3, 4, 5, 6)

ফাংশনাল প্রোগ্রামিংয়ের সুবিধা স্কালা কালেকশনের সাথে

  1. সুশৃঙ্খল কোড:
    ফাংশনাল প্রোগ্রামিং কালেকশনগুলোর উপরে হায়ার-অর্ডার ফাংশন প্রয়োগ করতে সহায়ক, যা কোডকে ছোট, পরিষ্কার, এবং পুনঃব্যবহারযোগ্য করে তোলে।
  2. ডেটা ট্রান্সফরমেশন:
    বিভিন্ন ধরনের ফাংশনাল অপারেশন যেমন map, filter, reduce ইত্যাদি দিয়ে সহজেই ডেটা ট্রান্সফর্মেশন করা যায়, যা সাধারণভাবে আরেকটি কালেকশনে পরিবর্তন করার জন্য সাহায্য করে।
  3. পারালাল প্রক্রিয়াকরণ:
    ফাংশনাল কালেকশনে কিছু অপারেশন যেমন map, filter সহজে পারালাল বা সমান্তরালভাবে চালানো যেতে পারে, যেটি বড় ডেটাসেট বা স্কেলেবিলিটির জন্য উপকারী।
  4. ইমমিউটেবিলিটি এবং নিরাপত্তা:
    ইমমিউটেবিলিটি নিশ্চিত করে যে একাধিক থ্রেড একসাথে কাজ করলেও কোনো সমস্যা সৃষ্টি হবে না, এবং কোনো পার্শ্বপ্রতিক্রিয়া (side effects) হবে না।

সারাংশ

ফাংশনাল প্রোগ্রামিং এবং স্কালা কালেকশনস একসাথে ব্যবহৃত হলে কোড আরও সুশৃঙ্খল, পুনঃব্যবহারযোগ্য এবং পারফর্ম্যান্সে কার্যকরী হয়ে ওঠে। স্কালার হায়ার-অর্ডার ফাংশনগুলির মাধ্যমে ডেটা উপাদানগুলোর উপর দ্রুত এবং সহজভাবে প্রক্রিয়া করা সম্ভব হয়, যা ডেভেলপারদের জন্য উন্নত সফটওয়্যার ডিজাইন তৈরিতে সহায়ক।

Content added By

স্কালাতে, map, filter, এবং flatMap হল কিছু গুরুত্বপূর্ণ হাই-অর্ডার ফাংশন যা কালেকশনগুলির উপর বিভিন্ন অপারেশন করতে ব্যবহৃত হয়। এই ফাংশনগুলো কার্যকরী এবং ফাংশনাল প্রোগ্রামিংয়ের মূল উপাদান, যা সহজে এবং কার্যকরীভাবে ডেটা প্রক্রিয়া করতে সহায়ক।


1. map ফাংশন

map একটি হাই-অর্ডার ফাংশন যা একটি ফাংশন প্রতিটি উপাদানে প্রয়োগ করে এবং একটি নতুন কালেকশন তৈরি করে। এটি একটি কালেকশনের প্রতিটি উপাদানকে অন্য কিছুতে রূপান্তর করে।

ব্যবহার:

val numbers = List(1, 2, 3, 4, 5)
val doubledNumbers = numbers.map(x => x * 2)
println(doubledNumbers)  // List(2, 4, 6, 8, 10)

এখানে, map ফাংশন প্রতিটি সংখ্যাকে দ্বিগুণ করে একটি নতুন List তৈরি করেছে।

আরো উদাহরণ:

val names = List("Alice", "Bob", "Charlie")
val uppercaseNames = names.map(name => name.toUpperCase)
println(uppercaseNames) // List(ALICE, BOB, CHARLIE)

এখানে, map ফাংশনটি প্রতিটি নামকে বড় হাতের অক্ষরে রূপান্তর করেছে।


2. filter ফাংশন

filter ফাংশনটি একটি শর্তবলীকে প্রয়োগ করে কালেকশনের শুধু সেই উপাদানগুলো রাখে যা শর্ত পূর্ণ করে। এটি একটি নতুন কালেকশন ফেরত দেয় যেটিতে কেবলমাত্র সেই উপাদানগুলো থাকবে যা শর্ত অনুযায়ী মেলে।

ব্যবহার:

val numbers = List(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter(x => x % 2 == 0)
println(evenNumbers) // List(2, 4)

এখানে, filter ফাংশনটি শুধুমাত্র জোড়া সংখ্যাগুলোকে বেছে নিয়েছে এবং একটি নতুন List তৈরি করেছে।

আরো উদাহরণ:

val names = List("Alice", "Bob", "Charlie", "David")
val longNames = names.filter(name => name.length > 3)
println(longNames) // List(Alice, Charlie, David)

এখানে, filter ফাংশনটি সেই নামগুলো বেছে নিয়েছে যেগুলোর দৈর্ঘ্য ৩ এর বেশি।


3. flatMap ফাংশন

flatMap ফাংশনটি map এবং flatten এর সংমিশ্রণ। এটি একটি ফাংশন প্রয়োগ করে একটি নতুন কালেকশন তৈরি করে এবং তারপর সেই কালেকশনগুলিকে একত্রিত করে একটি একক কালেকশন হিসেবে ফিরিয়ে দেয়। flatMap সাধারণত যখন একটি ফাংশনকে কল করার পর একটি নতুন কালেকশন তৈরি হয় এবং সেই কালেকশনগুলিকে একত্রিত করতে হয়, তখন ব্যবহার করা হয়।

ব্যবহার:

val numbers = List(1, 2, 3)
val result = numbers.flatMap(x => List(x, x * 2))
println(result) // List(1, 2, 2, 4, 3, 6)

এখানে, flatMap প্রথমে প্রতিটি সংখ্যা থেকে দুটি মান (নিজেই এবং তার দ্বিগুণ) তৈরি করে এবং পরে সেই মানগুলিকে একত্রিত করে একটি একক List তৈরি করেছে।

আরো উদাহরণ:

val sentences = List("hello world", "how are you")
val words = sentences.flatMap(sentence => sentence.split(" "))
println(words) // List(hello, world, how, are, you)

এখানে, flatMap ফাংশনটি একটি বাক্যকে শব্দে ভাগ করেছে এবং সেই শব্দগুলিকে একত্রিত করে একটি নতুন List তৈরি করেছে।


সারাংশ

  • map: এটি একটি কালেকশনের প্রতিটি উপাদানে একটি ফাংশন প্রয়োগ করে এবং একটি নতুন কালেকশন তৈরি করে।
  • filter: এটি একটি শর্ত প্রয়োগ করে এবং শুধুমাত্র সেই উপাদানগুলো রাখে যা শর্ত পূর্ণ করে।
  • flatMap: এটি একটি ফাংশন প্রয়োগ করে, যেটি একটি নতুন কালেকশন তৈরি করে এবং সেই কালেকশনগুলিকে একত্রিত করে একটি একক কালেকশন হিসেবে ফিরিয়ে দেয়।

এই ফাংশনগুলো ফাংশনাল প্রোগ্রামিংয়ের মূল উপাদান এবং কালেকশন প্রক্রিয়াকরণের জন্য অত্যন্ত কার্যকরী টুলস।

Content added By

ফাংশনাল ট্রান্সফরমেশন (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) খুবই শক্তিশালী এবং কার্যকরী টুলস যা কালেকশনের উপাদানগুলোর উপর বিভিন্ন প্রক্রিয়া পরিচালনা করতে সহায়ক। এই ফাংশনগুলো ডেটা প্রক্রিয়াকরণের জন্য সহজ, পরিষ্কার, এবং কার্যকরী উপায় প্রদান করে।

Content added By
Promotion

Are you sure to start over?

Loading...