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

ラムダ式を比較

アピリッツの知識共有サイト「ナレッジベース」で公開されている内容をアピスピでも紹介します。こちらは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;
記事を共有

最近人気な記事