Avatar
Avatar
niw
そもそもエラーのコンテキストは局所性が高くて、例えば特定の依存する条件が成立しないないみたいなときに、そのコンテキストは依存のとても深くで起こることがあって、それを最上部のユーザーに見える場所でそのコンテキストを得てかつそのたの操作からわかりやすい(つまり原因を説明する)メッセージを出すってことになるので、大規模なシステムになればなるほど仕組み的に困難だと思う。 (edited)
理想的には各レイヤーでそれぞれのドメインに適したエラーに包み直して、詳細は Java みたいに cause でチェーンして示すというのがいいんでしょうね。すべてが型付けされていれば、最上位レイヤーで起こり得るエラーが( cause も含めて)型で洗い出すことが可能になり、そこからユーザーが必要になる粒度に応じてエラーメッセージを提供するみたいな。めっちゃ実装面倒ですが。 Swift の Forums でも、仮に Typed Throws を採用しても、複数のエラー型を列挙できるようにはしないという話がされていて、おそらくその理由は各レイヤーでそれらの粒度に応じてエラーを包み直すのが望ましいからかと。