Cpp ラムダ式 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(ラムダ式)
(ラムダ式)
 
4行: 4行:
 
<tr>
 
<tr>
 
<td style="width:1px;"></td>
 
<td style="width:1px;"></td>
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ ラムダ式</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
+
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++(Cpp) ラムダ式</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
11行: 11行:
 
== '''ラムダ式''' ==
 
== '''ラムダ式''' ==
  
よくわからない名称の技術ですが、STL(Standard Template Liblary)のstd::sortやstd::foreachなどの引数としてプログラムそのものを記述することができる技術です。例えばsortの第三引数には、sortの手続きを行う関数名をしてする必要がありますが、ここにラムダ式を利用することができます。基本的な構造としては[](){}という構造のプログラムになり、[キャプチャ](プログラムの引数)->戻り値{プログラム本体}というような感じです。[](){}のそれぞれのカッコの中の全部が省略可能なので、引数まで省略すると[]{}というのがラムダ式としては最短の構造になります。これでは何にもしないラムダ式になってしまいます。
+
よくわからない名称の技術ですが、STL(Standard Template Liblary)のstd::sortやstd::for_eachなどの引数としてプログラムそのものを記述することができる技術です。例えばsortの第三引数には、sortの手続きを行う関数名を指定する必要がありますが、ここにラムダ式を利用することができます。基本的な構造としては[](){}という構造のプログラムになり、[キャプチャ](プログラムの引数)->戻り値{プログラム本体}というような感じです。[](){}のそれぞれのカッコの中の全部が省略可能なので、引数まで省略すると[]{}というのがラムダ式としては最短の構造になります。これでは何にもしないラムダ式になってしまいます。
  
  
20行: 20行:
  
  
ラムダ式の何が便利なのか?sort関数を使ったことが無い人、sort関数を使う人でも関数を引数に指定するタイプの人には何の魅力もないものですが、C++11登場以降は、この記述方式を使うプログラマが増えているのも確かで、覚え泣ておかないと人の書いたプログラムが理解できないというポンコツな人になってしまいます。ややこしさレベルはC++の技術の中では関数ポインタに肩を並べるややこしさを持っています。従来の[]の意味は配列だったし->というえばアロー演算子、こういうイメージを持っている場合は全く理解にたどり着けません。先にも書きましたが
+
ラムダ式の何が便利なのか?sort関数を使ったことが無い人、sort関数を使う人でも関数を引数に指定するタイプの人には何の魅力もないものですが、C++11登場以降は、この記述方式を使うプログラマが増えているのも確かで、覚えておかないと人の書いたプログラムが理解できないというポンコツな人になってしまいます。ややこしさレベルはC++の技術の中では関数ポインタに肩を並べるややこしさを持っています。従来の[]の意味は配列だったし->というえばアロー演算子、こういうイメージを持っている場合は全く理解にたどり着けません。先にも書きましたが
  
 +
*'''[キャプチャ](プログラム部に使う引数)->戻り値型名{プログラム本体}'''
  
*'''[キャプチャ](プログラム部に使う引数)->戻り値{プログラム本体}
 
  
 
+
という、こういう構造をよく覚える必要があります。[]()->戻り値の型名{}ですね。とんでもない記号にも見えてきます。新しい技術なのだから新しいと感じて当たり前なのです。予告なく似たような記号の組み合わせが全く違う意味で使われる。これがプログラミングを知ったつもりになっている時おとずれる混乱の原因になります。おぼえてしまえば、なんてことはない変な技術なのです。
という、こういう構造をよく覚える必要があります。[]()->{}ですね。とんでもない記号にも見えてきます。新しい技術なのだから新しいと感じて当たり前なのです。予告なく似たような記号の組み合わせが全く違う意味で使われる。これがプログラミングを知ったつもりになっている時おとずれる混乱の原因になります。おぼえてしまえば、なんてことはない変な技術なのです。
+
  
  
 
特に気になるのが[]の中のキャプチャですね。キャプチャって言われても…意味がいまひとつ分からない。これはラムダ式の関数本体の外側で使っていた変数で、利用するものを指定する部分です。
 
特に気になるのが[]の中のキャプチャですね。キャプチャって言われても…意味がいまひとつ分からない。これはラムダ式の関数本体の外側で使っていた変数で、利用するものを指定する部分です。
 +
 +
 +
 最短ではない省略としては
 +
 +
*'''[キャプチャ](プログラム部に使う引数){関数本体}'''
 +
 +
 +
 というのもよく使われると思います。これは関数本体が戻り値を持たないかretuen文で返される値の型に従う場合に ->戻り値の型名 が省略できます。
  
  

2021年2月10日 (水) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス