C# 與 Python 的 lambda 表示式

在 Python 有 Lambda Function,C# 則有 Lambda Expression,兩者算是差不多的東西,所以在本文就姑且都叫它們為 lambda 表示式。

Python 的 lambda 表示式非常直覺,用法如下面的範例:

func = lambda x,y: x + y
func(1, 2)

執行的結果會是 3。只要函式只有一行,都可以用 lambda 表示式,在某些方面來說,它也可以讓程式的可讀性高一點:

get_even = lambda x: x%2 == 0
elements = [1,2,3,4,5,6,7,8,9,10]
result = [i for i in elements if get_even(i)]

得到的結果,result 會是 [2,4,6,8,10]。由於判斷的邏輯先寫在 lambda 表示式,所以在取得 elements 的數字時,單行的程式碼不旦縮短了,且語意更為清楚。

相對於 Python,C# 的 lambda 表示式的寫法也差不多,範例如下:

Func<int, int, int> func = (x, y) => x + y;
Console.WriteLine(func(1, 2));

上面的程式碼執行後,會印出 3。

由於 C# 是強型別語言,所以使用 lambda 表示式時,必需指定每個變數及回傳值的型別,所以前面的宣告看起來會有些囉嗦。但比起 Python 在宣告時還得加上 lambda 這個關鍵字,C# 這邊倒是不需要加,算是一個不錯的小優點。而在前述程式碼中,func 變數除了是 Func 型別也可以是委派(delegate),只是個人覺得比起委派,有時 Func 物件還是比較方便。

而除了單行的寫法,它也能寫成多行:

Func<int, string> action = x =>
{
    x = x + 1;
    return x.ToString();
};

只是寫成這樣,要說它是 lambda 表示式就有點奇怪了。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s