问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Kotlin 一个很厉害的 DSL 写法

发布网友 发布时间:2024-10-07 20:53

我来回答

1个回答

热心网友 时间:2024-12-11 09:47

好久没写博客了,今天发几个最近在各个地方看到的一些碉堡了的 Kotlin DSL。

本文先介绍一种 DSL 写法,再推荐几个 DSL 项目。

超厉害的 DSL

之前在 KotlinTest 上看到一个很牛*的写法(我把 README 里的实例改了下):

这其中涉及了好几个 DSL 要素。我一一列举:

字符串后面跟一个代码块

这个东西的原理你只要看了源码就知道了,很简单,但是你不看就是想不到(这也是我厨 Kotlin 的原因之一,它很简单, 但是可以玩出很多花样来)。

就这样你可以利用这个 extension 写出字符串后面跟一个代码块的 DSL 。 此处使用的语言特性有:

明白了吧。

使用

举个例子,把他作为一个 URL 的 utility :

表格字面量

就是形如

这样的东西(上面的代码纯粹搞起耍,请不要在意)。

这个就更简单了我觉得你们应该都知道:

无非就是变长参数。

形如 "(+ 1 1)" shouldBe 2 的测试

这个也很简单,我在小标题里写的就是我在 lice 里使用的测试。

首先,假定我们有以下测试:

我们希望写成:

很简单,可以有:

就是一个中缀表达式而已。这有什么难的?

一些特定情况

我给我的 lice 写的测试中直接把运行字符串的那一步给包含进去了:

看到没有,运行 lice 代码就是这么简单,还能返回最后一个表达式的值 (喂

注意事项

任何长得类似这样的 DSL 都有一个缺点,就是缩进膨胀(字面意思)。 Scala 为了解决这个问题, 推荐用户使用 Tab size 2 的缩进(喂。 于是我也建议读者使用 2 空格缩进。

几个厉害的 DSL 项目

根据推荐程度排序:

Anko

传送门,不说了,最强的 Kotlin DSL 框架,想必大家早已有所耳闻:

厉害吧。这个框架是用于 Android 的,用于描述 UI 。有一点要说一下,现在的预览插件挂了。

弹窗:

还有一些非 UI 的吊炸天的代码块,比如异步:

两个基于 Swing 的 DSLGensokyo

传送门,一个刚出来的项目,它长这样:

Swing 其实没那么垃圾,只要配上 DSL ,啥 GUI 代码都变得好看了。

FriceEngine DSL

这是我之前弄的那个游戏引擎的 DSL 系统, 传送门,它长这样:

我自己觉得做的还不错。我还为它搞了个中文版,比较粗鄙,用于讽刺中文编程,请前往同项目的 README 查看。

官方教程里的 HTML DSL

传送门,它长这样:

这代码也是我从 README 里面改过的,原文太瘦了,我改的胖一点。

官方给的例子,非常给力(当时也是看这个的源码搞懂了 anko 的原理)。

JavaFX DSL

传送门,它长这样:

我个人觉得很不错了已经。

嘛。祝大家玩 Kotlin 开心。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
家里中央空调一般开多长时间最省电呢? 成为优秀中移铁通员工的方法 中移铁通究竟是做什么的 拆解大金FTXM325NC(2013.6生产) 大金空调寿命一般多久 大金空调使用寿命有多长 问:租赁大型空调时如何确保售后服务质量? 进销存永久免费软件十大排名哪款进销存软件好用又免费呀 速达进销存软件 快速搞定论文格式要求及字体大小 干海参一斤能泡发多少斤 去泰国带什么储蓄卡 计算机CPU中AMD双核和因特双核有何区别?谢谢。 AMD和Intel的双核技术有何本质区别? k85广州-九江的车,硬座座位是怎么排的,哪些靠窗啊 k85广州-九江的车,硬座座位是怎么排的 ...里做钢琴分解和弦?本人不会弹琴,怎么做?高人指点一下 谢谢_百度知 ... ...我想学汪苏泷的小星星(我有谱)。求高人指点! ...D/#F 是什么意思,还有Am和弦下面的数字应该怎么弹,求高人指点... 掏耳朵痒容易咳嗽是什么原因 用吉他给歌曲配和弦的基本方法! 以及常用的和弦. 2007年2月16日K85想提前至2月15日同一车次,2月15日下午再去广州改可... 淘汽包马小跳体现马小跳特点的情节 html5常用的标签都有哪些? 手机下载的视频在哪个文件夹里面 自制蛋糕中加一些什么辅料好吃又好看? 求 名侦探柯南 已出的六百多集的题目,求所有剧场版、剧场特典 、OVA 的... 谁有笔记本156和173寸屏幕的对比图发来 名侦探柯南已经有六百多话了,谁可以告诉我里面最经典的几集啊?集数和... 请问各位柯南迷们你们知道六百集之后的《名侦探柯南》有什么好看的,比... 名侦探柯南中新一在六百多集中出现的集数,我记得有一个和世良纯真一块... 如何在 Kotlin 中实现屏幕共享 鸟类保护区建设条件 昌发展龙域中心这‏个园区如何?未来发展怎么样?想入驻,求介绍 乙肝大三阳丙氨酸氨基转移酶133,天门冬氨酸氨基转移酶62,谷氨酰氨基... 我是乙肝大三阳,肝功检查丙氨酸氨基转移酶131,天门冬氨酸氨基转移酶59是... (ALT丙氨酸氨基转移酶93\ AST天门冬氨酸氨基转移53\ GGT谷氨酰转移酶71... 丙氨酸氨基转移酶62,天门冬氨酸氨基转移酶58!其它正常!这是肝炎吗... ...肝功能,丙氨酸氨基转移酶偏高,门冬氨酸氨基转移酶偏高,前白蛋白偏低... ...想在台式机网线口接一个交换机共享其他电脑,请赐教。 s3项链在哪换 魔兽世界S3装备 魔兽世界第三赛季装备哪里买?! 急求,怎么打出来带圈的21到50,不要方法,帮忙打出来,我复制一下就行了... 一文解读:中级经济师考试难不难?历年通过率是多少? "提防"一词怎么念? 漫画作文漫画的内容是和小人说话你也会变成矮子如何立意 康熙来了谢娜有说什么时候离朋友最远吗 ...25岁的你们喜欢看什么书刊?漫画?轻小说?古典文学?还是 哪一集康熙来了提过3d漫画包? 白康熙字典