スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#によるデザインパターン入門 Command パターン(2)

前回はCommandパターンの導入として次のようなインターフェイスとそれを実装したクラスを定義して使ってみました。
 
//インターフェイス
type Icommand =
  abstract Execute : unit -> unit  
 
//クラスの定義
type ShowNum (i:int) =
    interface Icommand with
        member this.Execute () =
            printfn "%d" i
 
type ShowTwoNum (i:int,j:int) =
    interface Icommand with
        member this.Execute () =
            printfn "%d %d" i j
 
type ShowStr (st :string) =
    interface Icommand with
        member this.Execute () =
            printfn "%s" st
 
type CompShow () =
    let mutable (cmds : list<Icommand>) = []
 
    interface Icommand with
        member this.Execute () =
            List.iter (fun (com:Icommand) -> com.Execute ()) cmds
 
    member this.Add (com:Icommand) =
        cmds <- com :: cmds
 
上のような単純な振る舞いを実行するだけのコマンドを取り扱う場合なら、F#では関数を使う方が普通ですので、今回は上の例を関数を使って書き直してみます。
 
まずはCompShow以外を取り扱います。
 
> let showNum i () =
    printfn "%d" i
 
let showTwoNum i j () =
    printfn "%d %d" i j
 
let showStr st () =
    printfn "%s" st;;
 
val showNum : int -> unit -> unit
val showTwoNum : int -> int -> unit -> unit
val showStr : string -> unit -> unit
 
部分適用して、「unitを与えると実行できる状態の関数」をいくつか作っておきます。
 
> let sn1 = showNum 3
let sn2 = showNum 7
let stn1 = showTwoNum 1 2
let ss1 = showStr "one"
let ss2 = showStr "two";;
 
val sn1 : (unit -> unit)
val sn2 : (unit -> unit)
val stn1 : (unit -> unit)
val ss1 : (unit -> unit)
val ss2 : (unit -> unit)
 
使用してみます。
 
> sn1 ();;
3
val it : unit = ()
> sn2 ();;
7
val it : unit = ()
> stn1 ();;
1 2
val it : unit = ()
> ss1 ();;
one
val it : unit = ()
> ss2 ();;
two
val it : unit = ()
 
CompShowの代わりに関数の合成を使います。
 
> let sc1 = sn1 >> stn1 >> ss2;;
 
val sc1 : (unit -> unit)
 
> sc1 ();;
3
1 2
two
val it : unit = ()
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。