1. 程式人生 > 其它 >C# 函數語言程式設計初探

C# 函數語言程式設計初探

技術標籤:C#筆記

(一)什麼是函數語言程式設計
函數語言程式設計(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);