« IsNothingと Is Nothingの違い | トップページ | Visual Studio 2013情報がでてきました »

2013年5月26日 (日)

自分自身を再定義するラムダ式

ラムダ式の導入でVBでも関数型言語のようなプログラミングをやろうと思えば真似できるようになってきました。

たとえば、最初に関数(メソッド)が呼び出されるときに、その関数が自分自身をよりシンプルに再定義することができます。

例として、管理者と一般ユーザーとで同じ関数を呼び出しても処理内容が違う場合を考えてみましょう。

普通のVBの発想ではIf文で切り分けるか、管理者と一般ユーザーをそもそも別クラスにしておくという構成をとると思います。関数が自分自身を再定義することで次のようにも書くことができるようになります。

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.DoAnything()
    End Sub

    Public DoAnything As Action =
        Sub()
            If IsAdministrator() Then
                Me.DoAnything =
                    Sub()
                      '管理者用の処理
                        MsgBox("管理者権限の場合の処理")
                    End Sub
            Else
                Me.DoAnything =
                    Sub()
                        '一般ユーザーの場合の処理
                        MsgBox("一般ユーザーの場合の処理")
                    End Sub
            End If

            Me.DoAnything()

        End Sub

    Public Function IsAdministrator() As Boolean
        '省略
        MsgBox("権限を調べます。")
    End Function

End Class

これを実行すると、最初は

「権限を調べます。」

「一般ユーザーの場合の処理」

と表示されますが、2回目以降は「一般ユーザーの場合の処理」とだけ表示され、権限をもう一度調べることをしません。最初の時点で一般ユーザーであることがわかっているので2回目以降は無駄なことをしないような構造になっています。

しかし、見てわかるようにプログラムがとても難しく感じられます。このケースでは普通にIf文かクラスを分ける方がよいでしょう。

ここでは、こんなこともできるという例として紹介しました。この発想をもっと有効に役立てられるシーンがあるかもしれません。ないかもしれません。今のところは思いつきません。

|

« IsNothingと Is Nothingの違い | トップページ | Visual Studio 2013情報がでてきました »

Visual Basic」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/197542/57463847

この記事へのトラックバック一覧です: 自分自身を再定義するラムダ式:

« IsNothingと Is Nothingの違い | トップページ | Visual Studio 2013情報がでてきました »