当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 ...
随机推荐
- 【HDOJ】2222 Keywords Search
AC自动机基础题. #include <iostream> #include <cstdio> #include <cstring> #include <cs ...
- 【HDOJ】2289 Cup
二分.另外,圆台体积为v = PI*(r*r+r*R+R*R)*H/3.注意精度. #include <cstdio> #include <cmath> #define exp ...
- 并查集(逆序处理):HDU 5652 India and China Origins
India and China Origins Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- 后缀数组:SPOJ SUBST1 - New Distinct Substrings
Given a string, we need to find the total number of its distinct substrings. Input T- number of test ...
- 配置openStack使用spice
注:因为在测试配置过程中反复配置过多次,以下内容可能并不完整,有待验证. 按官方文档(openstack-install-guide-yum-juno)搭建和配置的OpenStack默认使用novnc ...
- selenium grid 测试资料
像风一样自由的4篇博客: http://blog.csdn.net/five3/article/details/9671287 http://blog.csdn.net/five3/article/d ...
- maven src/test/resources 下的logback-test.xml 读取 properties文件中的key-value值
<profiles> <profile> <id>test-cd</id> <prope ...
- Cstyle的UEFI导读之SEC第一篇 Reset Vector
最近小看了一下SEC部分的code,现在来做个总结.所谓SEC就是CPU刚刚完成硬件初始化的是时候执行的和CPU体系架构息息相关的代码.主要是为后续CPU以及Chipset初始化代码所需的必备 ...
- springboot 配置文件 .properties和.yml的写法区别
例如 : redis配置的properties或yml文件,如下: spring.redis.cluster.nodes[]= spring.redis.cluster.nodes[]= 或 s ...
- TCP/IP源码(59)——TCP中的三个接收队列
http://blog.chinaunix.net/uid-23629988-id-3482647.html TCP/IP源码(59)——TCP中的三个接收队列 作者:gfree.wind@gmai ...