登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
园子
关于
博客
发1篇日志+1圆
记录
发1条记录+2圆币
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
VIP申请
网盘
联系我们
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
读函数式编程思维笔记04_语言与范式_模式与重用 ...
读函数式编程思维笔记04_语言与范式_模式与重用
[ 复制链接 ]
缄戈
前天 20:38
1.
语言的分类
1.1.
静态类型
1.1.1.
要求我们事先指定变量和函数的类型
1.2.
动态类型
1.2.1.
允许推迟指定类型
1.3.
强类型
1.3.1.
变量“知道”自己的类型
1.3.1.1.
允许反射和对实例作类型测试,且一直保有自身的类型信息
1.4.
弱类型
1.4.1.
语言相对不了解变量所指向的内容
2.
多范式
2.1.
面向对象
2.2.
元编程
2.2.1.
可用于在语言及其核心库上添加额外的特性
2.3.
函数式
2.3.1.
函数式编程不喜欢把结构耦合在一起,它依靠零件之间的复合来组织抽象,以达到减少不确定因素的目的
2.3.2.
通过复合(composition)而不是耦合(coupling)来达到代码重用的目的
2.4.
命令式
3.
多范式语言的后顾之忧
3.1.
要求开发者更注重纪律,才能驾驭好大型的项目
3.1.1.
依靠工程纪律来保证所有的开发者都朝着同一个方向努力,是解决协调问题的一种途径
3.2.
单元测试为开发者精确地理解经元编程实现的复杂扩展提供了方便
3.3.
消费者驱动的契约(consumer-driven contract)
3.3.1.
由一项集成工作的实施方与各组件供应方共同商定的一组测试
4.
正交(orthogonality)
4.1.
数学上把两个互相垂直的向量称作正交的,也就是说这两个量不相关
4.2.
在计算机科学里,两个组件如果互相没有任何影响(或副作用),就可以称作是正交的
5.
Groovy语言
5.1.
函数式编程和元编程是正交的
5.2.
使用元编程并不妨碍我们使用函数式编程的语言构造
5.2.1.
可以获得更充分地实践函数式的代码风格
5.2.2.
可以用来增强第三方的函数式库
5.2.2.1.
拥有了无缝添加新方法的能力
5.3.
利用元编程在数据类型之间建立映射
5.3.1.
开发者们一般只会考虑使用元编程来编写自己的代码,很少会想到用它来改造别人的代码
6.
复合型(composable)抽象
6.1.
Unix shell
6.1.1.
在shell命令行里,各种互相独立、五花八门的行为可以串联在一起创造出新的事物
6.2.
Rake构建语言,可以用在各种公私项目上(几乎不受项目本身技术选型的限制)
6.3.
Gradle
6.3.1.
Groovy语言的一种内部DSL,复合能力好于插件式设计的Maven
6.4.
不约而同地选择了DSL的形式
6.5.
倾向于使用一些细粒度的部件来组成整体,且这些部件都已准备好以特定方式相连接
6.6.
较少隐性的行为,较容易上手,但倾向于提供细粒度的构造单元,需经过一定过程才能发挥真正的实力
6.6.1.
设计得当的复合型系统应当在封装的模块内提供窄范围的、局部的上下文
7.
上下文型(contextual)抽象
7.1.
Maven是典型的上下文型工具
7.2.
基于插件的架构可以作为上下文型抽象的代表
7.2.1.
提供了更多扶持性的“脚手架”设施,更完善的预设行为,以及“脚手架”上承载的上下文智能
7.3.
Dietzler的Access定律
7.3.1.
所有Access项目最后都会失败,原因是,在用户想要的功能里,有80%实现起来既迅速又简单,还有10%能实现但较困难,而最后的10%是办不到的,因为不可能足够深地突破内建抽象去访问底层。可是,用户总想100%地满足需求。
7.3.1.1.
4GL语言最终丢掉了市场
8.
在函数式编程中传统设计模式的三种归宿
8.1.
模式已被吸收成为语言的一部分
8.2.
模式中描述的解决办法在函数式范式下依然成立,但实现细节有所变化
8.3.
由于在新的语言或范式下获得了原本没有的能力,产生了新的解决方案
8.3.1.
很多问题都可以用元编程干净利落地解决,但Java没有元编程能力可用
8.4.
设计模式的存在意义就是弥补语言功能上的弱点
9.
函数级别的重用
9.1.
复合(composition)
9.1.1.
通过参数来传递作为第一等语言成分的函数
9.2.
函数式语言的重用发生于较粗的粒度级别上,着眼于提取一些共通的运作机制,并参数化地调整其行为
9.2.1.
定义各类型“物件”之间“态射”(morphism)关系的数学分支——范畴论为基础,希望从代码中抽取另一种粗粒度的脉络而加以重用
9.2.2.
不追求复现结构之间经典的(耦合)关系
9.2.3.
建立在列表的概念,以及可以连同执行上下文一起传递的代码块的概念之上
9.3.
以模式为载体的重用是细粒度的:一种解答方案(如Flyweight模式)与另一种解答方案(如Memento模式)之间,是井水不犯河水的“正交”关系
9.3.1.
模式和问题之间这种狭窄的对应关系又限制了它的适用面
10.
Command模式
10.1.
当语言拥有了闭包特性,就不需要了
11.
Factory模式
11.1.
柯里化相当于产出函数的工厂
11.2.
柯里化可以把通用的函数改造成专用的函数
12.
Strategy模式
12.1.
定义一个算法族,并将每一种算法都在相同的接口下封装起来,令同一族的算法能够互换使用
12.2.
好处是算法的变化不影响使用方,也不受使用方的影响
13.
Singleton模式
13.1.
模式被运行时吸收掉的典型案例
14.
Template Method模式
14.1.
一个方法里面定义好算法的骨架,但留下一部分未实现的步骤,强迫子类按照规定好的算法结构来补全缺失的步骤定义
14.2.
抽象方法的定义相当于一种特殊形式的文档,提醒子类将指定的方法纳入考虑
15.
被语言或运行时吸收掉的模式
16.
Flyweight模式
16.1.
种在大量的细粒度对象引用之间共享数据的优化技巧。我们维护一个对象池,然后引用池中的对象来构成需要的视图
16.2.
非常简单的函数式实现
16.3.
记忆
16.4.
模式保留了原来的语义,但实现发生了变化
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
如何优雅的使用RabbitMQ
分布式锁1 Java常用技术方案
浅谈我对DDD领域驱动设计的理解
游戏编程十年总结(下)
【前端性能】高性能滚动 scroll 及页面渲染优化
验证码对抗之路及现有验证机制介绍
从零开始入门 K8s | 手把手带你理解 etcd
中文写程序,何陋之有?
NHibernate之旅(2):第一个NHibernate程序
公司的中场
Android 系统缺陷不完全点评
谈谈如何从本质上理解sql语句, 存储过程,ORM之间的联系和取舍。
FFmpeg开发笔记(六十二)Windows给FFmpeg集成H.266编码器vvenc
[一步一步MVC]第一回:使用ActionSelector控制Action的选择
.net环境下跨进程、高频率读写数据
第二个iPhone应用程序:“Say Hello”
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
代码
签约作者
程序园优秀签约作者
发帖
缄戈
前天 20:38
关注
0
粉丝关注
10
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9988
处匈跑
9998
森萌黠
9996
4
堵赫然
9996
5
凶契帽
9996
6
柴古香
9996
7
背竽
9996
8
斜素欣
9994
9
恐肩
9994
10
里豳朝
9994
查看更多