当OOP语言RAII特性发展到functional形式的极致
本文主要站在C++程序员的思维角度思量。
functional之路
lambda表达式
lambda表达式,是一段代码片段。函数实现体中出现的可重用的代码块。
在C++之前,C语言最小可复用流程模块,是函数;只有函数是用以处理不同类型数据的代码块,书写一次可多次被调用以重复利用优化设计,减少工程复杂度。
C++出来之后,并没有立即改进函数设计的代码技术,而是首先由boost第三方库锻造出来的lambda支持来强化设计工作,使得在函数代码中也可以进一部优化复用代码,进一步得到简洁描述。
由后来C++标准完善过程中lamda特性被纳入标准,由编译器提供商去提供该特性支持。
在没有lambda表达方式之前,书写C函数代码,简化表达的方式只有通过预处理技术,使用宏替换完成代码元设计工作。
回调代码
回调是一种框架设计方法,使用回调方式,可以提炼稳定结构而形成固定的开发框架或工作模式。把变化的应用代码留调用者编写,而设计有效的API提供予应用设计方。
在C语言时期,由于代码模块概念的限制。只能以传递函数地址的形式来进行应用设计,哪怕你的回调处理代码只此一处调用到,你也必须设计成独立的函数模块。以此看来是有点僵硬并违背了提高模块内聚减少命名域污染的设计原则。
结合式
回调设计的技术方案,有了lambda表达式特性,我们遵循作用域限制原则,我们就可以本地调用处传递lambda的入口地址的形式。而不必为每一个涉及回调的调用都设计一个独立的函数。此方法又进一步减少了链接期的符号名字冲突的风险。
RAII功用
在C语言时期,阅读无数量代码,设计良好的优秀的代码都可看出固定流程形式,只是那样代码非常明显的体现出这一设计法则,对称式设计思路。同时这样也产生大量形式一样的代码,也就增加了信息量。
而C++作为OOP语言,其对象生命期的友好特性,将非常优秀的解决了客户代码的信息冗余度。
表达式结合律
将RAII与lambda结合,衍生出类似于ruby迭代方法的代码表达形式。
遵循对称化设计法则,C语言必需显式的表达,
ProBEGIN();
...// the process code.
ProEND();
而C++可以利用RAII特性,加上作用域约束和对象生命周期限制来表达,
{
ProRAII pro();// control it use RAII
...// the process code.
}
进一步呈现表达方案。如果C++能得到函数式支持。
ProRAII()
{
...// the process code.
}
如果能这样我们连对象命名都不用了,完全设计一个对称约束式类设计,使用构造函数及附加处理块来完成设计表达。
这类设计形式,在ruby脚本中应该是可以支持的。如果有此特性的支持,我们的代码文档将清色表达形式,全是对称设计法则,和块设计,函数式设计,没有多余的知识需要新手强制掌握。只需要命名作用域控制,单一化职能块设计原则。就完美OK了,上下文可见就是圆括号()组织表达式,花括号{}组织处理块,赋值语句,调用。
总之,调用形式的改观,将彻悟程序员的世界观。
当OOP语言RAII特性发展到functional形式的极致的更多相关文章
- 前端学习 第三弹: JavaScript语言的特性与发展
前端学习 第三弹: JavaScript语言的特性与发展 javascript的缺点 1.没有命名空间,没有多文件的规范,同名函数相互覆盖 导致js的模块化很差 2.标准库很小 3.null和unde ...
- (转)C++0x语言新特性一览
转自:http://blog.csdn.net/zwvista/article/details/2429781 原文请见http://en.wikipedia.org/wiki/C%2B%2B0x. ...
- 理解C#系列 / C#语言的特性
C#语言的特性 大多数语句都已(;)结尾 用({})定义语句块 单行注释(//),多行注释(/*......*/)智能注释(///) 区分大小写 用namespace名称空间对类进行分类 在C#中的所 ...
- C/C++语言简介之发展历史
C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言. 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BC ...
- Objective-C 语言特点/特性
Objective-C中 1.所有的类都必须继承自NSObject. 2.所有对象都是指针的形式. 3.用self代替this. 4.使用id代替void*. 5.使用nil表示NULL, 6.只支持 ...
- Atitit.dart语言的特性 编译时js语言大总结
Atitit.dart语言的特性 编译时js语言大总结 1. 原型环境1 1.1. Dart可以编译js3 2. 第二个期待的理由是Dart的语言特性,没有什么特别特性好像,类似java c#一小时 ...
- oop的三大特性和传统dom如何渲染
OOP的三大特性是什么: 封装 :就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系继承:子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写.继承增加了 ...
- Swift2.0语言教程之函数嵌套调用形式
Swift2.0语言教程之函数嵌套调用形式 Swift2.0语言函数嵌套调用形式 在Swift中,在函数中还能够调用函数,从而形成嵌套调用.嵌套调用的形式往往有两种:一种是在一个函数中调用其它函数:还 ...
- iOS - OC 语言新特性
前言 相对于 Java,OC 语言是一门古老的语言了,而它又是一门不断发展完善的语言.一些新的编译特性,为 OC 语言带来了许多新的活力.在 Xcode7 中,iOS9 的 SDK 已经全面兼容了 O ...
随机推荐
- HDU 2614 Beat 深搜DFS
这道题目还是比较水的,但是题意理解确实费了半天劲,没办法 谁让自己是英渣呢! 题目大意: 猪脚要解决问题, 他有个习惯,每次只解决比之前解决过的问题的难度要大. 他给我们一个矩阵 矩阵的 i 行 j ...
- 【转】Android的onCreateOptionsMenu()创建菜单Menu详解
原文网址:http://www.linuxidc.com/Linux/2012-02/55500.htm Android一共有三种形式的菜单: 1.选项菜单(optinosMen ...
- Python操作Excel_输出所有内容(包含中文)
python 2.7.5代码: # coding=utf-8 import sys import xlrd data=xlrd.open_workbook('D:\\menu.xls') table ...
- BFS zoj 1649
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1649 //hnldyhy(303882171) 11:12:46 // z ...
- trigger 触发器
--trigger --在SC表上建了一个触发器,查看inserted和deleted表中内容. create trigger tri_1 on sc for insert,update,delete ...
- Jenkins 十二: 集成 selenium 测试
我的selenium采用的是python版本. 其实 selenium java版本也类似. 1. 在jenkins里面新建selenium 测试项目. 源码管理采用 “Subversion”,输入 ...
- 调查:Java程序员最亲睐的Web框架
这是关于Java的第二个调查,第一个调查请点这里查看. 这一次,我们要讨论的是web框架. 只有少数几种语言像Java一样提供了各种各样的web框架,上面的统计图就是一个证据.下面是其他开发者所使用w ...
- 【安卓】给ViewFlipper加指示器,相似ViewPagerIndicator库提供的那种、!
思路: 1.viewPager有setOnPageChangeListener能够监听切换动作,但viewFlipper却死活没类似的东西.! 此处有一个变种思路,基于animation,animat ...
- 辛星浅析跨域传输的CORS解决方式
首先我们有一个概念.那就是"同源准则",也就是same-origin policy,它要求一个站点(协议+主机+port号)来确定的脚本.XMLHttpRequest和Webso ...
- EasyUI-datagrid获取编辑行的数据
可以在页面对datagrid的数据直接进行修改,然后提交到数据库,但是要求在提交前获取datagrid的所有行的数据.API提供了getData方法 最后这样写才搞定 var arr=$(‘#d ...