[Zig] Error union type
Error union type์ zig์์ ์ค๋ฅ๋ฅผ ๋ค๋ฃจ๋ ์ฃผ๋ ๋ฐฉ๋ฒ๋ก ์ด๋ค.
Golang๊ณผ ์งํฅ์ ์ด ๊ฑฐ์ ๋น์ทํ๋ค. ํ๋์ ๋จ์ผ error ํ์
์ ๋ชจ๋ ์๋ฌ ํํ๋ฅผ ์งฌํต์ฒ๋ผ ๋ฐ์ ์ ์๋ค.
์๋ฌ ์ ์
์. ์ผ๋จ ์๋ฌ ํ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋ ์ ์๋ค.
๊ทธ๋ฌ๋ฉด Negative์ Zero๋ผ๋ ์๋ฌ ํ์
์ด ์ ์ฒด ์๋ฌ ํ์
์ ์ถ๊ฐ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ MathError๋ผ๋ ๊ทธ๋ฃน์ ๋ฌถ์ด๋ ๊ฒ์ด๋ค.
๊ธฐ๋ณธ ์์ฉ
๋ชจ๋ ์๋ฌ ๊ฐ๋ฅ ํ์
์ !T์ ํํ๋ก ์ ์๋ ์ ์๋ค.
!i32๋ผ๋ฉด, ์์ ๋ค์ด์๋ ๊ฐ์ด i32์ผ ์๋ ์์ง๋ง error์ผ์๋ ์๋ค๋ ๋ป์ด ๋๋ค.
์๋๋ ์๋ฌ ๋ฐํ ํ์ ์ ์ ์ฉํ ์์ ์ฝ๋๋ค.
๋ง์
์ ์ฉ๋์๋ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ๋ง๋ค์ด์ก์ง๋ง, ์ฐ๋ณ์ด 0์ด๊ฑฐ๋ 0๋ณด๋ค ์์๋ ์ค๋ฅ๋ฅผ ๋ฐํํ๋๋ก ํ๋ค.
๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค์ ๊ฐ์ ๋น๊ตํ๊ณ ๋ถ๊ธฐ๋ฅผ ์น๋ฉด์ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ํด๋ณผ ์ ์๋ค.

์ ์๋ํ๋ค.
try ํค์๋
๊ทผ๋ฐ ์์ ์ ์๋ฌ์ฒ๋ฆฌ๋ ๋๋ฌด ๋ฒ์ก์ค๋ฝ๊ณ ์ง์ ๋ถํ๋ค.
๋คํํ๋ zig๋ ๊ฐ์ํ๋ ์๋ฌ์ฒ๋ฆฌ ๋ฐฉ๋ฒ๋ก ์ ์ ๊ณตํ๋ค.
๊ทธ๊ฒ ๋ฐ๋ก ์ด์ ๊น์ง ์ฝ์์ ์ฐ์๋ ์จ๋จน์๋ try๋ค.
์ค๋ฅ ๊ฐ์ ๋ํด try๋ฅผ ์ฌ์ฉํ๋ฉด, ์ค๋ฅ๊ฐ ์๋๋ผ๋ฉด ๋ด๋ถ์ ์ ์์ ์ธ ๊ฐ์ ๋ฐํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ฌ๊ฐ ๋ค์ด์๋ค๋ฉด ํด๋น ์ค๋ฅ ๊ฐ์ returnํ๊ณ ํจ์๋ฅผ ํ์ถํ๋ค.
๊ทธ๋์ ์ ๊ธฐ์ ์ค๋ฅ ์ํฉ์ ์ ๋ฐํ๋ฉด
main ํจ์๊ฐ ์ค๋ฅ๋ฅผ ๋ฐํํ๊ฒ ๋๋ค.
์ด๊ฑด Rust์์ ๋ฒ ๊ปด์จ ๋งค์ปค๋์ฆ์ธ ๊ฒ ๊ฐ๋ค. ๊ฝค ๊น๋ํ๋ค.
catch ํค์๋
try๋ ์ค๋ฅ ์ํฉ์ ๋ฌด์กฐ๊ฑด ์ค๋จํด์ผ ํ ์ํฉ์๋ ๋์์ด ์ ํฉํ์ง๋ง, ๊ทธ๋ ์ง ์์ ๋๋ ์๋ค.
์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ ์ ๋นํ ๊ธฐ๋ณธ๊ฐ์ ์ฃผ๊ณ ๋์ด๊ฐ๊ณ ์ถ์ ๋๊ฐ ์์ ๊ฒ์ด๋ค. catch๋ ๊ทธ๋ฐ ์ฉ๋๋ค.
๊ฐ๋จํ๋ค. ์ค๋ฅ๊ฐ ๋จ๋ฉด ๊ทธ๋ฅ 44444๋ฅผ ๋ฐํํ๋๋ก ํ๋ค.
์๋ฌ๋ฅผ ๊ฐ์ ๋ก ๋ฒ๊ธฐ๊ธฐ
๋ง์ฝ ์ค๋ฅ๊ฐ ์๋์ ์์ ํ ๋ณด์ฅํ ์ ์๋ค๋ฉด catch unreachable์ ์ฌ์ฉํ ์ ์๋ค.
์ด๊ฑด unwrap๊ณผ ๊ฐ์ ํ์๋ค.
์ด ์ํฉ์์ ์๋ฌ๊ฐ ๋ค์ด์ค๋ฉด ํจ๋์ด ๋ฐ์ํ๋ค.
์ด๋ ๊ฒ