程序设计语言的表达——内部DSL
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://dreamhead.blogbus.com/logs/17667876.html
使用Java实现内部领域特定语言One Lair and Twenty Ruby DSLsImplementing an Internal DSL上面几个文章都是关于DSL的,不过,在这里,我并不是太关心DSL的话题,我更感兴趣的是代码的写法。按照这几篇的分类方法,直接用程序设计语言编写的DSL算是内部DSL,也就是说,所谓内部DSL,也就是一种标准的程序代码。
Kent Beck在他的《
Implementation Patterns》的第三章《A Theory Of Programming》中,谈到了编程的价值观(Value):Communication(沟通)、Simplicity(简单)和Flexibility(灵活)。如果说简单和灵活很容易理解的话,那么把沟通放在价值观中,尤其排在所有价值观的第一位,则显现出Kent Beck对于编程的深刻。在这个软件开发越来越需要协作的年代,写代码的时候,多站在让别人理解的角度考虑一下,会极大提升代码的可读性。在ThoughtWorks的招聘流程中,有一个Code Review的环节,拜这个环节所赐,我看过很多人的代码,不在少数的应聘者其代码唯一的优点就是完成了需求。以沟通为标准进行衡量,这显然是不够的。
同样,以沟通为标准,那么内部DSL显然在这方面做得更好,因为DSL本身就是为了让人更容易理解而存在的。这几篇文章中提供了很多内部DSL的手法,比如
Method Chaining、
Expression Builder等等。抛开DSL这样的BuzzWord,这些方法应该属于增强程序本身表达能力的方法。
JDK有一个很好的Method Chaining的例子:StringBuffer的append方法。
StringBuffer sb = new StringBuffer();
sb.append("log1").append("log2").append("log3");
这样的写法显然比下面的写法更为简洁,尤其是需要往StringBuffer中添加很多内容的时候。
StringBuffer sb = new StringBuffer();
sb.append("log1");
sb.append("log2");
sb.append("log3");
在我看来,这些内部DSL技术为我们打开了一扇窗,它让我们在编写代码,尤其作为API提供的代码时,有了一个新的思考方向。当然,并不是一味的应用这些内部DSL技术就会写出好代码,作为一个有经验的软件开发人员,我们需要一定的鉴别能力,分辨出究竟怎样做才会真正的提高代码的“沟通”能力。
之前写过两篇关于程序设计语言表达的blog(
1、
2),虽然这篇不像那两篇一样讨论语言的差异,但也算是在语言表达能力上的探讨吧!
分享到:
相关推荐
领域语言(DSL)的设计与实践领域语言(DSL)的设计与实践领域语言(DSL)的设计与实践
Red 是一门新的编程语言,它受到了 REBOL 很大的启发,但由于它有本地代码编译器,Red 的应用领域更加广泛——下到系统编程上到高级脚本,同时提供了对现代的多核 CPU 并发编程的支持。 主要特点为: 函数式、声明...
802Dsl子程序库说明pdf,802Dsl子程序库说明
dsl8b20在proteus下的仿真程序
moustache, 用于连接环形处理器和中间件的微型网络框架/内部 DSL Moustache (app ["hi"] {:get"Hello World!"})Moustache是一个微型网络框架/内部 DSL,用于连接环形处理器和中间件。它是多么的微小?那么,你只需要...
NULL 博文链接:https://357029540.iteye.com/blog/2381151
Sinumerik 840Dsl 内部集成刀库管理功能使用,PLC编程,调试.示例
用XText工具开发的自定义DSL语言,实现了一个简单的表达式语言解释器
6.3.1 目标程序启动配置文件——STARTUP.A51. 6.3.2 CPU初始化文件——START751.A51 6.3.3 静态变量初始化文件——INT.A51 6.3.4 专用变量初始化文件——INIT751.A51 第7章 C51的典型资源编程 7.1 中断系统设计...
小型领域特定语言(DSL),亦或是实现一门成熟的通用的计算机程序设计语言。总而言之,使用XText您可以立刻着手创建一套完全属于你所有的语言。
6.3.1 目标程序启动配置文件——STARTUP.A51. 6.3.2 CPU初始化文件——START751.A51 6.3.3 静态变量初始化文件——INT.A51 6.3.4 专用变量初始化文件——INIT751.A51 第7章 C51的典型资源编程 7.1 中断系统设计...
802Dsl_PLC子程序库说明802Dsl_PLC子程序库说明
本程序为西门子802DSL数控车床实例程序已在产品上应用
在groovy中实现DSL领域特定语言的技术。 版权声明: 本系列文章是从原著《Groovy For Domain-Specific Languages》(原作者: Fergal Dearle)中翻译而来,从中加入了一些本人自己的读书笔记和理解。本系列文章不为...
西门子828D_840Dsl车床操作和编程培训手册——内部培训资料 车床目录 工艺基础知识、基本操作、参数操作区域、利用Shopmill车削、利用Shopmil钻削、利用Shop turn车削轮廓、利用ShopTrun铣削轮廓、...
西门子840 Dsl 调试ppt 西门子840 Dsl 调试ppt 西门子840 Dsl 调试ppt
本书是第一本领域专用语言(DSL)的实战类图书,它面向真正的实践者,是一本让奋战在开发第一线的实干家备感实用的专著! 《领域专用语言实战》基于一系列JVM语言(Java、Ruby、Groovy、Scala和Clojure),分析了...
在这篇资源中,我们将详细介绍如何使用DSL来构建复杂的查询语句,以满足各种搜索需求。首先,我们将学习DSL的基本结构和语法规则,包括查询、过滤器、聚合和排序等核心概念。通过深入了解DSL的语法,您将能够灵活地...
bupt期末DSL设计:一种领域特定脚本语言的解释器的设计与实现(java版本,代码加报告加用户说明)
本文档详细的讲解了LSM6DSL的详细配置,其中讲解了数据的读取,唤醒模式,计步功能等。