常见的DSL 常见的DSL在很多领域都能看到,例如: 软件构建领域 Ant UI 设计师 HTML 硬件设计师 VHDL DSL 与通用编程语言的区别 DSL 供非程序员使用,供领域专家使用; DSL...有更高级的抽象,不涉及类似数据结构的细节; DSL 表现力有限,其只能描述该领域的模型,而通用编程语言能够描述任意的模型; DSL分类 根据是否从宿主语言构建而来,DSL 分为: 内部 DSL(从一种宿主语言构建而来...Kotlin和anko进行Android开发 anko Anko 是一个 DSL (Domain-Specific Language), 它是JetBrains出品的,用 Kotlin 开发的安卓框架。...本文使用Kotlin代码对它进行简单的封装,代码如下: import io.reactivex.BackpressureStrategy import io.reactivex.Flowable import...import com.cv4j.core.datamodel.CV4JImage import com.cv4j.core.filters.CommonFilter /** * only for Kotlin
{ text = "我永远喜欢燕结芽" } println(text.length) // ok, smart cast to String 为了解决这个问题,于是就有了 Contracts DSL...Contracts DSL Contracts DSL 可以为编译器提供关于函数行为的附加信息,帮助编译器分析函数的实际运行情况。...如果启用了该特性,那么编译器就能解析获取 Contracts DSL 所表达的信息,用于数据流分析。...现在 Contracts DSL 位于 kotlin.internal.contracts 这个包内,是 internal 的,一般用户还无法直接拿来写自己的 contract,等JB那帮人把这个功能做好了就会公开这套...(貌似还需要加上编译器参数 -Xallow-kotlin-package(允许使用 kotlin 开头的包名)) 然后随便写了一下,看起来就像这个截图这样: ?
译者:Jackie Tang 如果您还没有玩转Spring Webflux,那么可以使用基于kotlin的DSL开发一个函数式API。...Spring Webflux最近 介绍一个特性来定义函数式API,它使用一个非常直观的基于 Kotlin的 DSL。...这篇文章将简单地展示一组具有鲜明对比的定义API的方式,一个是基于java流畅的API,一个是基于Kotlin的DSL。...这些API也可以使用基于kotlin的DSL(以及一些巧妙地使用Kotlin扩展函数),用下面的方式来实现: @Bean fun apis() = router { (accept(APPLICATION_JSON...如果这个API更加复杂,譬如Sébastien Deleuze所演示的精彩例子中所示,有多个层次的嵌套,这时基于kotlin DSL的优势就发明显了。
Kotlin DSL脚本 就像基于groovy的DSL一样,Kotlin DSL是在Gradle的Java API之上实现的。...注意,您可以将Groovy DSL构建脚本与Kotlin DSL构建脚本混合使用,例如,Kotlin DSL构建脚本可以应用Groovy DSL脚本,多项目构建中的每个项目都可以使用其中任何一个。...Kotlin DSL API,它是org.gradle.kotlin.dsl和org.gradle.kotlin.dsl.plugins....DSL包中的所有类型 避免使用内部Kotlin DSL api 在插件和构建脚本中使用内部Kotlin DSL api可能会在Gradle或插件发生变化时破坏构建。...Kotlin DSL API使用org.gradle.kotlin.dsl包或org.gradle.kotlin.dsl.plugins.
DSL 简介 II . Kotlin 函数扩展 III . Kotlin 属性扩展 I . DSL 简介 ---- 1 ....Kotlin 中的 DSL : DSL 是 Kotlin 语言的特性之一 , 使用 DSL 可以让函数调用非常接近真实的语言 ; 6 ....Kotlin 中实现 DSL 的原理 : Kotlin 中使用 ① 函数扩展 , ② Lambda 表达式 , ③ infix 中缀表达式 , ④ invoke 约定行为 , 等 Kotlin 特性原理实现...Kotlin 函数扩展 ---- 1 . 函数扩展作用 : Kotlin 中的函数 / 属性 扩展 , 可以为任意定义好的类 , 扩展任意函数或属性 ; 2 ....Kotlin 属性扩展 ---- 1 . 属性扩展作用 : Kotlin 中的函数 / 属性 扩展 , 可以为任意定义好的类 , 扩展任意函数或属性 ; 2 .
第10章 使用 Kotlin 创建 DSL 使用DSL的编程风格,可以让程序更加简单干净、直观简洁。当然,我们也可以创建自己的 DSL。...相对于传统的API, DSL 更加富有表现力、更符合人类语言习惯。 本章就让我们一起来学习一下 Kotlin中 DSL的相关内容。...我们会首先介绍什么是DSL , 然后简单介绍 Kotlin DSL 设计中的特性支持,最后给出了一个http ajax请求的DSL 实现的完整案例。...DSL 有内部 DSL 跟外部 DSL 之分。例如 Gradle、Anko 等都是我们使用通用编程语言(Java 和 Kotlin)创建的内部DSL。...10.2 Kotlin的DSL特性支持 许多现代语言为创建内部 DSL 提供了一些先进的方法, Kotlin 也不例外。
第十一章 Kotlin实现DSL 正式上架:《Kotlin极简教程》Official on shelves: Kotlin Programming minimalist tutorial 京东JD...id=558540170670 DSL DSL 即 domain-specific languages,领域特定语言。和一般的编程语言不同,领域特定语言只能用于特定的领域中并且表现形式有限。...实现 DSL Java 中 DSL 的最简单实现方式就是构造器模式,而在 Kotlin 过去的版本中可以省略 .,所以可以写成更易读的代码,但是现在的版本已经不支持了。...使用闭包构建 DSL Kotlin 像 Groovy 一样也能通过闭包构建 DSL,语法看起来很像 Groovy。...For more see the" a(href = "http://jetbrains.com/kotlin") { +"Kotlin" }
概要 如果你想用 gradle kotlin DSL,那么请注意,accessors 的支持从 0.8.0 开始(gradle 3.5),后续也做了一些完善和更新,目前已经默认开启了这一项功能。...正文 昨天也是手欠,非要用 Gradle Kotlin DSL 构建工程,还看到现在连 settings.gradle 也支持用 kts 了,于是乎: ?...那倒也不是,gradle kotlin DSL 会帮我们根据插件的 configuration 定义生成这样的代码。...详细说明在 gradle kotlin DSL 0.8.0 的更新说明当中:https://github.com/gradle/kotlin-dsl/releases/tag/v0.8.0 ,不过其中提到的...小结 kotlin 和 groovy 也算是各有所长,如果我们对于 gradle 的语法非常熟悉,那么我个人认为用 groovy 写 DSL 倒也灵活,kotlin 的约束毕竟多一些——而这也正是 Kotlin
第14章 使用 Kotlin DSL 非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~ ---- 我们在前面的章节中,已经看到了 Kotlin DSL 的强大功能。...Kotlin 的 DSL 特性支持 许多现代语言为创建内部 DSL 提供了一些先进的方法, Kotlin 也不例外。...写前端代码 为了加深对 Kotlin DSL 实用性上的理解,我们本节再介绍一个 Kotlin 中关于 HTML 的 DSL: kotlinx.html 。...提示:本节项目源码: https://github.com/EasyKotlin/chapter14_kotlin_dsl 实现一个极简的http DSL 我们现在已经基本知道 Kotlin 中 DSL...Kotlin 的扩展函数和高阶函数(Lambda 表达式),为定义Kotlin DSL提供了核心的特性支持。 使用DSL的代码风格,可以让我们的程序更加直观易懂、简洁优雅。
Anko Anko 是一个 DSL (Domain-Specific Language), 它是JetBrains出品的,用 Kotlin 开发的安卓框架。...dsl风格使用滤镜.png cv4j 目前已经支持了几十种滤镜,当然除了滤镜还有其他功能,感兴趣的童鞋可以看我们的源码:)。 总结 使用dsl的代码风格,可以让程序更加直观和简洁。...如果使用Kotlin来开发项目的话,完全可以尝试一下。 公司的sdk项目我也考虑引入Kotlin,我已经写了一个module用于封装原先的sdk,这个module只适用于Kotlin项目。...注册各个mLink服务.jpg 可以感受一下,使用dsl是不是比原先的代码更加简洁和直观呢? 另外,众所周知的Gradle也是基于DSL的Java构建工具。...参考资料: > Type-Safe Builders
中缀表达式作用 : 中缀表达式是 Kotlin 领域特定语言 DSL 自然语言特性实现的核心 , 其能实现类似于自然语言的函数调用方式 ; 2 ....List 类型变量扩展函数 printMaxAgeStudent , 其作用是 查找身高高于 180 的人 , 并且使用 infix 声明该函数 , 表明该函数可以使用中缀表达式调用 ; package dsl...Student("Jerry", 18, 165), Student("Trump", 18, 178), Student("Jack", 29, 165) ) /* DSL...180 的学生 filter { it.height > height }.forEach(::println) } fun main() { //调用 DSL
第13章 使用Kotlin实现DSL 13.1 领域特定语言DSL 13.2 Groovy的DSL语法 13.3 Kotlin使用闭包构建 DSL
我最近添加了两个模块:Selenium模块、DSL模块。 一. Selenium模块 添加这个模块的目的是为了让它能够模拟人的行为去操作浏览器,完成爬虫抓取的目的。...DSL模块 该模块是由Kotlin编写的,使用它的特性进行DSL的封装。...spider.pipeline(it) // 这里的it指pipelines里的各个pipeline } } return spider } 举个例子,使用DSL..."https://www.baidu.com/") .pipeline(new ConsolePipeline()) .run(); DSL...不过话说回来,DSL也有缺陷,能够表达的功能有限,并且不是图灵完备的。
build.gradle.kts” 在接近末尾处都dependencies里添加一行代码,修改后如下 dependencies { compile(kotlinModule("stdlib-jdk8", kotlin_version...)) compile("javax","javaee-api","8.0") } 再添加war插件,在apply代码块下修改,结果如下 apply { plugin("kotlin")
appendChild(books) } 完整实例代码参考:https://github.com/Jason-Chen-2017/kotlin-js-gradle-demo kotlinx.html...参考文档:https://github.com/Kotlin/kotlinx.html
目前继续在 Kotlin Multiplatform 开源领域发力,打造出了基于 DSL 及 Kotlin Symbol Processor(KSP)开发的 SQLite 框架—— SQLlin。...2.2.2 Exposed Kotlin在正式发布时有一个主力卖点就是可以用来构建开发者自己的DSL。Exposed(参考链接 5)是当时官方宣传DSL的范例项目之一。...但总的的来说 Exposed 的设计思路的方向非常棒,使用 Kotlin 语法构建自己的 DSL API,对用户来说使用方便,且只要充分利用其潜力,API 也能设计的非常优雅。...3.3 DSL 设计与实现 3.3.1 基本设计 在 driver 层的实现没有太大障碍后,我们就可以着手进行 DSL 层的设计和开发。...SQLDelight 的完全生成式 DSL 实现起来过于复杂,使用 Kotlin 的语法潜力构建我们自己的 DSL 相对简单且易于使用。
前言 DSL并不是单独为Kotlin语言提供的,可能你并知道DSL是什么,但是我敢说,只要你是Android开发者,你就一定使用过并且一直在使用DSL,那么到底什么是DSL?...DSL是什么 DSL的全程是Domain Specific Language 即 领域特定语言,我们可以通过DSL语言 构建出属于我们自己的语法结构,而在Kotlin中并不只有一种方式实现DSL,而主要的实现方式就是高阶函数...DSL的基础用法 接下来,我们来看,Kotlin中如何使用DSL构建自己的语法呢,要想装13 我们当然要来实现和上面一样的语法结构,那我们就来造一个吧~ 首先我们新建一个类Dependency,名字是可以随便起的...Anko插件 最后我们来简单的介绍下DSL在Kotlin中的一个框架Anko,Anko用Kotlin DSL 写的Android插件,Anko主要的作用是替代以前用XML的方式来生成UI布局。...关于Anko插件如何使用,就不讲解了,感兴趣的可直接到Github上了解:https://github.com/Kotlin/anko 写在最后 DSL的使用场景远远不止这些,其实前提就是使用好高阶函数
伴随着Kotlin的发展,有一个神奇的框架 anko-layout,一直存在于我们的视野却又一直因为各种原因无法用于生产环境中。...Kotlin DSL本身就是语法糖而已,所以DSL背后就是使用Kotlin代码来自己初始化View,初始化LayoutParams,进行addView之类… 而其实LayoutInflater它本身也只是在做相似的事情而已...12) bottomMargin = dip(12) } 在一个Layout的闭包里面写循环,填充数据,然后addView,有了Kotlin...比如说在布局里面加一个if就可以来操作一个控件的布局与否,而不是在findView之后控制Visibility,可以用Kotlin的闭包来封装一个View的初始化操作什么的,重复的操作就可以封装起来,再比如...XML可以拿到ViewGroup的应用然后用DSL做骚操作,DSL也可以动态添加Inflate出来的XML来实现复杂页面布局的添加 DSL和XML各有所长,DSL更适合用于页面模块的解耦,XML更多用于单页构建
因此,本文提出了一种基于Kotlin DSL写法的Espresso和UIAutomator融合方案,解决在不同库下的客户端自动化框架、用例的可读性、可维护性问题。...Kotlin DSL带来的新思路 还好小编在调研阶段就意识到了这个问题,因此决定使用Kotlin的功能编写DSL以统一两个库的语法。...而在Kotlin中,DSL 则是对 Kotlin 所有语法糖的一个大融合,它的代码结构通常是链式调用、lambda 嵌套,并且接近于日常使用的英语句子,我们可以愉悦的使用 DSL 风格的 API,同时,...click on button(R.id.activityLoginBtnLogin) 上面是基于Kotlin DSL实现的一个例子,是不是很清晰易懂呢?...我们如果要自行更新或增加Kotlin DSL库的内容,可以将UIAutomator和Espresso相同的操作通过Espresso实现,并集合在库中。
《Kotlin 反应式编程》使用 RxKotlin 实现一个极简的 http DSL Reactive Programming Using Rx Kotlin https://github.com/ReactiveX.../RxKotlin RxKotlin: RxJava bindings for Kotlin 使用 RxKotlin 实现一个极简的 http DSL ( Reactive Programming Using...Rx Kotlin ) 我们现在已经基本知道 Kotlin 中 DSL 的样子了。...本节工程源码: https://github.com/EasyKotlin/chatper14_kotlin_dsl_http 本章小结 相比于Java,Kotlin对函数式编程的支持更加友好。...Kotlin 的扩展函数和高阶函数(Lambda 表达式),为定义Kotlin DSL提供了核心的特性支持。 使用DSL的代码风格,可以让我们的程序更加直观易懂、简洁优雅。
领取专属 10元无门槛券
手把手带您无忧上云