C# 函數語言程式設計初探
阿新 • • 發佈:2020-12-14
(一)什麼是函數語言程式設計
函數語言程式設計(FC)是以函式作為第一類值,避免狀態突變的程式設計風格。
狀態突變:儲存在暫存器的值就地更新。
(二)C#中有哪些常見的函式式方法
LINQ的Where和OrderBy函式對列表進行過濾或排序不會影響原始列表;
Sort函式對列表排序會影響原始列表。
var nums = Range(-10000,20001).Reverse().ToList();//[10000,9999,..,-9999,-10000]
Action task1 = ()=> WriteLine(nums.Sum());
Action task2 = ()=> {nums. Sort();WriteLine(nums.Sum())};
Parallel.Invoke(task1,task2);
// prints : 隨機數;
// prints : 0;
Action task3 = ()=> WriteLine(nums.OrderBy(x=>x).Sum());
Parallel.Invoke(task1,task3);
//prints : 0;
//prints:0
(三) C# 6和C# 7 中的函式式特性
- 使用using static 匯入靜態成員,使用靜態函式時,無需使用靜態類名
using static System.Math;
public double Circumference => PI * 2;
- 具有隻讀的自動屬性
public class A
{
public A (double readOnlyField) => ReadOnlyField = readOnlyField;
public double ReadOnlyField {get;} // 由於ReadOnlyField只有在建構函式中被賦值,一旦被建立,便不可被修改,屬於不可變型別,因此編譯器會隱式宣告為readonly。行內函數中被賦值同理。
}
- 具有表示式體式的成員
public double Circumference => PI * 2
- 區域性函式
get
{
double Square(double d)=>Pow(d,2);
return PI * Square(2);
}
- 元組語法
元組在FP中的作用更傾向於將任務分解為非常小的函式,通常將元組型別的輸出 當作另一個函式的 輸入
public (double a,double b) Stats => (A,B);