স্কালা কাস্টম এক্সেপশন তৈরি

স্কালা এক্সেপশন হ্যান্ডলিং - স্কালা প্রোগ্রামিং (Scala Programming) - Computer Programming

236

স্কালায় কাস্টম এক্সেপশন তৈরি করা সহজ এবং সরল। যখন আপনি একটি নির্দিষ্ট পরিস্থিতিতে একটি কাস্টম এক্সেপশন ব্যবহার করতে চান, তখন আপনি স্কালার Exception ক্লাস বা RuntimeException ক্লাসের একটি সাবক্লাস তৈরি করতে পারেন। এতে আপনার নিজের এক্সেপশন মেসেজ এবং কাস্টম আচরণ নির্ধারণ করা সম্ভব হয়।

এখানে কাস্টম এক্সেপশন তৈরি করার প্রক্রিয়া এবং উদাহরণ দেওয়া হলো।


১. কাস্টম এক্সেপশন তৈরি করা

স্কালায় কাস্টম এক্সেপশন তৈরি করতে আপনাকে একটি ক্লাস তৈরি করতে হবে যা Exception অথবা RuntimeException এর সাবক্লাস হিসেবে কাজ করবে। সাধারণত Exception ক্লাস ব্যবহার করা হয় যদি আপনি চেকড এক্সেপশন তৈরি করতে চান এবং RuntimeException ক্লাস ব্যবহার করা হয় যদি আপনি আনচেকড এক্সেপশন তৈরি করতে চান।

১.১ চেকড এক্সেপশন (Checked Exception)

Checked Exception হল এমন এক্সেপশন যেগুলি কম্পাইল টাইমে চেক করা হয় এবং মেথডের সিগনেচারে throws শব্দটি ব্যবহৃত হয়।

উদাহরণ:

// Creating a custom checked exception by extending Exception
class InvalidAgeException(message: String) extends Exception(message)

// Method that throws the custom exception
def checkAge(age: Int): Unit = {
  if (age < 0) {
    throw new InvalidAgeException("Age cannot be negative.")
  } else {
    println(s"Age is valid: $age")
  }
}

// Using the method
try {
  checkAge(-5)  // This will throw the InvalidAgeException
} catch {
  case e: InvalidAgeException => println(s"Caught exception: ${e.getMessage}")
}

এখানে, InvalidAgeException একটি কাস্টম এক্সেপশন তৈরি করেছে, যা Exception ক্লাস থেকে ইনহেরিট করা হয়েছে। যখন checkAge মেথডে বয়স নেতিবাচক হবে, তখন এটি এই কাস্টম এক্সেপশনটি থ্রো করবে।

১.২ আনচেকড এক্সেপশন (Unchecked Exception)

Unchecked Exception সাধারণত RuntimeException থেকে ইনহেরিট করা হয়। এই ধরনের এক্সেপশনগুলি কম্পাইল টাইমে চেক করা হয় না এবং সাধারণত যখন আপনি ফাংশনে অপ্রত্যাশিত অবস্থা পেয়ে থাকেন তখন এটি ব্যবহার করা হয়।

উদাহরণ:

// Creating a custom unchecked exception by extending RuntimeException
class InvalidAmountException(message: String) extends RuntimeException(message)

// Method that throws the custom exception
def processAmount(amount: Double): Unit = {
  if (amount < 0) {
    throw new InvalidAmountException("Amount cannot be negative.")
  } else {
    println(s"Processing amount: $amount")
  }
}

// Using the method
try {
  processAmount(-100)  // This will throw the InvalidAmountException
} catch {
  case e: InvalidAmountException => println(s"Caught exception: ${e.getMessage}")
}

এখানে InvalidAmountException একটি কাস্টম এক্সেপশন তৈরি করেছে, যা RuntimeException ক্লাস থেকে ইনহেরিট করা হয়েছে। যখন processAmount মেথডে মান নেতিবাচক হবে, তখন এটি এই কাস্টম এক্সেপশনটি থ্রো করবে।


২. কাস্টম এক্সেপশন তৈরির সময় অতিরিক্ত ফিচার যোগ করা

আপনি আপনার কাস্টম এক্সেপশনে অতিরিক্ত ফিচার যোগ করতে পারেন, যেমন স্ট্যাটিক মেথড, কাস্টম কন্সট্রাক্টর, বা নির্দিষ্ট ডিবাগিং তথ্য।

২.১ কাস্টম কন্সট্রাক্টর এবং স্ট্যাটিক মেথড

// Creating a custom exception with a custom constructor and static method
class InvalidOperationException(message: String, errorCode: Int) extends Exception(message) {
  // Adding an error code to the exception
  def getErrorCode: Int = errorCode
}

object InvalidOperationException {
  // A static method to create a new exception with a default error code
  def apply(message: String): InvalidOperationException = new InvalidOperationException(message, 1001)
}

// Method that throws the custom exception
def performOperation(value: Int): Unit = {
  if (value < 0) {
    throw InvalidOperationException("Operation failed due to invalid value")
  } else {
    println("Operation performed successfully!")
  }
}

// Using the method
try {
  performOperation(-5)  // This will throw the InvalidOperationException
} catch {
  case e: InvalidOperationException =>
    println(s"Caught exception: ${e.getMessage}, Error Code: ${e.getErrorCode}")
}

এখানে, InvalidOperationException ক্লাসে একটি কাস্টম কন্সট্রাক্টর এবং একটি getErrorCode মেথড যোগ করা হয়েছে। এছাড়া, apply মেথডের মাধ্যমে একটি নতুন এক্সেপশন তৈরি করা হয়েছে যা একটি ডিফল্ট এরর কোড নিয়ে আসে।


৩. এক্সেপশন হ্যান্ডলিং (Exception Handling)

স্কালায় এক্সেপশন হ্যান্ডলিং সাধারণভাবে try, catch, এবং finally ব্লক ব্যবহার করে করা হয়। একটি কাস্টম এক্সেপশন থ্রো করার পর, আপনি সেই এক্সেপশনটি কিপর্যন্ত হ্যান্ডল করবেন তা নির্ধারণ করতে পারেন।

৩.১ এক্সেপশন হ্যান্ডলিং উদাহরণ

// A simple method that may throw a custom exception
def divide(x: Int, y: Int): Int = {
  if (y == 0) {
    throw new ArithmeticException("Cannot divide by zero")
  }
  x / y
}

try {
  val result = divide(10, 0)
  println(s"Result: $result")
} catch {
  case e: ArithmeticException => println(s"Error: ${e.getMessage}")
} finally {
  println("This will always execute, whether an exception was thrown or not.")
}

এখানে, divide মেথডে ArithmeticException কাস্টম এক্সেপশন থ্রো করা হয়েছে এবং তা try-catch ব্লক দিয়ে হ্যান্ডল করা হয়েছে।


সারাংশ

  • কাস্টম এক্সেপশন তৈরি করার জন্য স্কালায় আপনি Exception বা RuntimeException ক্লাসকে ইনহেরিট করে নতুন এক্সেপশন তৈরি করতে পারেন।
  • চেকড এক্সেপশন সাধারণত Exception থেকে ইনহেরিট করা হয় এবং কম্পাইল টাইমে চেক করা হয়, যেখানে আনচেকড এক্সেপশন সাধারণত RuntimeException থেকে ইনহেরিট করা হয় এবং কম্পাইল টাইমে চেক করা হয় না।
  • আপনি কাস্টম এক্সেপশনে কাস্টম কন্সট্রাক্টর, স্ট্যাটিক মেথড, বা অতিরিক্ত তথ্য যেমন errorCode যোগ করতে পারেন।

এই কাস্টম এক্সেপশনগুলির মাধ্যমে আপনি আরো নির্দিষ্ট এবং শক্তিশালী এক্সেপশন হ্যান্ডলিং করতে পারবেন যা আপনার প্রোগ্রামের ত্রুটিগুলি আরো ভালভাবে পরিচালনা করতে সাহায্য করবে।

Content added By
Promotion

Are you sure to start over?

Loading...