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...