私は(私が知る限りは)大文字小文字の表現やガードを使用できる関数を作成しました。「ガード」を書くための好ましい方法はどれですか?
foo a b c = case a of 1 -> [...]
2 -> [...]
3 -> [...]
[...]
otherwise -> error "..."
または
foo a b c | a == 1 = [...]
| a == 2 = [...]
| a == 3 = [...]
| [...]
| otherwise = error "..."
だから、質問は:コーディング、「より良い」であるこれらの2(ケースやガード)のどれ?どちらも基本的に同じですか?
最初の例では、そのような 'otherwise'を使うべきではありません。それがするのは、 'otherwise = a'という新しい変数を導入し、微妙なバグにつながる可能性があるということです。代わりに '_ - > error" ... "'を実行する必要があります。 – dflemstr
@dflemstr情報と解説に感謝します。 – Nomics
一般的なクロスランゲージのヒントとして、私は、次の行に常に同じ字下げレベルでコードのサブブロックを書き込む方が好きです。最初のものの長さが変わった場合(おそらくfooの名前が変更されたり、何かの行があるため)、残りの行を再インデントする必要から保護します – hugomg