Rustにおけるエラーハンドリング

unwrap()

エラー処理を省力する際はunwrap()関数を用いる。
実際のアプリケーションでは推奨されない。
エラーが発生した場合にプログラムを強制終了する。

let line = "35565"
let n: i64 = line.trim().parse().unwrap();

expect()

unwrap()関数にエラー文を詳細に追加したい場合はexpect( ... )関数を用いる。
引き数にエラー発生時に表示する文を入れる。

let line = "35565"
let n: i64 = line.trim().parse().expect("lineをnへ代入時のparse失敗".to_string);

Result<T, E>

実際のアプリケーションではResult型を使用する。
これは次のコードで定義されている。

pub enum Result<T, E> { 
	Ok(T), 
	Err(E), 
}

DartのジェネリクスTは成功したときの値、Eはエラーの場合の値が入る。

以下にコード例を示す。

fn divide(x: i32, y: i32) -> Result<i32, String> { 
	if y == 0 { 
	return Err("0で割ることはできません".to_string()); 
	} 
	Ok(x / y) 
}

Result型の値を取り出す際にはmatchキーワードを使用する。

fn main() { 
	let result = divide(10, 2); 
	match result { 
		Ok(result) => println!("Result: {}", result), 
		Err(err) => println!("Error: {}", err), 
	} 
}

変数resultで得られた値がOk型ならmatchOk型だった際の分岐へ移動する。
Err型ならばErr型であった際の分岐へ移動する。