Enum з двома варіантами: Some(T) або None. Замість null на C/Java.
let x = Some(5);
let y: Option = None;
match x {
Some(n) => println!("Value: {}", n),
None => println!("No value"),
}
// unwrap() - небезпечно!
let val = x.unwrap(); // паніка якщо None!
Enum для Ok(T) або Err(E).標準для функцій, які можуть помилитися.
fn parse_int(s: &str) -> Result {
match s.parse() {
Ok(n) => Ok(n),
Err(_) => Err(String::from("Failed to parse")),
}
}
let result = parse_int("42");
match result {
Ok(n) => println!("Parsed: {}", n),
Err(e) => println!("Error: {}", e),
}
let x = Some(5);
let doubled = x.map(|n| n * 2); // Some(10)
let val = x.unwrap_or(0); // 5 або 0 якщо None
if x.is_some() {
println!("Some value");
}
let result: Result = Ok(42);
let val = result.unwrap_or(-1); // 42 або -1 якщо Err
let mapped = result.map(|n| n * 2); // Ok(84)
let msg = result.unwrap_or_else(|_| String::from("Default"));
Скорочення для Error propagation. Повертає значення з Ok або завершує функцію з Err.
fn read_file(path: &str) -> Result> {
let mut file = std::fs::File::open(path)?; // Err закінчує функцію
let mut contents = String::new();
std::io::Read::read_to_string(&mut file, &mut contents)?;
Ok(contents)
}
Лекція 17: Колекции Vec, String, HashMap
Дякую за увагу! 💾