Option — value may or may not exist (no error info). Result — operation succeeded or failed (carries error info).
Option:
Some(T) or None.1fn first_char(s: &str) -> Option<char> {2 s.chars().next()3}45let c = first_char("hello")6 .map(|c| c.to_uppercase().to_string())7 .unwrap_or("?".to_string());
Result:
Ok(T) or Err(E).? operator propagates errors.1use std::fs;23fn read_file(path: &str) -> Result<String, std::io::Error> {4 fs::read_to_string(path)5}67fn main() -> Result<(), Box<dyn std::error::Error>> {8 let content = read_file("config.txt")?;9 println!("{}", content);10 Ok(())11}
When to use:
Option for: lookups, optional fields, nullable values.Result for: I/O, parsing, network, any fallible operation.Common mistakes:
unwrap() in production.Option when error reason matters.