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일차 κ³Όμ •μ—μ„œ μ‚΄νŽ΄λ΄…λ‹ˆλ‹€.