Option

Option<T>의 일뢀 μ‚¬μš©λ²•μ€ 이미 μ‚΄νŽ΄λ΄€μŠ΅λ‹ˆλ‹€. β€˜T’ νƒ€μž…μ˜ 값을 μ €μž₯ν•˜κ±°λ‚˜ 아무것도 μ €μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ String::findλŠ” Option<usize>λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

fn main() {
    let name = "LΓΆwe θ€θ™Ž LΓ©opard Gepardi";
    let mut position: Option<usize> = name.find('Γ©');
    println!("find의 λ°˜ν™˜κ°’ {position:?}");
    assert_eq!(position.unwrap(), 14);
    position = name.find('Z');
    println!("find의 λ°˜ν™˜κ°’ {position:?}");
    assert_eq!(position.expect("문자λ₯Ό 찾을 수 μ—†μŒ"), 0);
}
This slide should take about 10 minutes.
  • Option is widely used, not just in the standard library.
  • unwrap은 Option의 값을 λ°˜ν™˜ν•˜κ±°λ‚˜ νŒ¨λ‹‰μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€. expect도 λΉ„μŠ·ν•˜μ§€λ§Œ 였λ₯˜ λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.
    • None λ°œμƒ μ‹œ νŒ¨λ‹‰ μƒνƒœκ°€ 될 수 μžˆμ§€λ§Œ β€™μ‹€μˆ˜β€™λ‘œ None을 μ²΄ν¬ν•˜λŠ” 것을 μžŠμ„ μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
    • 무언가λ₯Ό ν•¨κ»˜ ν•΄ν‚Ήν•  λ•Œ λͺ¨λ“  κ³³μ—μ„œ unwrap/expectλ₯Ό μ‹€ν–‰ν•˜λŠ” 것이 μΌλ°˜μ μ΄μ§€λ§Œ ν”„λ‘œλ•μ…˜ μ½”λ“œλŠ” 일반적으둜 더 λ‚˜μ€ λ°©μ‹μœΌλ‘œ None을 μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • ν‹ˆμƒˆ μ΅œμ ν™”λž€ Option<T>κ°€ λ©”λͺ¨λ¦¬μ—μ„œ T와 크기가 같은 κ²½μš°κ°€ λ§Žλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.