元ネタ
元ネタ:【Love
VB】 レッツWPF M-V-VM モデル with Visual Basic 2010 (VB10)
元ネタで、すーさんにラムダ式でSubが使えるようになったと教えていただき、早速検証してみました。
単一行 Functionで記述された時が式として扱われる以外は、すべてステートメントと扱われるようです。
Subですから返り値がないわけで、=は比較演算子ではなく代入ステートメントであることが明白です。ですからこんな書き方が成立するわけです。
ところで、単一行サブルーチンの場合、マニュアルではsingle-line statementとあるため、試しに":"で区切って一行内に複数のステートメントを入れてみたら、「ひとつのステートメントだけ」とエラーが出ました。
さすがVBですね^^。この気色悪さに惚れ込みます☆
ラムダ式の形態 |
コード例 |
扱い |
VB9 |
単一行 Function |
Dim x = Function(param) Me.Message = "Hello " & Me.Name |
式 |
◯ |
複数行 Function
|
Dim x = Function(param)
Me.Message = "Hello " & Me.Name
Return Nothing
End Function
|
ステートメント |
× |
単一行 Sub
|
Dim x = Sub(param) Me.Message = "Hello " & Me.Name
|
ステートメント |
× |
複数行 Sub |
Dim x = Sub(param)
Me.Message = "Hello " & Me.Name
End Sub |
ステートメント |
× |
ステートメント:完結した命令です。ステートメントには、キーワード、演算子、変数、定数、および式を含めることができます。(*1)
式:演算子で結合され、新しい値を生成する一連の値要素です。演算子は、値要素に対して、計算、比較、またはその他の演算を実行します。(*2)
(*1)ステートメントの概要
http://msdn.microsoft.com/ja-jp/library/865x40k4.aspx
(*2)Visual Basic の演算子および式
http://msdn.microsoft.com/ja-jp/library/a1w3te48.aspx
ラムダ式(VB10用)
日本語:http://msdn.microsoft.com/ja-jp/library/bb531253(VS.100).aspx
英語:http://msdn.microsoft.com/en-us/library/bb531253(VS.100).aspx
(ワケ分からん機械翻訳よりマシかも^^;。製品版では翻訳者による翻訳になるそうな)
*:画面上部の.NET Framework Versionで4をクリックしないと出てこないので、VB10向けの解説があることに気付いていなかったorz