C# 函数式编程初探

1 篇文章 0 订阅

(一)什么是函数式编程
函数式编程(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);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值