Menu
Coddy logo textTech

ラムダ式入門

CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 42/56。

ラムダ式は、必要な場所に直接、小さな無名関数を作成できる強力なC++の機能です。これらは、別の関数宣言を記述することなく定義して使用できるミニ関数であると考えてください。

ラムダ式の基本構文は、次のパターンに従います:[](){}。角括弧 []キャプチャ節と呼ばれ、丸括弧 () は(通常の関数と同様に)引数を保持し、波括弧 {} には関数本体が含まれます。


キャプチャ節は、ラムダが周囲のスコープからどの変数を使用できるかを制御します。最も一般的な形式は次のとおりです:

[=] — すべてのローカル変数を値渡しでキャプチャする(ラムダは独自のコピーを取得する)
[&] — すべてのローカル変数を参照渡しでキャプチャする(ラムダはオリジナルにアクセスする)
[] — 何もキャプチャしない(ラムダは外部の変数を使用できない)

シンプルなラムダ式を作成して呼び出す方法は次のとおりです。

auto myLambda = []() {
    std::cout << "Hello from Lambda!" << std::endl;
};

myLambda();  // ラムダ関数を呼び出す

ラムダ式を変数に格納せずに、定義してすぐに実行することもできます:

[]() {
    std::cout << "Immediate execution!" << std::endl;
}();

ラムダ式は、別途定義したくないような、短く一度限りの関数に特に有用です。これらを使用することで、コードがより簡潔になり、関連するロジックを近くにまとめておくことができます。

challenge icon

チャレンジ

簡単

ラムダ式の基本的な構文と実行方法を示すプログラムを作成してください。このチャレンジでは、パラメータのないシンプルなラムダ関数を定義し、呼び出す方法についての理解をテストします。

プログラムは以下の手順で行ってください:

  1. Hello from Lambda! と出力するラムダ式を作成する
  2. auto キーワードを使用して、このラムダを変数に格納する
  3. ラムダ関数を呼び出して実行する
  4. Lambda executed successfully! と出力する2つ目のラムダ式を作成する
  5. この2つ目のラムダを変数に格納せずに、即座に実行する

以下の正確な出力形式を使用してください:

Hello from Lambda!
Lambda executed successfully!

ラムダ式は [](){} という構文を使用することを忘れないでください。ここで、角括弧 [] はキャプチャ節、丸括弧 () はパラメータ(このチャレンジでは空)、波括弧 {} は関数本体を含みます。auto variableName = [](){...}; を使用してラムダを変数に格納し、variableName(); で呼び出すことができます。即時実行の場合は、[](){...}(); という構文を使用でき、これにより1つのステートメントでラムダの定義と呼び出しを同時に行うことができます。

チートシート

ラムダ式は、インラインで定義できる無名関数です。構文 [](){} を使用します。各要素の意味は以下の通りです:

  • [] - キャプチャ節(外部変数へのアクセスを制御します)
  • () - パラメータ
  • {} - 関数本体

一般的なキャプチャ節の形式:

  • [] - 何もキャプチャしない
  • [=] - すべての外部変数を値渡しでキャプチャする
  • [&] - すべての外部変数を参照渡しでキャプチャする

ラムダ式を保存して呼び出す:

auto myLambda = []() {
    std::cout << "Hello from Lambda!" << std::endl;
};

myLambda();  // ラムダ関数を呼び出す

ラムダ式を即座に実行する:

[]() {
    std::cout << "Immediate execution!" << std::endl;
}();

自分で試してみよう

#include <iostream>
using namespace std;

int main() {
    // TODO: 以下にコードを記述してください
    // "Hello from Lambda!" と出力するラムダ式を作成します
    // autoキーワードを使用して変数に格納します
    
    // ラムダ関数を呼び出します
    
    // "Lambda executed successfully!" と出力する2つ目のラムダを作成します
    // 変数に格納せずに即座に実行します
    
    return 0;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理と制御フローのすべてのレッスン