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์ผ์ฐจ ๊ณผ์ ์์ ์ดํด๋ด ๋๋ค.