ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-05-30 23:31:11  阅读:208  来源: 互联网

标签:functions myList 函数 C# Programming Functional state vs 输入


 

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有