当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】2487 Ugly Windows
暴力解. #include <cstdio> #include <cstring> #define MAXN 105 char map[MAXN][MAXN]; ]; int ...
- LVM 命令集总结
PV 命令 下面的命令是在与物理卷相关的操作中最常用的命令: lsdev 列出ODM中的设备. chdev 修改设备的特征. mkdev 增加一个设备到系统中. chpv 修改物理卷的状态. lspv ...
- Linux Kernel ‘test_root()’函数本地拒绝服务漏洞
漏洞名称: Linux Kernel ‘test_root()’函数本地拒绝服务漏洞 CNNVD编号: CNNVD-201306-432 发布时间: 2013-06-25 更新时间: 2013-06- ...
- -_-#【CSS3】CSS3 gradient transition with background-position
CSS3 gradient transition with background-position <!DOCTYPE html> <html> <head> &l ...
- 基于物联网操作系统HelloX的智慧家庭体系架构
基于物联网操作系统HelloX的智慧家庭体系架构 智慧家庭是物联网的一个分支应用,是一个被广泛认同的巨大IT市场空间.目前市场上已经有很多针对智慧家庭的产品或解决方案,但与移动互联网不同,智慧家庭至今 ...
- 【动态规划】Vijos P1143 三取方格数(NOIP2000提高组)
题目链接: https://vijos.org/p/1143 题目大意: NxN的矩阵,每个值只能取一次,从(1,1)走到(n,n)走三次能取得的最大值. 题目思路: [动态规划] f[x1][y1] ...
- HDOJ(HDU) 2162 Add ‘em(求和)
Problem Description Write a program to determine the summation of several sets of integers. Input Th ...
- [后端Day1]Python2.7之基础
注:以下内容全部为 廖雪峰的官方网站 中学习内容的摘要和总结 输入和输出: name = raw_input('please enter your name: ') print '100 + 200 ...
- [置顶] 【Git入门之十四】Git GUI
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12374495 文章都快写完了,Git GUI才浮出水面,很多人要骂我,这么方 ...
- python-类和对象(属性、方法)的动态绑定
动态绑定 # coding=utf-8 ''' 当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性 ''' from types im ...