编程语言
首页 > 编程语言> > training - Functional Programming with C# - What Is Functional Programming?

training - Functional Programming with C# - What Is Functional Programming?

作者:互联网

 

Functional Programming with C# | Pluralsight

 

函数式编程:

1.  易于预测

2.  容易扩展

3.  容易测试

 

 

 

 

面向对象 vs 函数编程

 

 

course推荐: Cory House on plualsight

 

面向对象:管理 变化的state =》method 依赖&修改 class类型的data

函数编程:  完全避免 state =》仅依赖于 输入, 不修改输入的值和 共享的state =》更加可预测,容易维护,容易测试(仅依赖于 输入,不依赖其他)

 

什么是 函数编程?

强调: 定义 根据 输入,输出 定义函数; 而非 如何改变state

区分:数据’、行为

 

 

=》更多的 static methods,而非 instance methods

(因为 不在 隐式依赖 当前对象的state)

 

 

 

1. taming side effects 控制副作用, 而非 消除 副作用

 

 

method:

输入、输出

影响范围(隐含) =》难以测试

 

单一功能的函数: Haskell

=》函数 无副作用,除非 极个别情况

=》复杂系统,容易预测(behave the same way,与 其他的state无关)

=》更容易 并行 & 异步执行

vs

impure:c#

=》引用透明,不会导致明显的副作用

=》不会主动阻止改变 system state,但是可以通过设计改善: 强制 immutability(非 默认)

 

基于表达式:expression-based

=》everything produces some result =》computer result

=》更少的语句

=》more natually tastable: 基于输入的输出=》无需 借助mocking, 无需为了测试 派生其他的类型

=》naturally composable: return a value ,通过变量,易于 和其他的expression、statement 组合

vs 

基于语句:statement-based: c#

=》statements to cause side effects

=》未赋值的变量 & 同一变量多个地方赋值不同

 

 

 

 

 

 =》减少 额外的变量

 

Treat functions as Data:最重要

=》higher-order functions

=》不同程度的抽象 

=》无需 通过 复杂的继承结构,而是根据 函数签名 替换, 去 组合不同的功能

 

 

 =》linq 基于functional 原则

课程推荐: Deborah Kurata's Practical LINQ on Pluralsigh

 

可以高性能 的 从不同数据源 查找数据 

 

 泛型:安全的操作 弱类型的排序,且提供序列的完全可视

扩展方法:高阶函数。添加IEnumeralble的 排序、筛选、类型转换……功能

委托、lambda表达式:定义扩展的针对序列的操作方法变得容易

 

 问题:

while语句中 mutable state: ix & myList & mylist.Sort() 中Sort的副作用

 

=> myList 变化 可能牵连 系统范围,如果 myList 在外部可见

 

 语法糖 =》本质:泛型 & 扩展方法 & 委托 

 

 

 

 

method 语法: 更抽象

组成 higher-oorder functions的一个链条,操作每一个IEnumerable的实例

=》myList 未改变。未改变 存在的lmyList,而是创建了一个新的list(每个值根据lamb表达式 被map到新的实例 ). =》引用安全的 =》compose的方式 链接(每次操作返回一个新的序列,然后返回给 链条中的下一步)

=》查询隔离的架构模式

 

linq固有的不可变性 =》compose 后的结果 可预测,且无副作用

 

 

review

 

 

 

 

 

 

vs

Treat functions through delegation:c#

 

标签:functions,myList,函数,C#,Programming,Functional,state,vs,输入
来源: https://www.cnblogs.com/panpanwelcome/p/16328800.html