【C#】デリゲートからラムダ式、LINQへの流れ

C# で最も押さえておくべき機能がラムダ式および LINQ になるわけですが、いったい、どのようにして進化してきたのかを記したいと思います。もともと匿名メソッドからデリケート、そしてラムダ式へ進化してきたので、それらの概要をさっとまとめていきます。重要なのは、それぞれが「どのようにつながり、進化を遂げてきたか」ということです。

それらを踏まえて考えてみると、意外とラムダ式や LINQ が理解しやすくなるはずです。この記事ではサンプルはありませんが、当ウェブサイト内にはたくさんのラムダ式やLINQ関連の記事を用意していますので、ぜひともご活用ください。

ラムダ式の進化の過程

ラムダ式を理解するには、その進化の過程を追っていくことが重要です。ラムダ式も C# で実装されてきた機能を、より便利に昇華させていったものですので、ラムダ式が作られていく過程を学ぶとスッキリ理解できます。

ラムダ式はいきなり C# に実装されたわけではありません。C# は時間を経て徐々にラムダ式を利用していく形式へと進化したのです。まとめると以下のような形式で C# は拡充してきました。

  • C# 1.0 で delegate の実装が追加
  • C# 2.0 で 匿名メソッド の実装が追加
  • C# 3.0 で ラムダ式 の実装が追加

デリゲートから出発した C# は、ラムダ式を経由して「LINQ」が導入されることで、プログラミング言語としてひとつの完成形を迎えたといっても過言ではないのかもしれません。というのも、ラムダ式から発展した LINQ が追加されたことにより、コレクション形式のデータがとても扱いやすくなり、より直感的なデータ操作が可能になったからです。

デリゲート

C# 1.0 導入されたデリゲートは「処理をほかに委任する」という考え方による記述方法です。簡単に説明してしまうと、メソッドを格納できる変数を用意して、処理の中でいつでも呼べるようになるということです。

メリットは「処理をカプセル化できるようになったこと」でしたが、メソッドを必要な分だけ定義する必要があるため、そこまで柔軟ではなかったということがデメリットとして挙げられます。

匿名メソッド

C#2.0 で導入された匿名メソッドは、デリゲートのデメリットであった「メソッドを使用する分だけ記述する」という点を改善するために実装されたイメージです。

匿名メソッドはメソッドを記述しなくても、その場でメソッドを定義することができる点で進化しました。この時にメソッド名を記述する必要のない点から「匿名」が付けられ「匿名メソッド」と呼ばれています。LINQ の記述方法は、この匿名メソッドの流れを汲んでいます。

ラムダ式

ラムダ式は匿名メソッドをベースに生まれたものであり、こちらのほうが記述方法も簡潔になります。ラムダ式は「式木」としてコンパイルされるため、基本的に C# 3.0 以上はラムダ式を用いて記述されることが多いです。

式木とは式の意味を理解して表す木構造データのこと

ほとんど意味合いは匿名メソッドと変わりませんが、Predicate・Action・Func や LINQ を使用する際は基本的にラムダ式であるため、現代ではこちらがメインとなりました。

ラムダ式を学ぼう

ラムダ式を使用することで、C# ではシンプルな形式で処理の式を記述できるようになりました。しかしながら、シンプルになりすぎた分、逆に「どんな処理が記述されていㇽのかわかりづらい」という声を現場でも聞きます。

しかしながら、現状としてラムダ式を使う場面が多くなっているのは無視できません。私自身も最初は「どんな処理なのか分かりずらい」と感じていました。実際、はじめて見たときは意味が分かりませんでしたし、どうして「そのように記述するのか」があまり見えていませんでした。

過去の案件で「できる限りラムダ式を使用しましょう」という方針が打ち立てられたときに初めて、ラムダ式を少しだけ勉強するようになり、徐々にラムダ式を使用する場面が増えてきました。今ではラムダ式を活用してプログラムを記述する場面のほうが多いほどです。

最初は見様見真似で記述してきましたが、基本からラムダ式周辺をちゃんと学んだことで、式の意味・意図を理解できるようになりました。そうして、日々のコーディングの中でラムダ式使うことで徐々に抵抗がなくなっていったのです。

「ラムダ式が少し苦手」と感じている人は、今が学習のはじめ時なのです。ここでラムダ式を学んでおけば、もっと息の長いエンジニアとして活躍できること間違いありません。そのためにも問う講座を存分に活用してもらいたいと思います。