স্কালা ফাইনালি ব্লক ব্যবহার

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

231

স্কালা প্রোগ্রামিং ভাষায় finally ব্লক হল একটি বিশেষ ব্লক যা try-catch ব্লকের সাথে ব্যবহৃত হয়। finally ব্লকটি সাধারণত আপনার কোডে কিছু পরিস্কারক কাজ করার জন্য ব্যবহার করা হয়, যেমন রিসোর্স বন্ধ করা, ফাইল বন্ধ করা, নেটওয়ার্ক কানেকশন বন্ধ করা ইত্যাদি। finally ব্লকটি যেকোনো অবস্থায় (যতটুকু ধরুন, কোনও এক্সসেপশন ছুড়ে দেওয়া হলেও) অবশ্যই চলবে। অর্থাৎ, যদি কোনো এক্সসেপশন ধরা না-ও পড়ে, তবুও finally ব্লকটি সম্পাদিত হবে।


১. try-catch-finally ব্লক

স্কালায় try-catch-finally ব্লক ব্যবহৃত হয় exception handling-এর জন্য। এখানে finally ব্লকটি অবশ্যই এক্সসেপশন ঘটুক বা না ঘটুক, সর্বশেষে চালানো হয়।

উদাহরণ:

object FinallyExample {
  def main(args: Array[String]): Unit = {
    try {
      println("Inside try block")
      // Let's throw an exception
      val result = 10 / 0  // Division by zero will throw an exception
    } catch {
      case e: ArithmeticException => println("Caught an arithmetic exception!")
    } finally {
      println("This is the finally block. It always runs.")
    }
  }
}

এখানে:

  • try ব্লকটি কোডের সেই অংশ যা এক্সসেপশন ঘটতে পারে এমন কোড ধারণ করে। এখানে আমরা division by zero সমস্যা ঘটাচ্ছি।
  • catch ব্লকটি এক্সসেপশন ধরা এবং তার সাথে সম্পর্কিত কোড সম্পাদন করে। এখানে ArithmeticException ধরা হচ্ছে।
  • finally ব্লকটি যেকোনো অবস্থায় চলবে, অর্থাৎ এক্সসেপশন ঘটুক বা না ঘটুক। এই ব্লকটি সাধারণত রিসোর্স পরিস্কার করার জন্য ব্যবহৃত হয় (যেমন ফাইল বা ডাটাবেস কানেকশন বন্ধ করা)।

এখানে আউটপুট হবে:

Inside try block
Caught an arithmetic exception!
This is the finally block. It always runs.

২. finally ব্লক এবং রিসোর্স ক্লিনআপ

finally ব্লক সাধারণত রিসোর্স ক্লিনআপ করার জন্য ব্যবহৃত হয়, যেমন ফাইল, ডাটাবেস কানেকশন বা নেটওয়ার্ক কানেকশন বন্ধ করা।

উদাহরণ: ফাইল ক্লোজিং

import java.io._

object FileCleanupExample {
  def main(args: Array[String]): Unit = {
    val file = new File("sample.txt")
    val writer = new PrintWriter(file)

    try {
      writer.write("Hello, Scala!")
    } catch {
      case e: Exception => println(s"An error occurred: ${e.getMessage}")
    } finally {
      writer.close()  // Ensure the file is always closed
      println("File has been closed.")
    }
  }
}

এখানে:

  • try ব্লকে ফাইল লিখতে চেষ্টা করা হচ্ছে।
  • যদি কোনো এক্সসেপশন ঘটে (যেমন ফাইল লিখতে না পারলে), তাহলে catch ব্লক এক্সসেপশন ধরবে।
  • finally ব্লকে writer.close() ব্যবহৃত হচ্ছে যা নিশ্চিত করবে যে ফাইলটি বন্ধ হয়ে যাবে, এক্সসেপশন ঘটুক বা না ঘটুক।

৩. finally ব্লক এবং রিটার্ন স্টেটমেন্ট

একটি গুরুত্বপূর্ণ বিষয় হচ্ছে, finally ব্লকটি যখন রিটার্ন স্টেটমেন্টের সাথে ব্যবহৃত হয়, তখন finally ব্লকের কোড প্রথমে চালানো হয়, এবং এরপর রিটার্নের মান চলে আসে।

উদাহরণ:

object FinallyReturnExample {
  def testMethod(): Int = {
    try {
      println("Inside try block")
      return 10
    } catch {
      case e: Exception => println("Caught an exception")
    } finally {
      println("This is the finally block.")
      // Even if we return from the try block, finally will run
    }
  }

  def main(args: Array[String]): Unit = {
    val result = testMethod()
    println(s"Returned value: $result")
  }
}

এখানে:

  • testMethod() মেথডে আমরা try ব্লকে return 10 ব্যবহার করেছি, কিন্তু finally ব্লকটি তারপরেও চালানো হয়েছে।
  • আউটপুট হবে:
Inside try block
This is the finally block.
Returned value: 10

এখানে, finally ব্লক চলার পরেই রিটার্ন মানটি আসছে, এবং আমরা দেখতে পাচ্ছি যে finally কোডটি কখনোই বাদ যায় না।


৪. finally ব্লক এবং এক্সসেপশন

এক্সসেপশন যদি finally ব্লকেও ঘটতে থাকে, তবে তা try ব্লকের এক্সসেপশনকে ওভাররাইট করতে পারে না, কিন্তু finally ব্লকটি এক্সসেপশন সংক্রান্ত সমস্যার উপরও কাজ করতে পারে।

উদাহরণ: finally ব্লকে এক্সসেপশন

object FinallyExceptionExample {
  def main(args: Array[String]): Unit = {
    try {
      println("Inside try block")
      throw new Exception("An exception occurred in try block")
    } catch {
      case e: Exception => println(s"Exception caught: ${e.getMessage}")
    } finally {
      println("Inside finally block")
      throw new Exception("An exception occurred in finally block")  // This will throw an exception
    }
  }
}

এখানে:

  • try ব্লকে একটি এক্সসেপশন ঘটানো হয়েছে।
  • finally ব্লকে আরেকটি এক্সসেপশন ঘটানো হয়েছে, যা মূল এক্সসেপশনকে ওভাররাইট করবে না। আউটপুট হবে:
Inside try block
Exception caught: An exception occurred in try block
Inside finally block
Exception in thread "main" java.lang.Exception: An exception occurred in finally block

এখানে:

  • প্রথম এক্সসেপশনটি catch ব্লকে ধরা হয়েছে, কিন্তু দ্বিতীয় এক্সসেপশনটি finally ব্লকে ঘটেছে এবং এটি মেইন থ্রেডে চলে গেছে।

সারাংশ

  • finally ব্লক এমন একটি ব্লক যা try-catch ব্লকের পরে চলবে, এবং এটি যেকোনো পরিস্থিতিতে চালিত হয়, এক্সসেপশন ঘটুক বা না ঘটুক।
  • এটি সাধারণত রিসোর্স পরিস্কার বা ফাইল, নেটওয়ার্ক কানেকশন বন্ধ করার জন্য ব্যবহৃত হয়।
  • finally ব্লক ব্যবহারের সময় রিটার্ন স্টেটমেন্টও গুরুত্ব সহকারে পরিচালনা করা হয়, কারণ এটি নিশ্চিত করবে যে finally ব্লক আগে চলবে।
Content added By
Promotion

Are you sure to start over?

Loading...