その他
    ホーム 職種別 エンジニア ラムダ式を比較
    ラムダ式を比較
     

    ラムダ式を比較

    アピリッツの知識共有サイト「ナレッジベース」で公開されている内容をアピスピでも紹介します。こちらはES部のクライアントエンジニア・足立雅史さんによる記事です。

    クライアントのゲーム開発において、 2大フレームワークにUnityとUnreal Engineがありますが、
    この2つのフレームワークで異なるところは実装言語です。
    UnityはC#で、Unreal EngineはC++なのですが、 そのラムダ式の記法の違いについて説明します。

    ラムダ式とは 

    ある手続き(処理)のかたまりをオブジェクトのように扱える「関数オブジェクト」があります。
    以下のコードだとfunc_obj や f_lambda が関数オブジェクトです。
    func_objにはprint_numberという関数が代入されていますが、
    f_lambdaにはその場で記述された無名の手続きが代入されています。
    この名前付けされずに定義された関数を「ラムダ式」と呼んでいます。

    #include <iostream>
    #include <functional>
    
    void print_number(const int i) {
        std::cout << i << std::endl;
    }
        
    int main() {
        std::function<void(int)> func_obj = print_number;
        // 実行したら3と表示される
        func_obj(3);
        
         std::function<void(int)> f_lambda = [](int i) {
            std::cout << i < std::endl;
        };
        // 実行したら5と表示される
        f_lambda(5);
        return 0;
    }

    ラムダ式の記法を比較 

    最近までUnityでC#を使って開発してきたのでC++と違いを調べていました。
    型表現として、C++ではstd::functionを用いますが、C#では System.ActionSystem.Funcを用います。
    比較しやすいように一覧表を書いてみました。

    C++C#関数表現
    std::function<void()>System.Actionvoid func()
    std::function<void(int)>System.Action<int>void func(int i)
    std::function<bool(void)>System.Func<bool>bool func()
    std::function<bool(int,double)>System.Func<int,double,bool>bool func(int, double)
    std::function<int(int)> a = [](int x) {return x + 1;};System.Func<int,int> a = x => x + 1;
    記事を共有