【学習備忘録】カワチーマン C# ラムダ式編【身内用】

学習背景・概要

新しい現場で経験のないC#を活用するので、0から基礎言語仕様をまなびたい
初めてのラムダ式を理解したい(Must)

学習に使用したもの

パーフェクトC#(弊社レンタル本)

51bE68d8tkL.jpg

MSDN

C#
で検索しガイドページを参照
https://docs.microsoft.com/ja-jp/dotnet/csharp/

未確認飛行

http://ufcpp.net/study/csharp/

環境

Windows10
Visual Studio 2017

学習方法

・一度、舐めるくらいで本を読み終え、再度読み直す
・本で理解できなかった部分に関してはそれ以外の資料で調べる
・分かりにくい所は実際にコーディングしてみて、トレースしたり、実行結果が自分の理解したものとなる事を確認する

という感じで学習しています。
まだまだ、C#の基本言語仕様の理解度は浅く、コーティングをすらすらできるとはいえない状況です

ラムダ式の理解過程

以下は、ラムダ式を理解する過程がどんな風だったかを記述してみました

ラムダ式とは何か(引用)

・匿名メソッドをより短く記述するための構文
・メソッド内で定義された即席のメソッド

上記の様な説明がありました

実際のコードを見てみる

コンソールアプリケーションで確認しました

test.cs
namespace ConsoleApp1
{
    class Program
    {
        public static void Main(string[] args)
        {
            Action action = () => Console.WriteLine("Hello, World!!");
            action();
            Console.ReadLine();
        }
    }
}

実行結果
無題.png

ここまでの理解

「=>」の右にメソッド(関数)がある。これをさらに「=」でactionオブジェクトに入れ込んでいる
関数を値みたいに使用しているようにみえる・・・こんな書き方がそもそも可能なのか?

ラムダ式を理解する前提知識の必要性

ラムダ式はなんとなく理解できた。色々省いてメソッドを展開できる書き方のようだ。
けれど今の理解だと、ただそれだけで実際どういう動きをしているかもわからないし
そもそも自分の知らないC#の言語仕様の上で成り立っているようにみえる。
なので関係する仕様を調べてみた

デリゲート

デリゲートとは「メソッドを参照する型」の事。
なるほど、この機能があるおかげで右辺にメソッドを用意して、メソッド自体を値の用にいれこんでいるようにみえると。
デリゲート自体は下記の様な定義らしい。

public delegate int test_del(int value);

んで更にデリゲートインスタンスを生成して使えるようにするには下記のかんじ


test_del test1 = TestClass.testMethod

匿名関数(匿名メソッド)

更にこのデリゲートを作るためにメソッドや関数を定義するのが手間というような理由で用意されたと思われる匿名関数・匿名メソッドというものがある。
ここではサンプルコードが長くなるので割愛してしまうが、
デリゲートの呼び出しを名前なしでのインラインスステートメントブロック内に記述できるというものである
※インラインステートメントブロック=難しいようにいってるけどようは{}内

ここでやっとラムダ式

そして匿名関数(メソッド)を更に簡略化したものがラムダ式、という事なのである

ここまで理解するのにほんと時間がかかった。最初にラムダ式から理解しようとしたのが問題だったのかもしれない。順序だてて学習しないとやはり真に理解するのは遠いようだ。

休憩

というわけでこんな感じで0からC#の基本言語仕様を学んでいる状態です。
他にも学習しないといけない事がいっぱいあるけど、C#を学習するだけで正直いっぱいいっぱい。
時間もかぎられてるので効率よく勉強次第です、

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.