Option, Result

Result๋Š” Option๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ž‘์—…์˜ ์„ฑ๊ณต ๋˜๋Š” ์‹คํŒจ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๊ฐ๊ฐ ํƒ€์ž…์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด๋Š” ํ‘œํ˜„์‹ ์—ฐ์Šต์—์„œ ์ •์˜๋œ Res์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ œ๋„ค๋ฆญ: Result<T, E>์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ T๋Š” Ok ๋ณ€ํ˜•์— ์‚ฌ์šฉ๋˜๊ณ  E๋Š” Err ๋ณ€ํ˜•์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

use std::fs::File;
use std::io::Read;

fn main() {
    let file: Result<File, std::io::Error> = File::open("diary.txt");
    match file {
        Ok(mut file) => {
            let mut contents = String::new();
            if let Ok(bytes) = file.read_to_string(&mut contents) {
                println!("๋‹ค์ด์–ด๋ฆฌ: {contents}({bytes}๋ฐ”์ดํŠธ)");
            } else {
                println!("ํŒŒ์ผ ์ฝ˜ํ…์ธ ๋ฅผ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
            }
        }
        Err(err) => {
            println!("๋‹ค์ด์–ด๋ฆฌ๋ฅผ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. {err}");
        }
    }
}
This slide should take about 10 minutes.
  • Option์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ์˜ ๊ฐ’์€ Result ๋‚ด๋ถ€์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ, ๊ฐœ๋ฐœ์ž๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ด๋ฅผ ์ถ”์ถœํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ๊ฐ’์„ ์ฝ๊ธฐ ์ „์— ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜๋“œ์‹œ ์ฒดํฌํ•˜๋„๋ก ์œ ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ์ ˆ๋Œ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด unwrap()์ด๋‚˜ expect()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๊ฐœ๋ฐœ์ž์˜ ์˜๋„(์—ญ์ฃผ: ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์—†์Œ)์„ ๋ช…์‹œ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
  • Result documentation is a recommended read. Not during the course, but it is worth mentioning. It contains a lot of convenience methods and functions that help functional-style programming.
  • Result๋Š” ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํ‘œ์ค€ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. 3์ผ์ฐจ ๊ณผ์ •์—์„œ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.