お帰りなさい｡
フィルターについて説明します｡
さて､ 名前からして､ 何をするものか想像がつくはずです｡
私たちのためにフィルタリングしてくれるのです｡
マップでは､ 常に同じ数のアイテムが戻ってくるわけですね｡
3つのアイテムが戻ってきました｡
各項目をマッピングしていくだけです｡
フィルターでは､ 与えたものよりも少ないものを受け取ることもあります｡
結果の一部をフィルタリングしています｡
そこで､ multipied by twoの代わりに新しい関数を作ってみましょう｡
関数を作りたい｡
そしてこの機能､ アイテムに何をするのか？
項目が奇数ならチェックするとしよう｡
そこで､ ちょっと､ この数字は奇数ですか､ と言って､ 奇数だけを返すことにしています｡
だから､ チェックする｡
Oddはアイテムを受け取ることになる｡
そして､ この項目は行動することになるのです｡
そして､ もう一度､ 何かを返さなければならない｡
何を返すのか？
さて､ フィルター関数は､ フィルターをかけるべきかどうか､ 真偽値またはブール値を受け取ろうとします｡
つまり､ ある数字が奇数かどうかを調べたい場合､ まあ､ modulo twoは数字を2で割ることになるので､ modulo twoという項目ができるわけです｡
そして､ それがゼロに等しければ､ 偶数である｡
そうですね｡
だから､ ゼロにはならないんです｡
つまり､ 余りが0にならなければ､ 奇数になるわけです｡
そして､ これを単純に返すだけです｡
ここでも､ これはbullying式に評価され､ bullying式に基づいて､ filterは､ もしそれがtrueなら､
私はそれをリストに残すと言うつもりです｡
そうでない場合は､ 削除するか､ 新しいリストに追加しないことにしています｡
そこで､ mapの代わりにfilterを行い､ ここではcheckを行うことにしましょう｡
奇数｡
あるいは
あのさぁ...｡
この名前､ 好きじゃない｡
してみましょう｡
変なのしかいない｡
そんな感じ｡
これを実行すると
あれを見てください｡
偶数なので､ フィルターをかけてチューブを外しています｡
もう一度｡
ここで､ 関数を呼び出していないことに注目してください｡ なぜなら､ フィルタは関数､ つまり関数シグネチャと呼ばれるものを受け入れるからです｡
ねえ､ どんな行動をとればいいのか､ どこのメモリスペースに行けばいいのか教えてよ｡
そして､ 「おい､ データをくれ､ 各項目に対してこの関数を実行してくる」と言うのです｡
つまり､ oneに行くと､ oneを引数としてこの関数が実行されるわけです｡
1を2で割ったもの｡
まあ､ 確かに余りが0になることはないですね｡
だから､ それが返ってくるんです｡
本当です｡
これはfalseを返すので､ 2になったときに作る新しいリストに追加するということですが｡
追加されることはありません｡
もう一度､ ユーザーのリストがあるとします｡
その場合､ Aという名前から始まるユーザーを基準にフィルタリングしたいかもしれません｡
フィルター機能を使って､ すべてのユーザー名をフィルタリングすることができます｡
そして､ aから始まるアルファベットのユーザー名だけを新しいリストとして用意します｡
もうひとつ､ とても便利な機能があります｡
そして､ ご覧のように､ すべてを純粋に保ちました｡
新しいリストを作成してくれるのです｡
元のリストを修正するものではありません｡
だから､ その機能的なパラダイムを意識しているのです｡
そして､ マップとフィルタのいいところは､ 機能がシンプルになったことです｡
すべてがシンプルでいい｡
でも､ 私たちが知りたいのは､ ねえ､ その品物をどうしたらいいのか､ 何を返したらいいのか､ ということなんです｡
それだけが､ 彼らの関心事なのです｡
何でもかんでもやろうとするような､ 巨大な機能を持つのではなく
わかりました｡
次はZIPの話をしましょう｡