関数型プログラミング言語Haskell Part29 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0827デフォルトの名無しさん
2015/12/29(火) 13:40:10.25ID:X0OP3kiAたしかに bracketOnError の第2引数は、第3引数で例外が発生しない限り実行されません。
その意味では「例外の無い通常運転では第2引数を実行するコストはかからない」のでその分効率的でしょうね。
ただ問題は、そのような処理の流れで本当に大丈夫なの? と言うことです。
あなたが実現させたい処理の流れに合っているかどうか、それが最も大事です。
bracket と bracketOnError のどちらを使っても実現させたい処理に適合するのなら、
より効率的な方を選ぶのも手です(効率の他に、ソースがより読みやすい方を選ぶのも手)。
効率よりもまずは合っているかどうかを考えた方が良いと思います。
>>825 で「役割が違う、効率で比較するものではない」と言ったのはそういう意味です。
合わないものを工夫して合わせるのはバグの元なので、
そういう工夫はそれしか手段がない場合のみやるべきだと私は思います。
もし bracketOnError の第3引数にリソース解法処理を「必ず行うように」書くのなら、
あなたがメリットだと感じている「例外がなければ第2引数を実行するコストがかからない」
というのは無くなり、処理的には bracket と「ほぼ」同等になりますが、
それなら bracket を使うべきだと私は思います。
同じ処理を実現するなら、手間がかかる bracketOnError より楽に bracket です。
■ このスレッドは過去ログ倉庫に格納されています