Skip to content

unwrap や anyhow 使うか問題 #41

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
yuk1ty opened this issue May 2, 2021 · 2 comments
Open

unwrap や anyhow 使うか問題 #41

yuk1ty opened this issue May 2, 2021 · 2 comments
Labels
コメントを募集 ディスカッションが必要で、コメントを募集しています 全体方針 全体方針を決めるための Issue です

Comments

@yuk1ty
Copy link
Owner

yuk1ty commented May 2, 2021

  • unwrap を使用してよいか、できうる限り Result 型はエラーハンドリングするべきかの指針を決める。
    • main 関数内ではそれ以上伝播させる必要はないから、unwrap してしまってもよいのではと考えている。
    • unwrap は「こういう値は絶対来ないはずで、来たら何かがおかしいと言えるから unwrap しておく」みたいな箇所にも使うことがある。
  • anyhow 使うか問題
@yuk1ty yuk1ty added コメントを募集 ディスカッションが必要で、コメントを募集しています 全体方針 全体方針を決めるための Issue です 書き途中 まだ内容を埋めきってないので、もうちょっと待って labels May 2, 2021
@laysakura
Copy link
Collaborator

main 関数内ではそれ以上伝播させる必要はないから、unwrap してしまってもよいのではと考えている。

ほぼ同意です。ただし「main の中でほぼ全部のResultを unwrap している」となると、 ? を使ったほうが(関数分割したときなどに)良いなと思ってしまいます。

unwrap は「こういう値は絶対来ないはずで、来たら何かがおかしいと言えるから unwrap しておく」みたいな箇所にも使うことがある。

このケースはどちらかというと expect("絶対来ない理由") と書いたほうが良いプラクティスかと思います。
ただし強制するほどのことでもないとは思います。

anyhow 使うか問題
個人的には、 #39 にてある程度エラー型が共通化されたタイミングで使うのをやめたいと思っている。

ほぼ全面同意です。
共通エラーは用意しつつも学習用途ですし、Error型を自前で定義するのも良い勉強になるかと思うので使わなくても良い程度のものでイメージしています。
(ただしError型を使えばもっときれいに書けるようなケースでは積極的な使用をレビューで推奨)

ちなみに共通エラーは

  • Errorトレイトを実装
  • Fromstd::io::Error, Fromstd::fmt::Error など、よくあるエラーからの変換を実装

したようなものと考えて良いでしょうか?

@yuk1ty
Copy link
Owner Author

yuk1ty commented May 3, 2021

はい、共通のエラーは下記2点を想定しています。

  • Errorトレイトを実装
  • Fromstd::io::Error, Fromstd::fmt::Error など、よくあるエラーからの変換を実装

@yuk1ty yuk1ty removed the 書き途中 まだ内容を埋めきってないので、もうちょっと待って label May 3, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
コメントを募集 ディスカッションが必要で、コメントを募集しています 全体方針 全体方針を決めるための Issue です
Projects
None yet
Development

No branches or pull requests

2 participants