开发者社区> 华章计算机> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

《领域特定语言》一3.5 宏

简介: 本节书摘来自华章出版社《领域特定语言》一书中的第3章,第3.5节,作者 (英)Martin Fowler,更多章节内容可以访问云栖社区“华章计算机”公众号查看
+关注继续查看

3.5 宏

“宏”(第15章)是一种工具,既可以用于内部DSL,也可以用于外部DSL。宏曾经得到广泛应用,但如今已不那么常见了。在大多数情况下,我建议尽量避免使用宏,但偶尔,它也有一些用处。所以,接下来,就谈论宏的运作方式以及使用时机。
宏有两种风格:文本宏和语法宏。文本宏最容易理解,简单说就是文本替换。使用文本宏会带来便利,一个很好的例子就是,在CSS文件中指定颜色。除了少数几种特定情况外,CSS强制我们以颜色代码指定颜色,比如#FFB595。这样的代码并不表意,更糟糕的是,如果要在多个地方使用同一种颜色,就要重复同样的代码。任何形式的代码重复都是坏味道。我们可以给它一个在上下文中有意义的名字,比如MEDIUM_SHADE,在一个地方定义它,比如,MEDIUM_SHADE等于#FFB595。
虽然CSS(至少目前为止)并不允许这么做,但可以用一个宏处理器处理这种情况。创建一个文件,它就是CSS文件,只不过其中用MEDIUM_SHADE表示所需的颜色。然后,用宏处理器做一次简单的文本替换,把MEDIUM_SHADE替换为#FFB595。
这只是一个非常简单的宏处理例子。更复杂的宏还可以有参数。一个经典的例子是C的预处理器,比如,定义一 个宏sqr(x),它可以替换为x*x。
通过宏创建DSL有很多方式,可以使用宿主语言本身(比如,C预处理器),也可以提供单独的一个文件,将其转换为宿主语言。宏的缺点在于,它有很多诡异的问题,这使得它在实际中难于使用。所以,文本宏现在已经不再受宠,很多专业人士(比如我)都反对使用它。
语法宏也是通过替换实现的,但是它处理的是宿主语言中有效的元素,将一种表达式转换为另一种。在以“大量使用语法宏”而闻名的语言中,Lisp最为著名,虽然C++模板更广为人知。使用语法宏编写DSL,是Lisp编写内部DSL 的核心技术,但这种技术也仅限于支持宏的语言。因此,本书不会过多谈及,因为仅有很少的语言可以支持宏。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Kotlin领域特定语言(DSL)
一、DSL的概念 只在特定领域内使用的语言 例如: —HTML、Gradle、SQL等等 特点: 计算机编程语言 具有语言的表达能力 有限的表达能力 关注某个特定的领域 二、下面用DSL来写一个例子吧 需要下面五个类: 三、创建一个Node节点的接口 package cn.
1073 0
《领域特定语言》一导读
我写这本书就是为了改变这个现状。我希望通过本书介绍的大量DSL技术,让你有足够的信息来做出决策:是否在工作中使用DSL,以及选择哪一种DSL技术。
1014 0
《领域特定语言》一3.3 文法、语法和语义
本节书摘来自华章出版社《领域特定语言》一书中的第3章,第3.3节,作者 (英)Martin Fowler,更多章节内容可以访问云栖社区“华章计算机”公众号查看
976 0
《领域特定语言》一3.7 错误处理
本节书摘来自华章出版社《领域特定语言》一书中的第3章,第3.7节,作者 (英)Martin Fowler,更多章节内容可以访问云栖社区“华章计算机”公众号查看
707 0
《领域特定语言》一2.3DSL的问题
本节书摘来自华章出版社《领域特定语言》一书中的第2章,第2.3节,作者 (英)Martin Fowler,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1250 0
《领域特定语言》一1.2 状态机模型
本节书摘来自华章出版社《领域特定语言》一书中的第1章,第1.2节,作者 (英)Martin Fowler,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1419 0
《领域特定语言》一2.5 DSL的生命周期
本节书摘来自华章出版社《领域特定语言》一书中的第2章,第2.5节,作者 (英)Martin Fowler,更多章节内容可以访问云栖社区“华章计算机”公众号查看
898 0
如何撸一个领域语言
如何撸一个领域语言 DSL概述 DSL是一种抽象的概念,泛指用在特定领域的语言。例如在数据库管理系统中,使用SQL增删改查数据库内容,在C++编译中,Makefile也是一种DSL,它专用来描述各个编译单元的依赖关系以及编译参数,以此规则控制编译器和链接器。 从实现方法上来分类,DSL分为内部
7275 0
C++语言15个晦涩特性
这个列表收集了 C++ 语言的一些晦涩(Obscure)特性,是我经年累月研究这门语言的各个方面收集起来的。C++非常庞大,我总是能学到一些新知识。即使你对C++已了如指掌,也希望你能从列表中学到一些东西。
713 0
10057
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载