‫お帰りなさい｡
‫この講義では､ 匿名メソッドについて学びます｡
‫無名メソッドとは､ 名前のないメソッドのことです｡
‫さて､ 誰が得をするのでしょうか？
‫そして､ Cシャープでの匿名メソッドは､ delegateキーワードで定義し､ delegate型の変数に代入することができます｡
‫つまり､ デリゲートを必要とするメソッドを呼び出すのは一度きりかもしれないので､ そのたびに独自のメソッドを定義する必要はないのです｡
‫そのため､ デリゲートが必要なたびに専用のデリゲートを定義していると､ あっという間にコード構造が崩れてしまいます｡
‫前回の例では､ たくさんのフィルターを作成しましたが､ ここでは成人向け､ シニア向けなど､ さまざまなフィルターを作成することができます｡
‫次に､ カスタムのブール式をフィルタとして作成するフィルタと､ リスト内のすべてのエントリを単純に表示するフィルタを作成します｡
‫それでは､ すべての人を表示したメインメソッドに移動してみましょうか｡
‫ここでこのメソッドを呼び出し､ 次に新しいフィルターデリゲートを作成しましょう｡
‫そこで､ この一番上に設定したフィルターデリゲートキーワードを使うことにします｡
‫そして､ このメソッドはブール値を返す必要があり､ パラメータとして人を指定する必要があることがわかるでしょう｡
‫だから､ フィルターと呼ぼう｡
‫そしてここでもう一度delegateキーワードを使い､ 渡す必要のあるパラメータを使用する必要があります｡
‫そして､ まだ文句を言っているのがわかります｡ まず､ ここにセミコロンを追加して､
‫値を返すことを確認する必要があります｡
‫boolean 型｡
‫したがって､ すべてのコードパスが匿名メソッドで値を返すわけではありません｡
‫つまり､ ここにはすでに匿名メソッドと書かれているわけです｡
‫つまり､ 20以上のHと30未満のHを返せばいいのです｡
‫そして､ イコール30｡
‫わかりました｡
‫それは結構なことです｡
‫そこで､ ここでは､ filter delegate 型の filter という新しい変数を作成します｡
‫これは単なる変数なんですね？
‫そして､ すでに定義されているメソッドの代わりに､ 無名メソッドを代入します｡
‫そして､ フィルターデリゲートの指示に従い､ ブール値を返すようにします｡
‫まさにその通りなんですね｡
‫この2つの文が真であれば､ trueを返しています｡
‫つまり､ 年齢が20歳以上､ 30歳以下と等しい場合です｡
‫だから､ 最後のセミコロンを忘れないでね｡
‫ここが本当に重要なんです｡
‫そうでなければ､ これは基本的に変数を作成するようなものなので､ うまくいかないでしょう｡
‫つまり､ int x equals 3という感じですね｡
‫このフィルターデリゲートで行っていることとほとんど同じですが､
‫もう少し複雑です｡
‫つまり､ 今年ここにあるのは､ 名前を持たない匿名メソッドですが､ 基本的にはメソッドのようにふるまいます｡
‫そこで､ 私たちにできることは､ ディスプレイの担当者に電話することです｡
‫そして､ 変数filterを使って､ フィルターを渡すことができます｡
‫この劇を思い出すかもしれませんが､ 人々は常にこの構造を持っていました｡ ここにタイトルがあり､
‫次に人のリスト､ つまり人のオブジェクトのリストを渡さなければなりませんでしたね｡
‫そして､ ここにフィルターを追加する必要がありました｡
‫そして､ 先ほど設定したフィルター､ つまりこのフィルター変数を使うことにします｡
‫つまり､ このfilter変数はfilter delegate型でなく､ display
‫peopleが必要とするものです｡
‫一方では､ デリゲートの記述に従ったメソッドを作成し､ ここで見たようにそれを使用することができるので､
‫実に興味深いものです｡
‫しかし､ 今回のようにdelegateキーワードを使って匿名メソッドを使用する変数を作成し､ このフィルタの中に設置し､
‫そのフィルタをここで使用することもできます｡
‫もちろん子供ではなく､ 20人から30人くらいで､ そこにいる人たち全員を表示する予定です｡
‫では､ このコードを実行して､ うまくいくかどうか見てみましょう｡
‫そして､ この20歳から30歳の間には､ 25歳のアナトーリはいますが､ それ以外の人はいません｡
‫無名メソッドのもう一つのアプローチとして､ 無名メソッドを直接パラメータとして渡すことができます｡
‫では､ 実際にやってみましょう｡
‫そこで､ このdisplay peopleメソッドを呼び出し､ 今回はすべての人を表示させますね｡
‫だから､ ここにすべての人がいる｡
‫しかし､ ここでフィルターデリゲートを渡す必要があります｡
‫では､ さっそく無名メソッドを作ってみましょう｡
‫そのためには､ delegateキーワードを使う必要がありますね｡
‫もちろん､ 同じように指導していく必要があります｡
‫デリゲートが filter delegate 型であることを確認する必要があります｡
‫つまり､ このフィルターデリゲートはプールを返す必要があり､ 人を必要としたのです｡
‫しかし､ もちろん､ 私が述べたように､ ブール値のようなものも返す必要があります｡
‫だから､ 基本的にはこのように呼べばいいんです｡
‫つまり､ これは非常に凝縮されたコードラインです｡
‫いろいろあるんですよ｡
‫人を表示していますが､ ここにはフィルターもあり､ このフィルターがすべての人を取り込んで､
‫どの人をここに入れるかはそれほど重要ではないので､ 単にtrueを返します｡
‫基本的にはそうなんですね｡
‫そうでなければ､ もちろん､ このように書くこともできますので､ もう少し読みやすくなるかもしれませんね｡
‫これは無名メソッドで､ フィルタデリゲートに従うように3番目のパラメータとして渡しています｡
‫設定する｡
‫つまり､ ここでは牛を返し､ パラメータとして人を受け取っているのです｡
‫このように､ デリゲートは非常に柔軟性が高いので､ その威力はおわかりいただけたかと思います｡
‫彼らは本当に､ 一定の構造に従うことを望んでいるだけなのです｡
‫あとは､ あなた次第です｡
‫また､ デリゲートで作業する際に､ 開発者としての柔軟性が高まります｡
‫わかりました｡
‫というわけで､ 匿名メソッドについて少し紹介しました｡
‫次に､ ラムダ式について見てみましょう｡