Scala - การจัดการข้อยกเว้น

ข้อยกเว้นของ Scala ทำงานเหมือนกับข้อยกเว้นในภาษาอื่น ๆ เช่น Java แทนที่จะส่งคืนค่าด้วยวิธีปกติเมธอดสามารถยุติได้โดยทิ้งข้อยกเว้น อย่างไรก็ตาม Scala ไม่ได้ตรวจสอบข้อยกเว้นจริงๆ

เมื่อคุณต้องการจัดการกับข้อยกเว้นให้ใช้การบล็อก {... } catch {... } เหมือนกับที่คุณทำใน Java ยกเว้นว่า catch block ใช้การจับคู่เพื่อระบุและจัดการกับข้อยกเว้น

การโยนข้อยกเว้น

การโยนข้อยกเว้นจะเหมือนกับใน Java คุณสร้างอ็อบเจ็กต์ข้อยกเว้นจากนั้นคุณโยนมันด้วยไฟล์throw คีย์เวิร์ดดังนี้.

throw new IllegalArgumentException

การจับข้อยกเว้น

Scala ช่วยให้คุณสามารถ try/catch ข้อยกเว้นใด ๆ ในบล็อกเดียวจากนั้นทำการจับคู่รูปแบบกับมันโดยใช้ caseบล็อก ลองใช้โปรแกรมตัวอย่างต่อไปนี้เพื่อจัดการกับข้อยกเว้น

ตัวอย่าง

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException

object Demo {
   def main(args: Array[String]) {
      try {
         val f = new FileReader("input.txt")
      } catch {
         case ex: FileNotFoundException =>{
            println("Missing file exception")
         }
         
         case ex: IOException => {
            println("IO Exception")
         }
      }
   }
}

บันทึกโปรแกรมข้างต้นใน Demo.scala. คำสั่งต่อไปนี้ใช้เพื่อคอมไพล์และรันโปรแกรมนี้

คำสั่ง

\>scalac Demo.scala
\>scala Demo

เอาต์พุต

Missing file exception

พฤติกรรมของสิ่งนี้ try-catchนิพจน์เหมือนกับในภาษาอื่น ๆ โดยมีข้อยกเว้น ร่างกายจะถูกดำเนินการและหากมีการยกเว้นแต่ละรายการcatch ในทางกลับกันประโยคจะพยายาม

ข้อสุดท้าย

คุณสามารถห่อนิพจน์ด้วย finallyอนุประโยคหากคุณต้องการให้โค้ดบางตัวดำเนินการไม่ว่านิพจน์จะสิ้นสุดอย่างไร ลองใช้โปรแกรมต่อไปนี้

ตัวอย่าง

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException

object Demo {
   def main(args: Array[String]) {
      try {
         val f = new FileReader("input.txt")
      } catch {
         case ex: FileNotFoundException => {
            println("Missing file exception")
         }
         
         case ex: IOException => {
            println("IO Exception")
         }
      } finally {
         println("Exiting finally...")
      }
   }
}

บันทึกโปรแกรมข้างต้นใน Demo.scala. คำสั่งต่อไปนี้ใช้เพื่อคอมไพล์และรันโปรแกรมนี้

คำสั่ง

\>scalac Demo.scala
\>scala Demo

เอาต์พุต

Missing file exception
Exiting finally...