当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 ...
随机推荐
- BAT 批处理实现循环备份N天文件夹
@echo off set today=%date:~0,4%%date:~5,2%%date:~8,2% xcopy /E /I E:\aaa e:\test\%today% for /f &qu ...
- bzoj3043
这道题完全没想出来,引自 http://blog.csdn.net/willinglive/article/details/38419573的题解 对于带有“将一段区间内的每个数全部加上某个值”这种操 ...
- POJ-Common Substrings(后缀数组-长度不小于 k 的公共子串的个数)
题意: 长度不小于 k 的公共子串的个数 分析: 基本思路是计算 A 的所有后缀和 B 的所有后缀之间的最长公共前缀的长度,把最长公共前缀长度不小于 k 的部分全部加起来. 先将两个字符串连起来,中间 ...
- 【转】android ListView详解---- 不错不错
原文网址:http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html 由于google doc 很多人都打不开,故更新了源码下载地址 [源 ...
- FZYZOJ-1880 【UFO】水管
P1880 -- [ufo]水管 时间限制:1000MS 内存限制:131072KB 通过/提交人数:32/100 状态: 标签: 数学问题-组合数学 无 ...
- 迷宫 maze
1 #include <stdlib.h> #include <stdio.h> #define stackinitsize 50 #define stackincrement ...
- 手把手教你把VIM改成一个集成开发环境
转载自:http://blog.csdn.net/wooin/article/details/1858917 在原文基础上经过自己验证,修改和完善 OS:Fedora19 VIM:VIM7.4 一.写 ...
- poj 1961 Period【求前缀的长度,以及其中最小循环节的循环次数】
Period Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 14653 Accepted: 6965 Descripti ...
- javaweb笔记5之请求编码问题
post提交: 设置实体内容的编码:request.setCharacterEncoding("utf-8"); 注意:一定要在获取所有参数之前设置,否则设置无效! get方式提交 ...
- python数据的存储和持久化操作
Python的数据持久化操作主要是六类:普通文件.DBM文件.Pickled对象存储.shelve对象存储.对象数据库存储.关系数据库存储. 普通文件不解释了,DBM就是把字符串的键值对存储在文件里: ...