僕は木になりたい。。。

子供のとき本気でそう思ってました。 理由は樹齢が長いから

DSL

C#3.0のLINQ 言語に組み入れるあたりは流石4

Visual Studio 2008 C#で開発効率アップ!:第1回 コード比較で理解するC#3.0の新機能(1)|gihyo.jp … 技術評論社
クエリー式の正体

クエリー式の正体は,シンタックスシュガーです。従って,クエリー式を使わずに記述することもできます。

以下の2つのコードを見比べてみてください。

var q = 
    from x in this.Collection
    where x.Age < 20
    orderby x.Name
    select new { Code = x.Code, Name = x.Name };
var q = 
    this.Collection
        .Where(x => x.Age < 20)
        .OrderBy(x => x.Name)
        .Select(x => new { Code = x.Code, Name = x.Name });

長いので改行されていますが,単にデリゲートを引数としたメソッドを書き連ねているだけです。各メソッドの引数では,ラムダ式が使われていることがわかります。

これに以前エントリーした以下の記事に関係している。
僕は木になりたい。。。 : 流れるようなインターフェース - livedoor Blog(ブログ)
流れるインタフェーススタイルはその中のメソッドにフューチャーしていて、 「1つの事を上手に行う為に、次の仕事の案内を戻り値のインタフェースによって伝えながら、対話的に行う。」 という事になる。さらに、案内は選択肢が多くても意味がない。
やってみればわかると思うけど、かなり設計が難しい。失敗すると間違いなくカオスになるから、むやみにやらない事も大事だと思った。 仮に、近い将来このスタイルが流行ったとしても、開発プロジェクトとしてはあまり幸せじゃない結果をもたらす気がするなぁ。
上記エントリーを書いた時点で既に、C#3.0はあったわけだけど、 全然知らなかった。
これ、何に驚いているかというと、言語に組み込んでしまうという所。
盲点だった。
開発効率を最優先している.NETらしいし、 実装が複雑になってしまうデメリットを、始めから言語に組み込むことで 一気にメリットにしてしまった。
シンタックスシュガーを作ってDSL風(というか完全なDSLだよね)にしてしまった当たりはもう脱帽。
考えてみれば、getter setterをプロパティという言語仕様に押し込んだのも.NETだったし、この手のやり口には驚くばかり
いつもワクワクさせてくれます。

流れるようなインターフェース4

流れるようなインタフェース

という名前で最近はやっている実装スタイルがあるらしい事を 今日知った。

名付け親は、ファウラーさん。
Martin Fowler's Bliki in Japanese - 流れるようなインターフェース

で、どんな実装かっていうのは上のリンクを見てもらうとして、 つまりDSLを実現しようとしているような感じ。

昔、まだオブジェクト指向とJavaを知って 興奮しながらコーディングしてた時に 同じような発想をした事がある。

実際にコードを書き始めたが、その時は挫折した。
なぜかというと、設計が難しい。 システム内のいろんな局面でそれをやろうとすると、 クラス(インタフェース)の数が膨大になる。

この実装のポイントは、
ある目的を達成する為の手続きの為に、 インターフェースを細かく設計し、 それぞれのメソッドをうまく融合させて、 1つの事が実現する。
という事だと思う。

オブジェクト指向では、クラス中心に システムを設計していき、クラスの役割を、 「1つの事を上手に行う」という発想で 設計していく。これはクラス中心の発想。

流れるインタフェーススタイルはその中の メソッドにフューチャーしていて、
「1つの事を上手に行う為に、 次の仕事の案内を戻り値のインタフェースによって伝えながら、 対話的に行う。」
という事になる。 さらに、案内は選択肢が多くても意味がない。

そう対話的なのです。 つまり、完結しないメソッドを実装する事になります。

Statement st = 
 generator.select("id, hoge, mage")
          .from("orders")
          .where("xx=hoge");
みたいな感じかな。

IDEでエラーになるから、楽だよ。 的な発言もあるけど、やってみればわかると思うけど、 かなり設計が難しい。 失敗すると間違いなくカオスになるから、 むやみにやらない事も大事だと思った。

仮に、近い将来このスタイルが流行ったとしても、 開発プロジェクトとしてはあまり幸せじゃない 結果をもたらす気がするなぁ。

しかし、これをどこかで、実装したくてウズウズする自分もいる。 静的言語でも、DSL行けるんじゃねぇか。 今ならできるかもみたいな。。

livedoor プロフィール
記事検索
読書をしよう
楽天市場
こちらもどうぞ
Archives
RSS
  • ライブドアブログ