ループ処理っていうのは、ある列挙に対して何らかの操作をするものだな。LINQはその何らかの操作を各要素に分解したものだ。これは「列挙を読み込んで新しい列挙(射影)を作成する」機能である。それ以外のことはできない。元の列挙の中身をいじることができない。出来た射影の要素数は元の列挙の要素数と一致する。元の列挙と一対一で新しい要素が生成される。Selectには「Selectで出来ること以外の機能」がないのか。機能を削ったら何が起きるのか。それは、可読性が上がる。いうことかって、Selectでは射影を作ることしかできないからだ。その中に書かれている手続きを読んで理解するまで列挙に何が起きたのかを知るすべはない。Selectであれば「とにかく射影を作っていて、それ以外のことはしていない。」という事が即座に理解できるな。メソッドでは、列挙の要素の内容によって判定をし、フィルタリングする(抽出)以外のことはできない。要素が減る/減らない以外のことは起きない。「出力したリストの要素数がゼロになっちゃってる」という不具合があった時にSelectの変換処理を疑う必要はないし、「変換の結果がおかしい」時はWhereのフィルタリング処理を疑う必要はない。問題の発生個所の特定が早まる。列挙に対して何を実施するかを、「Select(Map処理)します」とか「Where(Filter処理)します」みたいに、まるで宣言しながら書いているな。それが「宣言的」であるということ。foreachだとそういう「なにをするか宣言」を伺い知ることはできない。一行ずつ読んで意味を理解し、最終的にどうなるのかをシミュレートしないといけない。言えば、LINQでも内部的にはループが回っているわけだけど、それを意識する必要はない。コードの示す意味・意図で考えるなら「ザン!」ってな感じに変換結果が取得されていると捉えてもいい。foreachみたいな「ぐるぐるぐるーぺろぺろぺろーん」じゃない。LINQにもForEachっていうメソッドがあるんだけど、使う意味ない。要素の内容が書き変わるから。うまあじが無いし逆に紛らわしい。単なるforeachで書けばいい。◆LINQでどう書くか発想を変える必要があるわな。やりたいことを分割すること。SelectとかWhereやらの操作単位にまで落とし込め。オメーが指示したいその一連の処理がつまり何なのかってことを考えろ。Selectも一度で済ませる必要ない。SelectのあとにWhereして、それをもっかいSelectしたっていい。するだけの意味があるならな。上手くいかない理由は、お前の知能がチンパンジーであることか、あるいは扱おうとしているデータ構造がそもそもおかしいか。◆学習コストやらねぇほうがいいことはある。LINQのメソッドチェーンの外にある変数を書き換えたり。foreachで書いた処理に引きずられるとそうなるな。その程度の学習コストはプログラミングって活動にはいつだってついて回るものだ。添え字で配列を読むforが基本だっただろ。そこからList作ってforeachな世界になった。foreachのほうが便利だからforeachの使い方を勉強したでしょう?そうだし、JavaScript(EcmaScript)だのでもリスト操作関数が揃っている。LINQの考え方はC#だけでのみ通用する概念じゃない。普遍的な理論をベースに敷いている。LINQは場合により処理パフォーマンスが出ない。foreachで書け。コンパイラくんが最適化している場合もあるんで、ヤバそうなメソッドチェーンでも処理コストがそこそこに収まったりもする。SelectのあとにSelectつなげてもパフォーマンスは無事です。コンパイルしたらループ一回に変換されてます。◆メタいはなし無能な上司に逆らってはいけない。聞いちゃくれないから。「使うな」と言われたら、ちょっとくらい詰めてもいいけど、それよりも転職することを考えるべき。LINQすら使えないプロジェクトとか、そもそも未来が無いから。8.x)使えないとか。Core使えないとか。便利なものを便利に使えないって、それ世の中に追いつくためには残業するしかないじゃん。それはお前の負担だし、顧客の負担になる。お前はGit使わずに亀ぶん殴ってSVNのコンフリクト解消を頑張るけど能力は伸びない。論理的な上司は世の中に沢山いるわけだから、カイゼンのカの字も無いような人に付くことないよ。「LINQで書いたとして、メンバーは読めないぞ。お前が全部保守するのか?」とか言われたんでしょ?もう辞めちまえよ。音楽性の違いってやつだぁそれは。良くなるためには変化が必要で、変化にはいつでもコストとリスクが付きまとうものだ。そこをマネージする気のない組織にとどまるんじゃねぇよ。エンジニアで良かったよな。コンテナとクラウドのエッチな関係を勉強をしやがれと、そう言いたい。◆結論LINQの可読性は高いよ。コメントをキャンセルメールアドレスが公開されることはありません。名前メールサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。こちらTwitter:@LivinDyinKittenにDMしろ。メンションつけて罵倒しろ。※本垢だけど嫌がらせに使っているアカウントなので何もつぶやいていません。Norén%d人のブロガーが「いいね」をつけました。