Avatar
Avatar
trickart
おっしゃるとおり取れる選択肢は少ないとは思いますが、 UXを考えて実装を作り込もうと思ったときは大事になると考えています。 単純なリトライだけでなく「タイトル被ってるから変えてね」と入力画面に戻すとか色々細かくやるときなど。 実際そこまでやることあんまりないしコストパフォーマンス釣り合ってないとかはあるかもしれませんが、使う側としてはできるのであればあっただけよいかなと。 「そのError出るの知ってたらcatchで対応してたよ…(いちいち全部コード読まないと分からないの…?)」というのがなくなってほしい。 (edited)
「タイトル被ってる」みたいなエラーは便利なので列挙したいですね。 (1)「含みうるエラー」を伝えるために列挙する事と、 (2)「ありえる全てのエラー」を完全に列挙する事にギャップがあると考えています。 (1)は便利だけど、typed throwsで(2)を目指してしまうと、先述のように抽象化できないとか、 どうせほぼ意味のある処理は作れない下層の異常が飛んでくる、のに、そいつらを列挙する労力が無駄にかかりすぎてしまう。
t_naruhodo 1
12:01 AM
僕は最近は (1) だけ実現するために func login() async throws -> Result<LoginResult, LoginError> みたいにやってます。 (edited)
12:02 AM
そのレイヤーで関心があって、特別なハンドリングがありえるエラーはResultで明記して、その他の下層のエラーを流し込むために throws も付けておく。 (edited)