Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

Linq式は理解しにくいのか

  Linq式やラムダ式をフィーリングで嫌う人がいます。
v =
 From xx in xxxx
 Where   xxxxx
 Select  xxxxx

"SQL文と語順が違うし、右辺が文章風になっていて、ロジック式には見えない"..だそうです。

From/ Where / Select 句は拡張プロパティで実装されており、その順で実行される。と理解すれば、直に理解できると思うのですがどうでしょう。と話したのですが、

    左辺  = 右辺 のように単純に1:1 になってなくて、  「左辺 = 3つのメソッド」 というのが難しいといわれました。

拡張メソッドや拡張プロパティなどは今後標準仕様となるでしょうから、ますます、左辺  = 右辺という固定概念を払拭できる柔軟性がいります。 既存の仕様に縛られるのは思考が固いと感じるのです。

投稿日時 : 2008年4月29日 10:11

Feedback

# re: Linq式は理解しにくいのか 2008/04/29 11:22 片桐

うーん、私はもっと日本人?的だったのか

vはxxから取ってきて、そのxxはxxxの中にあってこんな条件でSELECTされたxxが要素になってるもの

みたいにベタに読んで、「わかりやすー!」となってしまいました。メソッド、と捉えると難しいのかしらん。
そのあたり、ほんと個人個人の感覚めいたものに近いのかもですね

# re: Linq式は理解しにくいのか 2008/04/29 11:23 とっちゃん

v = From xx in xxxx Where xxxxx Select xxxxx
と一行にしたら 左辺=右辺になるので、違和感がなくなるかもw

# re: Linq式は理解しにくいのか 2008/04/29 12:26 渋木宏明(ひどり)

>From/ Where / Select 句は拡張プロパティで実装されており

拡張メソッドでわ。

# re: Linq式は理解しにくいのか 2008/04/29 12:27 渋木宏明(ひどり)

拡張プロパティってなんだろ?
自動プロパティはここでは関係なさそうだし。

# re: Linq式は理解しにくいのか 2008/04/29 13:43 Ognac

失礼しました。 拡張プロパティですね。
自然言語感覚が入ってくるとコボル風な記述になるのだろうか。
右辺が ラムダ式になるともっと混乱する人がいるのでしょうね。

# re: Linq式は理解しにくいのか 2008/04/29 15:05 R・田中一郎

拡張メソッドですよぉ^^;

>"SQL文と語順が違うし、右辺が文章風になっていて、ロジック式には見えない"..だそうです。

これは、ちょっと同意できますねぇ。

しかし、クエリ式がデータを取り扱う構文として広く受け入れられているという理由が大きいのでしょうけど、クエリ式は明らかに C# の言語構文とは異なるので、違和感があって当然だと思います。

だから、僕は、基本はラムダで書きます。

> 左辺 = 右辺 のように単純に1:1 になってなくて、  「左辺 = 3つのメソッド」 というのが難しいといわれました。

そういう書き方は文字列処理系のメソッドでも言えると思うんですよね。

string s = value.Trim().ToUpper().Replace("A", "あ");

var v = xxxx.Where(xx => xxxx).Select(xxx);

# re: Linq式は理解しにくいのか 2008/04/29 15:06 R・田中一郎

間違えました。

var v = xxxx.Where(xx => xxxx).Select(xx => xxx);

でした。

# re: Linq式は理解しにくいのか 2008/04/29 17:18 Ognac

>拡張メソッドですよぉ^^;
再度失礼しました。拡張メソッド!!!! (もう間違えないぞ)

>C# の言語構文とは異なるので、違和感があって当然だと思います。
>だから、僕は、基本はラムダで書きます。
慣れの問題なんでしょうね

>var v = xxxx.Where(xx => xxxx).Select(xx => xxx);
まさに、表現の問題でしょうね。ラムダ式に違和感を持つ人もいますし。
VBやCなど特定言語の表現に縛られる時代ではないですよねぇ。
 開発者は保守的な人がいるってことなのかも知れません。

# re: Linq式は理解しにくいのか 2008/05/01 11:27 trapemiya

SQL的に考えるとfromの後にinがあるんで、最初は戸惑いましたね。
私はSQL大好きな人なので、クエリ演算子よりクエリ式で書くことが多いです。場合によってはクエリ演算子とクエリ式を組み合わせると良い場合もありますね。Streetw☆さんに教えてもらったんですが(^^;

int total =
  (from dr in hogeDataSet.HogeDataTable.AsEnumerable()
  where dr.ID == id
  select dr.Kingaku).Sum();

# re: Linq式は理解しにくいのか 2008/05/01 17:10 Ognac

エレガント性を感じます。
 はやく実務で展開したいですね。
 まずは啓蒙なんでしょうが。

タイトル
名前
Url
コメント