ハスケルでは、私は$を使って式を書くことがよくあります。私はそれが非常に自然で読みやすいと思っていますが、時にはそれが悪い形であり、それがなぜ必要なのか理解していません。
答えて
次は、すべての良いフォームです:
foo = bar . baz . quux
foo x = bar . baz . quux $ x
foo x = (bar . baz . quux) x
foo x = bar (baz (quux x))
いつものように変化し味が、状況が異なる選択を要求するかもしれませんが、私は、私の好みの大まかな順序でそれらを入れています。私もたまにbar
、baz
のそれぞれ、およびquux
部分式が長い場合
foo = bar
. baz
. quux
を見てきました。以下は悪い形式です:
foo x = bar $ baz $ quux $ x
これはあまり好ましくない理由が2つあります。第1に、リファクタリング中に補助定義にコピーして貼り付けることができるサブ表現を少なくすることができます。 (.)
と($)
事業者とbar . baz
またはbaz . quux
のようにも部分式が別々の定義に引き出すことができるのに対し、すべての($)
事業者と、x
引数を含めるだけの部分式は、有効なリファクタリングです。
(.)
を好む第2の理由は、($)
の固定性の可能性のある変更を予期しているためです。現在、($)
はそうのように、それは、右に関連付け意味、infixr
です:それはinfixl
た場合
foo x = bar $ (baz $ (quux $ x))
しかし、($)
は、以上の式に有用であろう。
foo h = f (g x) (h y)
foo h = f $ g x $ h y
foo h = (f $ g x) $ h y
...現在はカッコなしでは表現できません。 infixl
アプリケーションで解析されたときに「悪いフォーム」の例では、大幅に異なるものを意味
foo x = ((bar $ baz) $ quux) $ x
だろう。したがって、この形式を避けることで、将来的にコードを保護してください。
私は時々 'barのようなものを見たことがあります。 baz $ quux x'や 'bar(baz。quux $ x)'や他の中置演算子が関わっている場合や、特定の関数アプリケーションが概念的に強調されている場合には、 –
IMOでは、コンフィギュラリカルスタイルでパイプラインを簡単な切り取りと貼り付けで関数にリファクタリングすることができるという事実よりも、fixity引数の方が魅力的です。 – ehird
'bar $ baz $ quux $ x'を持っていれば、現在の固定性で' barと同じです。バズ。 quux $ x'である。もちろん後者は前者よりも奨励されています。 –
- 1. なぜ「goto」が悪いフォームと見なされますか?
- 2. これは悪いRESTFulデザインと見なされますか?
- 3. テーブルを使用してフォームを作成するのは愚かな/古いと見なされますか?
- 4. xsl:for-eachについてはどうして悪いですか?
- 5. コントロールはフォームにフォームが追加されていることをどのように知っていますか?
- 6. JavaScript/TypeScriptでは「メソッドは静的になる可能性があります」という警告は悪いフォームとみなされますか?
- 7. 共有ライブラリはどのように悪用されないのですか?
- 8. OpenRastaの悪い要求がJSONとして返されない
- 9. デシジョンツリー(C4.5など)はノンパラメトリック学習と見なされますか?
- 10. Excel MATCHとINDEXの式で、見つからないか悪いlookup_valueなどのエラー状態を処理するにはどうすればよいですか?
- 11. reinterpret_castを悪用してオブジェクトが派生クラスに変換されていない場合は、それを悪用することはできますか?
- 12. なぜグローバル変数は悪い習慣とみなされますか?
- 13. は、不良フォームと見なされるプロシージャ間で一時テーブルを共有していますか?
- 14. 仮想デストラクタは宣言されていても実装されていないとどうなりますか?
- 15. 私の "if"ステートメントはどのようにSyntaxErrorと見なされますか?
- 16. Codeigniterフォームの検証がカスタムコールバック関数と見なされない
- 17. 私のフォームはどのようにしてRailsで見えますか?
- 18. 悪い要求/フォームがモーダルフォームに定義されていませんフラスコ
- 19. HTMLフォームはどのようにしてexeアプリケーションに投稿されますか?
- 20. スポンサーされたサブプロセスはHerokuの新しいdynoと見なされますか?
- 21. MACアドレスを数字と見なさないようにするにはどうすればよいですか?
- 22. Javascriptフォームを送信するときに、フォームデータが変更されているかどうかチェックしますか?
- 23. フォームが提出されているかどうかをチェック
- 24. どのようなクラウドリクエストがシングルAPIコールと見なされますか?
- 25. Djangoフォームは、モデルインスタンスでインスタンス化されていても、バインドされていないと表示されます。
- 26. 悪いハンドラのマッピングが再表示されないようにします
- 27. Plone:フォームが提出されたかどうか確認してください。
- 28. コンテキストスイッチ:最悪のシナリオではどうなりますか?
- 29. コレクションタイプ間で変換するのが悪いフォームと考えられますか?
- 30. フォームが実行時にスケーリングされていないように見える
悪いフォームとして記載されている場所の参照はありますか? – bobbymcr
短い答え:いいえ。 –