関数は、このようなシグネチャを持つ私たちのコードベースにあります:Try for flow controlを使用することをお勧めしますか?
def hasPermission(...): Try[Unit]
ユーザーが特定のアイテムに特定のアクションを実行する権限を持っている場合、それは基本的にチェックします。ユーザーに許可がある場合は空のSuccess
を返し、そうでない場合は特定の例外タイプのFailure
を返します。この機能は、多くの場合、このような内包内で使用されています
for {
_ <- hasPermission(...)
res <- doSomething()
} yield res
これは悪い習慣のように思えるが、私はそのように感じ、なぜ私はかなり明確にすることはできません。私には、hasPermission
のように見えるのは、単にBoolean
です。
これはTry
の適切な使用ですか?
編集:より具体的であるため、私の質問はリンクされたものとは違うと思います。その人はTry [Unit]を返すという一般的な質問をしていますが、私はそれが受け入れられると信じています。
ブール値は、障害の原因ではなく障害が発生したことを伝えるだけです。あなたは失敗を説明する例外を投げることができますが、それが良い練習であるかどうかは議論の対象となります...成功の場合に有用な結果( '')が返されないという事実はほとんど無関係です。 – Jubobs
[[ユニット\]は正しい方法で試していますか?](http://stackoverflow.com/questions/23898507/is-using-tryunit-the-properway) – Jubobs
@mplis正直なところ、 、 どういたしまして。適切に実行されるフロー制御は、通常、モナド/モナド変圧器の組み合わせです。エラー状態を表すために適切な情報量を表現することは常に困難です。https://www.47deg.com/blog/fp-for-the-average-joe-part-2-scalaz-monad-transformers/ 時にはあなたはアプリケーションを望んでいますが、短絡などをしたいときもありますが、一般的な答えはありませんが、コードベースで 'Unit'リターンタイプを見た場合、コードは3秒後に置き換えられます。それは非常にバイナリなアプローチですが、それはそうです。 – flavian