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 โดยตัวอย่าง: การจัดการข้อผิดพลาด - ตัวอย่างการโต้ตอบเพื่อลงมือทำ
จำไว้ว่า การจัดการข้อผิดพลาดที่ดีไม่ใช่เพียงแค่การเขียนโค้ด; มันคือการดูแลผู้ใช้โค้ดของคุณ การเขียนโค้ดอย่างมีความสุข!