C#書上說Lambda可以作為表示式或者是運算式,我都念作「爛打」,就是把打火機的台語「賴打」念成「爛打」,Lambda是希臘字母λ,這邊特指數學運算符號,本系列文有提到在電腦computer在剛發展初期指的是計算機computer,程式語言的發展在專門計算導向的數學領域程式語言稱為函數式程式語言,其歷史比物件導向還要悠久,C# 3.0 引用函數運算符號「=>」來更加簡潔的撰寫deleget匿名方法,稱為Lambda表示式。
既然「=>」表示程式中的運算符號,其意思為左值會得右值、輸入=>輸出
、輸入後得結果,以Lambda表示的匿名函式一定要有輸入與輸出才成立。
昨天提到到C# 2.0 有傳入值的匿名方法:
在C# 3.0可以用Lambda「=>」符號來更簡單的表示匿名方法:
省略deleget後在()後面加上=>就是λ表示的匿名方法,這寫法又稱為λ陳述式
λ表示式還可以在省略宣告的傳入型別
(結果)=>
{
Console.WriteLine("報告A已經計算完成,結果 =" + 結果);
}
傳如值只有一個的話,括號還能再省略
結果 =>
{
Console.WriteLine("報告A已經計算完成,結果 =" + 結果);
}
如果連同{ }與; 都省略掉並濃縮成一句話便成為λ運算式
結果 => Console.WriteLine("報告A已經計算完成,結果 =" + 結果)
再舉一個例子
陳述式:
(i, y) => { return "兩者計算結果 =" + (i + y); }
運算式:
(i, y) =>"兩者計算結果 =" + (i + y)
書上將Lambda表示式分成這陳述式與運算式兩種,其實差異只示簡潔程度與表現能力不同。
陳述式用{}可以寫出多段步驟的匿名方法,例如:
(i,j)=>
{
int sun = i;
for(int k = 0; k <= j; k++)
{
sun = sun + k;
}
return $"從{i}開始累加到{j}的和等於{sun}";
}
運算式能將一個步驟減省打字數到極致
i => i * i //回傳i平方
(i,j)=> i > j //i是否大於j的bool判斷式
str => str.EndsWith("apple") //依字串結尾方是否是apple這幾個字回傳bool結果