[Rust] ? μ°μ°μ (question mark operator)
? μ°μ°μλ Rust μ€λ₯ μ²λ¦¬ μμ€ν
μ ν΅μ¬μ μ΄λ£¨λ syntax sugar μ€ νλλ€.
μ€λ₯μ μ ν(propagation)λ₯Ό μ©μ΄νκ² νλ μλ¨μ΄λΌκ³ ν μ μλ€.
λ¬Έμ
μλ€μνΌ, Rustλ μ ν΅μ μΈ try-catch μ€λ₯μ²λ¦¬ ꡬ쑰λ₯Ό κ±°λΆνκ³ , ν¨μνμμ μ£Όλ‘ μ¬μ©νλ monad κΈ°λ°μ μ€λ₯μ²λ¦¬λ₯Ό κΈ°λ³ΈμΌλ‘ μ¬μ©νλ€. Resultμ Option λ§μ΄λ€.
κ·Έλμ λ§μ½ μ΄λ κ² κ°λ³ ν¨μμμ μ€λ₯λ₯Ό λ°νν μ μλ μν©μ΄λΌλ©΄
νΈμΆμ ν¨μλ κ·Έ μ€λ₯λ₯Ό μ μ ν λ°μμ μ²λ¦¬λ₯Ό ν΄μ€μΌ νλ€.
κ·Όλ° μ΄κ², κ·Έλ₯ μ¬κΈ°μ μ²λ¦¬λ₯Ό νκ³ λλ΄λ©΄ μ’κ² μ§λ§, λ μ€λ₯λ₯Ό κ·Έ μμλ‘ μ ννλκ² ν¨μ¨μ μΈ κ²½μ°μΌ λκ° λ§λ€.
try-catch μμ€ν
μμλ μ΄κ² μ½λ€. κ·Έλ₯ catchλ₯Ό νμ§ μμΌλ©΄ μμΈκ° νΈμΆμλ‘ λ λ겨μ§κΈ° λλ¬Έμ΄λ€.
νμ§λ§ Rust μ²λΌ μ€λ₯λ₯Ό λͺ λ°±ν κ°μ μΌμ’ μΌλ‘ λ€λ£° κ²½μ°μλ, μμ μ½λμ²λΌ μ€λ₯μ λν΄μ λ§€λ² λ²κ±°λ‘κ² λΆκΈ°λ₯Ό μ³μ€μΌ νλ€.
? μ°μ°μ
? μ°μ°μλ μ΄λ° λΆνμν 보μΌλ¬νλ μ΄νΈλ₯Ό μ΅μννκΈ° μν 보쑰 λ¬Έλ²μ΄λΌκ³ 보면 λλ€.
μμ λ²μ‘ν μ½λμ ? μ°μ°μλ₯Ό μ μ©νλ©΄, λλΌμΈ μ λλ‘ μ½λλ₯Ό κ°κ²°νκ² λ§λ€ μ μλ€.
λμμ λ°©κΈ μ½λμ λμΌνλ€.
Resultκ° μ€λ₯ μνλΌλ©΄ λ°λ‘ μ€λ₯λ₯Ό λ°ννκ³ , μ€λ₯κ° μλλΌλ©΄ unwrapμ ν΄μ κ·Έ κ°μ κ·Έλλ‘ λ°νν΄μ£Όλ κ²μ΄λ€. κ·Έκ±Έ μ μ°μ°μ νλλ‘ μΆμ½ν κ²μ΄λ€.
κ·Έλ¦¬κ³ μ μλ―Έν κ°μ΄ λ°νκ°μΌλ‘ μ‘΄μ¬νλλΌλ, κ·Έλ₯ λ°μμ μ°λ©΄ λλ€.
μ΄λ κ² λ§μ΄λ€.
κ·Έλ¦¬κ³ μ΅μμ λ μ΄μ΄-main ν¨μμμλ μ¬μ© κ°λ₯νλ€.
μ¬κΈ°μ μ€λ₯κ° λ°μνλ©΄ λΉμ°ν νλ‘κ·Έλ¨μ΄ λ»λλ€. κΆμ₯λλ μ¬μ© λ°©μμ μλλ€.
? μ°μ°μμ μ μ© λμ
μμμλ Resultλ§ μμλ‘ λ€μμ§λ§, Option νμ μ λν΄μλ μ μ©μ΄ κ°λ₯νλ€.

? μ°μ°μλ λΉμ°ν μ무 νμ
μλ μ μ©λλ κ²μ μλκ³ , Try νΈλ μμ ꡬννλ νμ
μ λν΄μλ§ λμνλ€.
νμ¬λ‘μλ Result, Option νμ
μ λν΄μλ§ μ§μμ΄ λλ€.
λ€λ§ νμ¬ μμ μμ Try νΈλ μμ μ§μ ꡬνμ nightlyμ΄κΈ° λλ¬Έμ, μ§μ ꡬνν λνΌ νμ
μ λν΄μλ ? μ°μ°μλ₯Ό μ¬μ©ν μ μλ€.
λ¬Έμ : Option<>Result κ° νμ λΆμΌμΉ
? μ°μ°μμ λΆνΈν λΆλΆ μ€ νλλ, ? μ¬μ©λμ ν¨μμ λ°ν νμ κ³Ό νμ¬ ν¨μμ λ°ννμ μ΄ μΌμΉνκ±°λ, λ³ν κ°λ₯ν΄μΌ νλ€λ κ²μ΄λ€.
μ΄κ² λ¬΄μ¨ λ§μ΄λ?

μ΄λ° μμΌλ‘ Resultμ Optionμ 무μμ μμ΄μΈ μ μλ€λ κ²μ΄λ€. μ¬μ€ λΉμ°νλ€.
λ¨μ Option<-Result κ° λ³νμ΄λΌλ©΄ κ°λ¨ν κΌΌμλ‘ μ²λ¦¬ν μ μκΈ΄ νλ€.
Result::ok ν¨μλ κ°μ Option ννλ‘ λ³ννλ€.
μ΄λ¬λ©΄ Resultμ μ€λ₯ μ λ³΄κ° μ μ€λκΈ΄ νμ§λ§, λμ΄κ°κΈ΄ νλ€.
λ°λλ‘ Option->Resultλ‘ λκΈΈ κ²½μ°μλ ok_orλ‘ μ€λ₯ νμ
μ λ§€νν΄μ£Όλ©΄ λλ€.
λ¬Έμ : Resultμ μ€λ₯ κ° νμ λΆμΌμΉ
λ νν λ§λ₯λ¨λ¦¬λ λ¬Έμ μ€ νλκ°, κ°μ Result νμ μ΄λλΌλ Error νμ μ΄ νΈνλμ§ μμΌλ©΄ ? μ°μ°μκ° λμνμ§ μλλ€λ κ²μ΄λ€.

μΈλΆ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ€λ³΄λ©΄, μ΄λ° μμΌλ‘ μλ³Έ μ€λ₯ νμ
λ€μ΄ νΌμ¬λ κ²½μ°κ° μ¦λ€.

κ·ΈλΌ λΉμ°ν μλ¬κ° λλ€.
κ²°κ΅ μ§κΈ ν¨μμμλ μ€λ₯κ° λ°μνλ©΄ Error νμ
μΌλ‘ λ°νμ ν΄μΌνλλ°, μ΄μν μ€λ₯ νμ
μ΄ κ»΄μμΌλ νμ
μ΄ λ»λλ κ²μ΄λ€.
μ΄ λ¬Έμ λ κ½€ κ°λ¨νκ² ν΄κ²°ν μ μλ€.

κ·Έλ₯ From trait ꡬνμ ν΅ν΄ μ€λ₯ κ° νμ
λ³νμ μ 곡ν΄μ£Όλ©΄ λλ€.
κ·ΈλΌ μ΄ μ λλ μμμ κ°μ§ν΄μ λ³νμ²λ¦¬ν΄μ€λ€.