[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๊ณผ ๊ฐ™์€ ํ–‰์œ„๋‹ค.
์ด ์ƒํ™ฉ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ํŒจ๋‹‰์ด ๋ฐœ์ƒํ•œ๋‹ค.


์ด๋ ‡๊ฒŒ