Syntax dari panic adalah
panic!("your-custom-message-goes-here");
Kapan panic digunakan
Perintah panic dapat digunakan ketika situasi:
- Melanjutkan aplikasi adalah salah, contoh mengakses out of bound index array. Melakukan panic akan mencegah celah keamanan buffer overflow.
- Tidak mungkin melakukan recover.
- Ketika masalah harus diselesaikan dengan mengubah code.
Berikut contoh sederhana menggunakan panic.
#[derive(Debug)]
enum Platform {
Windows,
Linux,
Macos,
}
impl Platform {
fn parse(platform: &str) -> Platform {
if platform == "windows" {
Platform::Windows
}else if platform == "linux" {
Platform::Linux
}else if platform == "macos"{
Platform::Macos
}else{
panic!("Unknown platform: {}. Valid values: windows, linux, macos", platform);
}
}
}
fn main(){
let plat_arg = "apel";
let platform = Platform::parse(plat_arg);
println!("Output : {:?}", platform);
}
Karena plat_arg berisi data yang tidak diharapkan, akan masuk kedalam block else yang berisi perintah panic.
thread 'main' panicked at 'Unknown platform: apel. Valid values: windows, linux, macos', src\main.rs:19:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: process didn't exit successfully: `target\debug\rustdasar.exe` (exit code: 101)
Macro lain untuk melakukan panic
- unreachable!, digunakan ketika compiler tidak dapat menentukan code tertentu adalah unreachable. Contoh loops yang diterminate secara dinamis.
- unimplemented!, digunakan untuk code yang belum diimplementasikan.
- assert!, umum digunakan pada test code, tidak akan dibahas dalam tutorial rust dasar.
Berikut contoh penggunaannya
enum DoorState {
Opened,
Closed,
}
enum DoorAction {
Open,
Close,
}
fn take_act(cur_state: DoorState, act: DoorAction){
match (cur_state, act){
(DoorState::Opened, DoorAction::Close) =>{
unimplemented!();
},
(DoorState::Closed, DoorAction::Open) =>{
unimplemented!();
},
_ => unreachable!(),
}
}
fn main(){
take_act(DoorState::Opened, DoorAction::Open);
//take_act(DoorState::Opened, DoorAction::Close);
}
Dengan berakhirnya modul ini, tutorial Rust Dasar sudah selesai. Semoga bermanfaat.