そろそろ、過去のエントリのリストが長くなってきたので、後ろにつけることにしました。さて、今日はC#でお馴染みラムダ式とイベントをやってみようと思います。
ラムダ式
ラムダ式の定義は簡単です。
fun 引数 -> 関数本体
試しに足し算する関数をラムダ式で書いてみましょう。
// 足し算するラムダ式をaddに代入 let add = (fun x y -> x + y) // 呼び出し可能 printfn "%d" (add 1 10) // もちろん変数に入れてなくてもその場で呼び出せる printfn "%d" ((fun x y -> x + y) 5 10)
非常にすっきり書けるので、短い処理なんかで再利用しないやつには使っていけばいいと思います。
イベント
イベントについては、前にやったEvent
それでは、何かしらが変更があったことを外部に伝えるイベントを定義して、それをキックするメソッドを持つクラスを作ってみます。
// EventArgsのため open System type Sample() = // イベントの元 なんとジェネリックのパラメータに_を入れると // コンパイラが空気を呼んで適切な型にしてくれる。 // ここだとOnChangedのTriggerでEventArgs型だということがわかる let changed = Event<_>() // CLIEvent属性をつけて公開するとC#からも使える [<CLIEvent>] member this.Changed = changed.Publish // イベント発生のトリガ member this.OnChanged() = changed.Trigger(EventArgs.Empty) let s = Sample() // イベントハンドラの登録はAddメソッドで行う s.Changed.Add (fun e -> printfn "イベント発行") // イベント実行! s.OnChanged();
前にEventモジュールの使い方はやったので説明はしませんが、F#が空気読み過ぎで型推論してくれる凄い一面を垣間見てしまいました。実行結果は以下のようになります。
イベント発行
きちんとイベントが発行されています。めでたしめでたし。