#ラムダ式を無知から少しでも理解したい!#
##はじめに
ラムダ式を理解できてなかったので、いろいろ勉強して見た結果
理解したものをまとめたものがこちらの記事です。
目的としては0%の人が5%まで理解できたらいいな~という目的です。
この記事なんかより他の記事の方が分かりやすいのは明確なので、これを見てくれた人は必ず他の記事を読んでさらに理解を深めてほしいです。
#ラムダ式とは何ぞ?#
プログラムを勉強していくうえでどこかでラムダ式を聞くと思う。
ラムダ式は『名前のない関数』です
ちゃんとした名所は『無名関数』といいます。
簡単なラムダ式の定義をざっくりと
auto add = [](){};
##ラムダ式の何が便利か
小規模な使い捨ての関数を作るのに便利です。ほかにもSTLの関数を使わなくても済むことがあります。
コードの行が少なく済んだりと覚えていて損はありません。
##例
この前の記事のfor文を使わなくてすむ便利関数でも紹介した
std::for_each(m_objects.begin(), m_objects.end(),std::mem_fun(&GameObject::Draw3D));
これをラムダ式を使うとこのようになります
std::for_each(m_objects.begin(), m_objects.end(),[](GameObject* obje) {obje->Draw3D}));
となります。
他にもありますが言いたいことは他の記事と似てるので割愛
##で?何がいいの?
std::for_each(m_objects.begin(), m_objects.end()
の処理をしたら何かしたいってなった時
ラムダ式ならobje->Draw3D
を変えてやればいいのだ。
######ラムダ式のメリットは 【可読性の向上】【処理の入れ替】【単純化】と思っている。
ロボットが銃やレーザーを手に持つ(独立)タイプならば、ロボットに槍を持たせるときは剣と入れ替えてしまえばいいのだ。
だが、くっついている(依存)タイプなら話が変わる。 まず剣を取りはずし、どう槍を持たせるかを考えて
どのように槍をロボットに付けてやるか(処理)を考えないといけない。
タイプ | 武器を変更するとき | 便利さ |
---|---|---|
装備タイプ | 取り外し可能 | ◎ |
合体タイプ | 作り直し、取り外し | △ |
##まとめ
(はてこのしょぼさで何をまとめろと言うのかね)
ラムダ式を使えば、複雑な処理、STLを使わなくて住むこともあります。
使いこなせれば強力な武器にもなります。std::functionやStateパターンでも活躍します。
ぜひ使いこなせるようになりましょう!