Kotlin 之美—DSL篇 - 掘金

像 Compose 那样写代码 :Kotlin DSL 原理与实战_fundroid_方卓的博客-CSDN博客

先找好一个靶子:

val yesterday = 1.days.ago

请问,谁记得这个写法?除了这个发明人谁会记得应该这么敲?为什么不是 1.days.before,为什么不是 now.24.hour.ago?它能处理 1/4 的前一天是 31/3 吗,你不知道!

所谓的 reactive 已经把用户折腾疯了,一套 reactive 的框架通常除了作者没有人知道怎么构造一个对象,每次使用只能复制粘贴。现在这种 DSL 更是大大加剧了问题。你根本不知道如何“正确的”按他们的行话来写代码。

现在 IDE 的提示云山雾绕,一层层的 Function,你不翻 sample 根本看不懂这些 Function 是干嘛的。从前我们笑话 Java 起名难,到处是 Builder Factory Creator,但这和 reactive DSL 相比简直太友好了。

在传统的模式里只要笨笨的按一个统一的模式追索,你就能解决,查找 Reference 也花不了几次,而现在这些“高阶”函数,你每个参数都是函数啊,你得查多久才能找到你想要的?

程序世界里总是一波一波的SB风潮,XML、微服务、中台等等等等,这波SB风潮不知何时才能退去。

kotlin 和 groovy 靠这个做到了像下面这样的表达:

html {
head {
title "test"
}
}

然而它不是在构造 DOM 对象, head 是什么, head 并不是 function head(){return new DOMElement("head")},也不是 class Head extends DOMElment{}, head 是 head(Function xxx), head 尾随的 {title "test} 是一个闭包。

这种所谓 DSL 只能算是字面实现,就像 LISP 把 () 玩出花,代码难以阅读,问题难以追溯,有损工程性。

这波逆流后相信大家能回归到醇正的 OO 风格了,到时会恍然大悟,原来平白朴实的OO这么踏实。

DSL 和 reactive 噩梦的更多相关文章

  1. 从语言到库到框架,再到API,再到标记最后到DSL语言

    计算机技术发展很快,而且越来越快,结果也是越来越复杂,那么我们到底怎么搞定复杂性并重用代码? 很明显,这是个大难题.一开始我们要解决计算问题,发展了基本的编程语言. 很快,编程语言不能满足需求,我们需 ...

  2. Ubuntu手动设置DSL连接

    在安装完Ubuntu之后,发现图形界面的DSL连接不管用了,郁闷了好几天,想想移动每个月120个小时的流量岂不是白白浪费了.正当我想重返Windows系统的时候,却发现了手动设置连接DSL的好方法,感 ...

  3. web前端的春天 or 噩梦

    「 微信应用号可以做什么」 简单说,微信"小程序"可以为开发者提供基于微信的表单.导航.地图.媒体和位置等开发组件,让他们在微信的网页里构建一个 HTML 5 应用.同时微信还开放 ...

  4. 升级Ubuntu 16.04 LTS后 DSL拨号上网(ppp)连接自动断开解决办法

    原本在Ubuntu 15.10用拨号上网没有问题,但升级了16.04 LTS后发现原来的DSL连接不上了.主要表现为: 1.在NetworkManager里面选择DSL Connection能够尝试拨 ...

  5. Reactive Extensions(Rx) 学习

    Bruce Eckel(著有多部编程书籍)和Jonas Boner(Akka的缔造者和Typesafe的CTO)发表了“反应性宣言”,在其中尝试着定义什么是反应性应用. 这样的应用应该能够: 对事件做 ...

  6. Reactive Extensions介绍

    Reactive Extensions(Rx)是对LINQ的一种扩展,他的目标是对异步的集合进行操作,也就是说,集合中的元素是异步填充的,比如说从Web或者云端获取数据然后对集合进行填充.Rx起源于M ...

  7. .Net中的反应式编程(Reactive Programming)

    系列主题:基于消息的软件架构模型演变 一.反应式编程(Reactive Programming) 1.什么是反应式编程:反应式编程(Reactive programming)简称Rx,他是一个使用LI ...

  8. 完全使用一组 DSL 来操作 Grid 控件

    最近尝试了一下将 XtraGrid 的初始化工作封装成内部 DSL,例如一个普通的基础数据的增删改查操作的代码会像下面这样: public partial class UserForm : XtraF ...

  9. 如何设计一门语言(十)——正则表达式与领域特定语言(DSL)

    几个月前就一直有博友关心DSL的问题,于是我想一想,我在gac.codeplex.com里面也创建了一些DSL,于是今天就来说一说这个事情. 创建DSL恐怕是很多人第一次设计一门语言的经历,很少有人一 ...

  10. jQuery的Internal DSL

    JQuery的核心理念是write less,do more(写的更少,做的更多),那么链式方法的设计与这个核心理念不谋而合.那么从深层次考虑这种设计其实就是一种Internal DSL. DSL是指 ...

随机推荐

  1. 墨天轮PostgreSQL精品学习资源合集(含基础手册、实操技巧&案例、书籍推荐)

    近日,PostgreSQL 15 的第一个 beta 版本发布,这一最新版本在开发者体验.性能表现等方面都有提升.从最新的DB-Engines排名可以发现,PostgreSQL近十年来得分一路高涨,目 ...

  2. 通过脚手架 npx 创建 react 项目

    npx create-react-app create-react --template typescript 使用 ts 模板

  3. 云原生周刊:Harbor v2.11 版本发布 | 2024.6.17

    开源项目推荐 Descheduler Descheduler 是一个工具,可用于优化 Kubernetes 集群中 Pod 的部署位置.它可以找到可以移动的 Pod,并将其驱逐,让默认调度器将它们重新 ...

  4. KubeSphere 社区双周报|Fluent Bit 升级到 v2.2.2|2024.01.18-02.01

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  5. iceoryx源码阅读(五)——共享内存通信(三)

    目录 1 正常的消息接收流程 1.1 SubscriberImpl::take 1.2 BaseSubscriber<port_t>::takeChunk 1.3 SubscriberPo ...

  6. 用微软商店商店安装 Python

    在安装 Python 时,除了在官网 www.python.org 下载,还可以用微软商店下载 安装完成后,其目录位于C:\Users\<用户名>\AppData\Local\Micros ...

  7. VScode如何设置浅色侧栏

    原文地址:https://blog.csdn.net/KaiSarH/article/details/113241334 vscode主题设置成了浅色,但是侧边栏仍然是灰色,非常讨厌. 在设置中对&q ...

  8. AI For Everyone_Week_1 By Andrew NG 课程英文

    AI For Everyone__Week__1 By Andrew NG 1 Introduction Welcome to AI for everyone. AI is changing the ...

  9. 多元/多维高斯/正态分布概率密度函数推导 (Derivation of the Multivariate/Multidimensional Normal/Gaussian Density)

    各种维度正态分布公式: 一维正态分布 二维正态分布/多维正态分布 各向同性正态分布 注:即方差都是一样的,均值不一样,方差的值可以单独用标量表示. 多元/多维高斯/正态分布概率密度函数推导 (Deri ...

  10. Centos 安装 supervisord服务

    安装supervisord 执行如下命令安装supervisord yum install epel-release -y yum install supervisor -y 设置开机启动superv ...