2010-12-14 2 views
19

Clojureはどのようにして分離の問題を解決しますか?コードはデータであるため、関数をパラメータとして渡してリターンとして使用することができます。Clojureはどのように問題の分離を起こすのですか?

そして、「100個のデータ構造上で100個の関数より1個のデータ構造で機能するより良い1000個の関数」そんな感じ)。

私は、すべてのマップをパックし、それにキーとしてキーワードを付けることを意味します。関数、スカラー、コレクション、すべて...

Separation of Concernsのアイデアは、アスペクト(アスペクト指向プログラミング)と注釈によってJavaで実装されています。これは概念の私の見解であり、幾分限定されているかもしれないので、それを当然としてはいけません。関数型言語で正しい方法(慣用の方法は)仲間のプログラマーのWTFsを避けるために、Clojureの約行くことです何

_

+3

あなたはあなたが何を求めているのかについて少し具体的になりますか?懸念の分離は、100の異なるものを意味するために使用される用語です。 – Sami

+1

アスペクトは、ソースにアクセスせずに既存のコードの動作を変更する方法です。 Clojureと他のLispsは、本質的には独自のスタックを持つグローバル変数である、動的変数を通じて同様のものを提供します。最上位関数(defnで作成された関数)は動的変数であり、 'binding'で束縛することができます。 'binding'の構文は' let'と同じように見えますが、バインディングはバインディングフォーム内の呼び出し内で使用されます。 – Zak

答えて

60

、関心事の分離を処理するための最良の方法は、任意のプログラミングの問題を変換することですデータ構造上の変換のセットに変換します。たとえば、Webアプリケーションを作成する場合、全体の目標はリクエストを受け取り、それをレスポンスに変換することです。これはリクエストデータをレスポンスデータに単純に変換することと考えることができます。 (単純ではないWebアプリケーションでは、開始データにはリクエストだけでなくセッションやデータベースの情報も含まれています)ほとんどのプログラミング作業はこのように考えることができます。

各「懸念」は、変換を可能にする「パイプライン」内の機能です。このようにして、各機能は他のステップから完全に切り離されます。

これは、これらの変換を受けるデータがその構造が豊富である必要があることに注意してください。基本的には、私たちのプログラムのすべての「インテリジェンス」をコードに入れるのではなく、データに入れたいと考えています。複雑な機能プログラムでは、さまざまなレベルのデータが複雑なので、プログラミング言語のように見える必要があります。これは、「ドメイン特有の言語」という考えが出現するところです。

Clojureのは、それが聞こえるかもしれないよりも、これはあまり面倒になり、複雑な異種のデータ構造を操作するための優れたサポートを、持っている

また

は、怠惰なデータ構造のためのClojureのサポートはこれらを可能にする(右行われた場合、すなわち、それは全く面倒ではありません)中間的なデータ構造が実際に(概念的に)サイズが無限になり、ほとんどのシナリオでこのデカップリングが可能になります。この状況で無限のデータ構造を持つことがなぜ価値があるのか​​については、次の資料を参照してください。http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf

この「パイプライン」アプローチは、懸念を分離するためのニーズの90%を処理できます。残りの10%は、Clojureマクロを使用することができます.Clojureマクロは、高度にアスペクト指向プログラミングのための非常に強力なツールと考えることができます。

これは、Clojureの問題を最もよく解消できると信じています。「オブジェクト」または「アスペクト」は、このアプローチでは必ずしも必要な概念ではありません。

+0

うまく言った!さらに注意して、ほとんどの関数が純粋であれば、それらを独立して簡単にテストできます。 –

+0

したがって、オブジェクト(OO言語)ではなく、構造体(関数型言語)を取得します。これは、カプセル化のための対応する「コンセプト」です(高密度、低結合、ブラックボックス、モジュール性を達成するため)。名前はありますか? – Belun

+0

Pythonであるにもかかわらず、同様のパイプライン手法についてよく読んでお読みください:http://www.dabeaz.com/generators/Generators.pdf – szx

関連する問題