3:12 PM
3:13 PM
↑のツイートを見て考えてたんですけど、 Swift においてもこれがアンチパターンかって結構難しいテーマじゃないですか?
3:14 PM
正常系に例外を使うなっていう話って Java の事情の影響を相当受けてる気がして、実際 Effective Java の「例外的状態にだけ例外を使う」という項を読んでも、ほとんどパフォーマンスの話しかしていません。
3:16 PM
Swift の throws はより軽量だと思いますし、また、例外を throw するのは Either / Result に対する do 記法だという立場からすると、 treat が例外を throw するのと結果を return するのは同じことだとも言えます。
3:17 PM
一方で、 can_treat を使う方式だと、チェック忘れを静的に検査できず treat が実行時エラーを起こす可能性を排除できません。
3:18 PM
Effective Java では、 Iteratornextthrow して分岐するか、 hasNext でチェックするまたは nextOptional を返すかという話が載っていて後者が望ましいとあるんですけど、 OptionalResult の一種だと考えると、 throw するか Optionalreturn するのは同じことだとも言えます。 (edited)