当OOP语言RAII特性发展到functional形式的极致

本文主要站在C++程序员的思维角度思量。

functional之路

lambda表达式

lambda表达式,是一段代码片段。函数实现体中出现的可重用的代码块。

在C++之前,C语言最小可复用流程模块,是函数;只有函数是用以处理不同类型数据的代码块,书写一次可多次被调用以重复利用优化设计,减少工程复杂度。

C++出来之后,并没有立即改进函数设计的代码技术,而是首先由boost第三方库锻造出来的lambda支持来强化设计工作,使得在函数代码中也可以进一部优化复用代码,进一步得到简洁描述。

由后来C++标准完善过程中lamda特性被纳入标准,由编译器提供商去提供该特性支持。

在没有lambda表达方式之前,书写C函数代码,简化表达的方式只有通过预处理技术,使用宏替换完成代码元设计工作。

回调代码

回调是一种框架设计方法,使用回调方式,可以提炼稳定结构而形成固定的开发框架或工作模式。把变化的应用代码留调用者编写,而设计有效的API提供予应用设计方。

在C语言时期,由于代码模块概念的限制。只能以传递函数地址的形式来进行应用设计,哪怕你的回调处理代码只此一处调用到,你也必须设计成独立的函数模块。以此看来是有点僵硬并违背了提高模块内聚减少命名域污染的设计原则。

结合式

回调设计的技术方案,有了lambda表达式特性,我们遵循作用域限制原则,我们就可以本地调用处传递lambda的入口地址的形式。而不必为每一个涉及回调的调用都设计一个独立的函数。此方法又进一步减少了链接期的符号名字冲突的风险。

RAII功用

RAII,资源获取即初始化(Resource Acquisition Is Initialization)。其实就是遵循对称设计法则的一种语言特性,C++提供了对象生命期的管理对此有非常友好的支持。

在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了,上下文可见就是圆括号()组织表达式,花括号{}组织处理块,赋值语句,调用。



总之,调用形式的改观,将彻悟程序员的世界观。


上一篇:Knockout应用开发指南 第三章:绑定语法(1)


下一篇:bzoj1007:[HNOI2008]水平可见直线