স্কালা মোনাডস এবং অ্যাপ্লিকেটিভস

স্কালা অ্যাডভান্সড ফাংশনাল প্রোগ্রামিং - স্কালা প্রোগ্রামিং (Scala Programming) - Computer Programming

199

মোনাডস এবং অ্যাপ্লিকেটিভস ফাংশনাল প্রোগ্রামিংয়ের গুরুত্বপূর্ণ কনসেপ্ট যা স্কালায় ব্যবহৃত হয়। এগুলি সাধারণত লজিকাল টাইপ এবং ডেটা ট্রান্সফরমেশন ব্যবস্থাপনাতে ব্যবহৃত হয়, বিশেষত একাধিক স্টেপে বা অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ে। স্কালায় এগুলি কিভাবে কাজ করে, তা নিচে বিস্তারিতভাবে আলোচনা করা হলো।


১. মোনাডস (Monads) in Scala

মোনাড হল এমন একটি ফাংশনাল কনসেপ্ট যা একটি টাইপ এবং দুটি নির্দিষ্ট অপারেশন নিয়ে কাজ করে:

  • flatMap: যা একটি নতুন Monad তৈরি করে।
  • map: যা কোনো ফাংশন প্রয়োগ করে Monad এর ভিতরের ভ্যালু পরিবর্তন করে।

মোনাড ব্যবহৃত হয় তখন যখন আমাদের কোনো টাইপের উপর কাজ করার জন্য একাধিক স্টেপের প্রয়োজন হয়, এবং প্রতিটি স্টেপের ফলাফলকে একটি Monad এর মধ্যে রাখতে হয়।

১.১ মোনাডের মৌলিক কাঠামো

মোনাড একটি টাইপের উপর কাজ করে এবং বক্সিং (wrapping) এবং আনবক্সিং (unwrapping) এর মতো কাজগুলো সম্পাদন করতে সাহায্য করে। মোনাডের প্রধান দুটি মেথড হলো:

  • map: এটি মোনাডের ভিতরের মানকে পরিবর্তন করে।
  • flatMap: এটি মোনাডের ভিতরের মানকে বের করে একটি নতুন মোনাড তৈরি করে।

১.২ মোনাডের উদাহরণ

এখানে একটি সিম্পল মোনাডের উদাহরণ দেওয়া হলো, যেখানে Option টাইপকে একটি মোনাড হিসেবে ব্যবহার করা হচ্ছে।

val option1: Option[Int] = Some(5)
val option2: Option[Int] = None

// map example
val result1 = option1.map(x => x * 2)  // Output: Some(10)
val result2 = option2.map(x => x * 2)  // Output: None

// flatMap example
val result3 = option1.flatMap(x => Some(x * 2))  // Output: Some(10)
val result4 = option2.flatMap(x => Some(x * 2))  // Output: None

println(result1)  // Output: Some(10)
println(result2)  // Output: None
println(result3)  // Output: Some(10)
println(result4)  // Output: None

এখানে:

  • Some হল Option মোনাডের একটি বাস্তবায়ন, যেখানে মান থাকে।
  • None হল Option মোনাডের আরেকটি বাস্তবায়ন, যেখানে মান নেই।

map শুধুমাত্র ভিতরের মানে অপারেশন চালায়, তবে flatMap ভিতরের মান বের করে নতুন মোনাড তৈরি করে।


২. অ্যাপ্লিকেটিভস (Applicatives) in Scala

অ্যাপ্লিকেটিভস মোনাডের মতো কিন্তু কিছুটা আলাদা। অ্যাপ্লিকেটিভ একটি টাইপ ক্লাস (type class) যা ফাংশনকে Applicative টাইপের মধ্যে অ্যাপ্লাই করার ক্ষমতা রাখে। এর মূল ফাংশন দুটি:

  • map: যেটি Monad থেকে মান নিয়ে আসে এবং একটি ফাংশন প্রয়োগ করে নতুন একটি মোনাড তৈরি করে।
  • ap: এটি একটি অ্যাপ্লিকেটিভের মধ্যে রাখা একটি ফাংশনকে অন্য একটি অ্যাপ্লিকেটিভের উপরে প্রয়োগ করে।

অ্যাপ্লিকেটিভ সাধারণত ফাংশনাল প্রোগ্রামিংয়ে টাইপ-সিস্টেমে কোনো ফাংশন অ্যাপ্লাই করার জন্য ব্যবহৃত হয়, যেখানে আপনি কার্যকরভাবে একটি মান (value) এবং একটি ফাংশন (function) সংযুক্ত করতে পারেন।

২.১ অ্যাপ্লিকেটিভের উদাহরণ

স্কালায় Applicative টাইপ ক্লাসের জন্য Applicative মেথডের উদাহরণ:

// Define an Applicative Functor (here Option is used)
trait Applicative[F[_]] {
  def map[A, B](fa: F[A])(f: A => B): F[B]
  def ap[A, B](fa: F[A])(ff: F[A => B]): F[B]
}

// Option as an Applicative
object OptionApplicative extends Applicative[Option] {
  def map[A, B](fa: Option[A])(f: A => B): Option[B] =
    fa match {
      case Some(a) => Some(f(a))
      case None => None
    }

  def ap[A, B](fa: Option[A])(ff: Option[A => B]): Option[B] =
    (fa, ff) match {
      case (Some(a), Some(f)) => Some(f(a))
      case _ => None
    }
}

// Usage of the Applicative ap
val value1: Option[Int] = Some(5)
val value2: Option[Int => Int] = Some((x: Int) => x * 2)

val result = OptionApplicative.ap(value1)(value2)
println(result)  // Output: Some(10)

এখানে:

  • map: যেটি সাধারণভাবে ভ্যালু বা মান পরিবর্তন করতে ব্যবহৃত হয়।
  • ap: এটিতে একটি ফাংশন (যা Option[A => B] টাইপের) আরেকটি Option[A] এর উপর অ্যাপ্লাই করা হয় এবং নতুন একটি Option[B] তৈরি করা হয়।

৩. মোনাডস এবং অ্যাপ্লিকেটিভস-এর পার্থক্য

বৈশিষ্ট্যমোনাডসঅ্যাপ্লিকেটিভস
ফাংশন প্রয়োগflatMap দিয়ে ফাংশন অ্যাপ্লাই করা হয়।ap ব্যবহার করে ফাংশন অ্যাপ্লাই করা হয়।
জটিলতাএকটু বেশি জটিল এবং শক্তিশালী।সহজ এবং কিছুটা কম জটিল।
প্রধান কার্যকারিতাএকাধিক স্টেপে মান পরিচালনা করা।ফাংশন প্রয়োগের জন্য সহজ টুলস প্রদান।

সারাংশ

  • মোনাডস (Monads) হল এমন ডেটা টাইপ যা একাধিক স্টেপে বা অ্যাসিঙ্ক্রোনাস প্রসেসে কাজ করার জন্য উপযোগী, যেখানে একটি মেথডের ভিতরে অন্য মেথডের ফলাফল পাওয়া যায়। এটি flatMap এবং map মেথড ব্যবহার করে।
  • অ্যাপ্লিকেটিভস (Applicatives) হল এমন টাইপ ক্লাস যা একাধিক ফাংশনকে একটি টাইপে অ্যাপ্লাই করতে সক্ষম। এটি ap এবং map ফাংশন ব্যবহার করে।

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

Content added By
Promotion

Are you sure to start over?

Loading...