স্কালায় try-catch ব্লক ব্যবহার করে আপনি প্রোগ্রামের এক্সসেপশন (exception) বা ত্রুটির পরিস্থিতি হ্যান্ডেল করতে পারেন। এটি কোডের নিরাপত্তা এবং স্থিরতা বজায় রাখতে সহায়তা করে, যাতে কোনো অপ্রত্যাশিত ত্রুটি ঘটলে প্রোগ্রামটি ক্র্যাশ না হয়ে নির্দিষ্ট ব্যবস্থাপনা করতে পারে।
১. স্কালায় try-catch ব্লক গঠন
স্কালায় try ব্লকটি কোডের সেই অংশে র্যাপ করা হয় যেখানে ত্রুটির সম্ভাবনা থাকে এবং catch ব্লকটি ত্রুটির ধরন অনুযায়ী সেই ত্রুটিকে হ্যান্ডেল করে।
try {
// Code that may throw an exception
} catch {
case e: ExceptionType =>
// Handle the exception
}উদাহরণ:
try {
val result = 10 / 0 // This will throw an ArithmeticException
println(result)
} catch {
case e: ArithmeticException => println("Error: Division by zero!")
case e: Exception => println("An unexpected error occurred: " + e.getMessage)
}এখানে:
tryব্লকে একটি বিভাজন (division) অপারেশন আছে যাArithmeticExceptionসৃষ্টি করবে যদি ডিভাইড বাই জিরো হয়।catchব্লকে দুটি আলাদা এক্সসেপশন হ্যান্ডেল করা হচ্ছে:ArithmeticExceptionএবং সাধারণException।
২. একাধিক এক্সসেপশন হ্যান্ডলিং
স্কালায় আপনি একাধিক catch ব্লক ব্যবহার করতে পারেন যাতে একাধিক এক্সসেপশন টাইপের জন্য আলাদা আলাদা হ্যান্ডলিং করা যায়।
try {
// Code that may throw exceptions
} catch {
case e: ArithmeticException => println("Arithmetic exception occurred")
case e: NullPointerException => println("Null pointer exception occurred")
case e: Exception => println("A general exception occurred")
}এখানে:
ArithmeticExceptionএবংNullPointerExceptionআলাদা আলাদা হ্যান্ডলিং করা হয়েছে।- যদি কোনো অপরিচিত এক্সসেপশন ঘটে, তাহলে
Exceptionহ্যান্ডলার চালু হবে।
৩. finally ব্লক
স্কালায় finally ব্লক ব্যবহার করা হয় যেকোনো ত্রুটি ঘটুক বা না ঘটুক, কোডের কিছু অংশ কার্যকরী করতে। এটি try-catch ব্লকের পরে থাকে এবং যেকোনো পরিস্থিতিতে চলমান থাকে।
try {
val result = 10 / 2
println("Result: " + result)
} catch {
case e: ArithmeticException => println("Error: Division by zero!")
} finally {
println("This will always run, regardless of exception")
}এখানে:
finallyব্লকটিtryবাcatchব্লকের পরে নির্বাহিত হয়।- এটি সাধারণত resources (যেমন ফাইল বা ডাটাবেস সংযোগ) বন্ধ করার জন্য ব্যবহৃত হয়।
৪. try-catch ব্লকের সাথে Option ব্যবহার
একটি সাধারণ প্যাটার্ন হল try-catch ব্লক ব্যবহার করে Option রিটার্ন করা, যাতে ত্রুটির ক্ষেত্রে None এবং সঠিক ফলাফলের জন্য Some রিটার্ন করা যায়।
def safeDivision(a: Int, b: Int): Option[Int] = {
try {
Some(a / b)
} catch {
case e: ArithmeticException => None
}
}
println(safeDivision(10, 2)) // Output: Some(5)
println(safeDivision(10, 0)) // Output: Noneএখানে:
safeDivisionফাংশনটিOption[Int]রিটার্ন করে, যেখানে সফল ডিভিশনের জন্যSomeএবং ত্রুটির জন্যNoneফেরত দেওয়া হয়।
৫. এক্সসেপশন প্রোপাগেশন (Exception Propagation)
যদি কোনো এক্সসেপশন try-catch ব্লকের মধ্যে হ্যান্ডেল না করা হয়, তবে এটি উপরের স্তরের কোডে প্রোপাগেট (propagate) হবে এবং সেই অংশে catch ব্লকটি দ্বারা হ্যান্ডেল করা হবে।
উদাহরণ:
def riskyMethod(): Unit = {
try {
throw new Exception("Something went wrong")
} catch {
case e: Exception => println("Caught in riskyMethod: " + e.getMessage)
}
}
def callingMethod(): Unit = {
try {
riskyMethod()
} catch {
case e: Exception => println("Caught in callingMethod: " + e.getMessage)
}
}
callingMethod() // Output: Caught in riskyMethod: Something went wrongএখানে:
riskyMethodত্রুটি ঘটিয়ে সেটি নিজের মধ্যে হ্যান্ডেল করছে।callingMethodতে যদিriskyMethodকোনো ত্রুটি না হ্যান্ডেল করে, তবে তা উপরের স্তরে প্রোপাগেট হবে এবং সেই স্তরে হ্যান্ডেল হবে।
সারাংশ
try-catchব্লক: কোডের একটি অংশ যেখানে ত্রুটি বা এক্সসেপশন ঘটলে তা হ্যান্ডেল করা যায়।catch: বিভিন্ন এক্সসেপশন হ্যান্ডলিংয়ের জন্য ব্যবহার করা হয়।finally: কোড ব্লক যাtry-catchব্লকের পরে চলে এবং এটি যেকোনো পরিস্থিতিতে নির্বাহিত হয়।- এক্সসেপশন প্রোপাগেশন: যদি কোনো এক্সসেপশন
try-catchব্লকে হ্যান্ডেল না করা হয়, তবে সেটি উপরের স্তরে প্রোপাগেট হতে পারে।
স্কালায় এক্সসেপশন হ্যান্ডলিং অত্যন্ত কার্যকরী এবং নিরাপদভাবে ত্রুটি ম্যানেজমেন্ট করতে সহায়তা করে।