現在、Robert MartinのClean Codeを読んでいます。私はそれが素晴らしいと思うし、OOコードを書くとき、私は彼の教訓を心に抱いている。特に、意味のある名前の小さな関数を使用するという彼のアドバイスは、コードの流れをよりスムーズにするものだと思います。次の引用文で簡単に要約できます。
[W] eは、TO段落のセットであるかのようにプログラムを読むことができます。各段落は、現在の抽象化レベルを記述し、次のレベルで後続のTO段落を参照します。
(クリーンコード、37ページ:「TO段落」は、不定詞で表明された文で始まる段落です。「Xを実行するには、ステップYとZを実行します。」「Yを実行するには、...」など。 ) 例えば:
RenderPageWithSetupsAndTeardownsでは、ページがテストページであるかどうかを確認し、テストページである場合は、セットアップとティアダウンを含めます。どちらの場合でも、ページをHTMLでレンダリングします
私は自分の仕事のために機能的なコードも書きます。この本のMartinの例は、まるで段落のセットであるかのように読んでおり、非常に明確です。 。
Haskell標準ライブラリから例を取り出します:
maximumBy :: (a -> a -> Ordering) -> [a] -> a
maximumBy _ [] = error "List.maximumBy: empty list"
maximumBy cmp xs = foldl1 maxBy xs
where
maxBy x y = case cmp x y of
GT -> x
_ -> y
これは、Martinのアドバイスから得られる限りのことですが、それは簡潔で慣用的なHaskellです。彼の本のJavaの例とは異なり、私はそれを彼が要求する一種のリズムを持つ何かにリファクタリングする方法を想像することはできません。Clean Codeの標準に基づいて書かれたHaskellは、長く風変わりで不自然なものになると思います。
関数型プログラミングのベストプラクティスと対立するクリーンコード(少なくとも一部)を検討するのは間違っていますか?彼が言うことを別のパラダイムで再解釈する賢明な方法はありますか?
xs
、ちょっと悪い名前ですが、関数型言語でi
はループ変数と同じくらい一般的です。