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!("пошук повернув {position:?}"); assert_eq!(position.unwrap(), 14); position = name.find('Z'); println!("пошук повернув {position:?}"); assert_eq!(position.expect("Символ не знайдено"), 0); }
This slide should take about 10 minutes. 
                    - 
Optionшироко використовуються, і не тільки в стандартній бібліотеці. - 
unwrapповерне значення вOption, або паніку.expectпрацює аналогічно, але повертає повідомлення про помилку.- Ви можете панікувати на None, але ви не можете “випадково” забути перевірити на None.
 - Під час швидкої експерементації зазвичай прийнято використовувати 
unwrap/expectповсюди, але у виробничому кодіNoneзазвичай обробляється у більш зручному вигляді. 
 - 
“Нішова оптимізація” означає, що
Option<T>часто має той самий розмір у пам’яті, що йT, якщо є деяке представлення, яке не є допустимим значенням T. Наприклад, посилання не може бути NULL, томуOption<&T>автоматично використовує NULL для представлення варіантуNone, і таким чином може зберігатися у тій самій пам’яті, що й&T.