Rust:
การจัดการกับข้อผิดพลาด
วิธีการ:
Rust จัดการกับข้อผิดพลาดในสองวิธีหลัก: ข้อผิดพลาดที่สามารถแก้ไขได้และไม่สามารถแก้ไขได้ มาดูทั้งสองแบบกัน
ข้อผิดพลาดที่สามารถแก้ไขได้ใช้ Result<T, E>:
use std::fs::File;
fn open_file(filename: &str) -> Result<File, std::io::Error> {
let f = File::open(filename);
match f {
Ok(file) => Ok(file),
Err(e) => Err(e),
}
}
fn main() {
match open_file("hello.txt") {
Ok(_file) => println!("ไฟล์เปิดสำเร็จ."),
Err(_e) => println!("การเปิดไฟล์ล้มเหลว."),
}
}ผลลัพธ์อาจเป็น “ไฟล์เปิดสำเร็จ.” หรือ “การเปิดไฟล์ล้มเหลว.” ขึ้นอยู่กับ hello.txt ของคุณ
สำหรับข้อผิดพลาดที่ไม่สามารถแก้ไขได้ เราใช้ panic!:
fn main() {
// สิ่งนี้จะทำให้โปรแกรม panic เพราะไฟล์อาจไม่มีอยู่จริง
let _f = File::open("nowhere.txt").unwrap();
}รันมัน และคุณจะเห็นข้อความ panic โปรแกรมของคุณหยุดนิ่งทันที
การดำดิ่งลึก
โดยประวัติศาสตร์ การจัดการกับข้อผิดพลาดในการเขียนโปรแกรมเป็นเรื่องยุ่งยาก Rust ทำให้ถูกต้องด้วยการแยกแยะชัดเจนระหว่างข้อผิดพลาดที่สามารถแก้ไขได้และไม่สามารถแก้ไขได้
อีนัม Result ใช้สำหรับข้อผิดพลาดที่สามารถแก้ไขได้ มันชัดเจน - คุณจัดการกับตัวแปร Ok หรือ Err คุณมีเมทอดเช่น unwrap() และ expect() ด้วย แต่พวกมันเป็นทางลัดที่รวดเร็วและสกปรกซึ่งสามารถนำไปสู่ panic!
panic! เป็นวิธีของ Rust ในการบอกว่าเกิดเหตุการณ์ที่ไม่ดีมากๆ ขึ้น และมันไม่สามารถจัดการได้ เหมือนกับข้อผิดพลาดที่ไม่สามารถแก้ไขได้ซึ่งหยุดการทำงานทันที การ panic ใน Rust มักเกิดขึ้นกับบักที่คุณไม่คาดคิดว่าจะจัดการได้ เช่น การอ้างถึงนอกขอบเขตของอาร์เรย์
การจัดการข้อผิดพลาดโดยการคืนค่า Result ได้รับการต้อนรับเมื่อคุณคาดหวังว่าจะต้องจัดการกับข้อผิดพลาด มันเป็นวิธีที่โปรแกรมเมอร์ Rust ตกลงกัน เช่นเดียวกันกับ Option<T> สำหรับกรณีที่ข้อผิดพลาดเป็นเพียงบางสิ่งที่เป็น None แทนที่จะเป็น Some(T) มันเกี่ยวกับการคาดหวังสิ่งที่ไม่คาดคิดโดยไม่มีความกลัว
ทางเลือก? แน่นอน คุณสามารถใช้คลังการจัดการข้อผิดพลาดอื่นๆ ได้สำหรับคุณสมบัติเพิ่มเติมหรือการใช้งานที่สะดวกขึ้น เช่น anyhow สำหรับการจัดการข้อผิดพลาดอย่างง่าย หรือ thiserror สำหรับข้อผิดพลาดในโค้ดไลบรารี
ดูเพิ่มเติม
สนใจที่จะศึกษาลึกขึ้นไหม? นี่คือที่ที่คุณควรไป:
- หนังสือ Rust เกี่ยวกับการจัดการข้อผิดพลาด - สถานที่ที่ยอดเยี่ยมในการเข้าใจปรัชญาการจัดการข้อผิดพลาดของ Rust
- Rust โดยตัวอย่าง: การจัดการข้อผิดพลาด - ตัวอย่างการโต้ตอบเพื่อลงมือทำ
จำไว้ว่า การจัดการข้อผิดพลาดที่ดีไม่ใช่เพียงแค่การเขียนโค้ด; มันคือการดูแลผู้ใช้โค้ดของคุณ การเขียนโค้ดอย่างมีความสุข!