Rust Result型とOption型

### Result型
Resultは関数の処理の結果を表す列挙型で、関数が失敗する可能性があるときによく使われる

fn main(){
	let n = 8;
	let m = 2;
	match i32div(n, m){
		Ok(result) => println!("{}/{}={}", n, m, result),
		Err(msg) => println!("エラー:{}", msg),
	}
}

fn i32div(n: i32, m: i32) -> Result<i32, &'static str> {
	if m != 0 {
		Ok(n/m)
	} else {
		Err("ZEROで割ろうとしています")
	}
}

### main()関数の戻り値
他の関数と同じように値を返すことができる。返された値はOSが受け取る
main()の宣言で ->io::Result<()>を追加

use std::io;

fn main() -> io::Result<()> {
	let x = 0;
	let x > 0 {
		println!("{}は正の数です。", x);
		Ok(())
	} else {
		println!("{}は正の数ではありません。", x);
		Err(io::Error::new(io::ErrorKind::Other, "error!"))
	}
}

### Option型
Option型は値がない可能性がある値を表現する列挙型で、値があることを示すSome(T)

pub enum Option<T> {
	Some(T),
	None,
}
fn getvalue(a:&Vec<i32>, n: i32) -> Option<i32> {
	for x in a.iter(){
		if x == &n {
			return Some(n);
		}
	}
	None
}

fn main() {
	let a = vec![1, 3, 5, 7, 9];
	let n = 5;

	match getvalue(&a, n) {
		Some(result) => println!("値{}があります。", result),
		None => println!("値は{}はありません", n),
	}
}