throws
はより軽量だと思いますし、また、例外を throw
するのは Either
/ Result
に対する do
記法だという立場からすると、 treat
が例外を throw
するのと結果を return
するのは同じことだとも言えます。can_treat
を使う方式だと、チェック忘れを静的に検査できず treat
が実行時エラーを起こす可能性を排除できません。Iterator
が next
で throw
して分岐するか、 hasNext
でチェックするまたは next
が Optional
を返すかという話が載っていて後者が望ましいとあるんですけど、 Optional
を Result
の一種だと考えると、 throw
するか Optional
を return
するのは同じことだとも言えます。 (edited)