首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin 之美

理解 DSL DSL(domain specific language),即领域专用语言:专门解决某一特定问题的计算机语言,比如大家耳熟能详的 SQL 和正则表达式。...通用编程语言 vs DSL 通用编程语言(如 Java、Kotlin、Android等),往往提供了全面的库来帮助开发者开发完整的应用程序,而 DSL 只专注于某个领域,比如 SQL 仅支持数据库的相关处理...良好的、优雅的、整洁的、一致的 API 风格是每个优秀开发者的追求,而 DSL 往往具备独特的代码结构和一致的代码风格,从 SQL 和正则表达式的语法风格便可感受一二。...大括号放在最后 Kotlin 的 lambda 有个规约:如果 lambda 表达式是函数的最后一个实参,则可以放在括号外面,并且可以省略括号,如: person.maxBy({ p:Person ->...append(" DSL") println(this) } >>> 输出 Kotlin DSL 总而言之,lambda 在 Kotlin 和 Kotlin DSL 中扮演着很重要的角色,是实现整洁代码的必备语法糖

2.9K20

Gradle Kotlin DSL指南

IDEA中获得Kotlin DSL脚本的内容辅助和重构工具。...DSL包(但不是它们的子包)中相应API文档中列出的类型扩展了Gradle公共API。 类型安全模型访问器 Groovy DSL允许您通过名称引用构建模型的许多元素,即使它们是在运行时定义的。...Artifact configurations 下面的示例演示如何在不使用类型访问器的情况下引用和配置工件配置: apply(plugin = "java-library") dependencies...项目扩展容器中的元素 基于容器的项目扩展(如SourceSetContainer)还允许您配置由它们持有的元素。...使用Gradle插件一章解释了如何在根项目构建脚本中声明一个版本的插件,然后将它们应用到相应子项目的构建脚本中。下面是一个使用三个子项目和三个插件的方法示例。

10.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 属性扩展 )

    DSL ( Domain Specific Language ) 领域特定语言 : 针对某一个特定的领域的语言 , 如 SQL 语言 ; 2 ....DSL 用途 : DSL 用于某个特定领域 , 主要是该领域的专家使用 , 通过简单的编程 , 可以描述该领域中的事物 , 这个简单的编程语言就是 DSL 领域特定语言 ; 如 SQL 是给数据库管理员使用的管理数据库的...Kotlin 中的 DSL : DSL 是 Kotlin 语言的特性之一 , 使用 DSL 可以让函数调用非常接近真实的语言 ; 6 ....Kotlin 中实现 DSL 的原理 : Kotlin 中使用 ① 函数扩展 , ② Lambda 表达式 , ③ infix 中缀表达式 , ④ invoke 约定行为 , 等 Kotlin 特性原理实现...Kotlin 函数扩展 ---- 1 . 函数扩展作用 : Kotlin 中的函数 / 属性 扩展 , 可以为任意定义好的类 , 扩展任意函数或属性 ; 2 .

    53520

    是时候使用Kotlin编程了

    伴生对象的调用跟Java一样,通过类名.属性名称或函数名称调用。 新特性 1,空安全 在Kotlin中,对象声明分为可空引用和非空引用两种。...但是这里要注意一点,如果从Java返回的集合,不会强制做可空检查,这个是时候如果给不可空引用赋值Java集合中的null会出现转换错误异常。...3,字符串模板 字符串中可以包含变量或者表达式,以$符号开头(这跟JSP的EL表达式有点像),比如: 4,操作符重载 Kotlin为基本的运算符提供了固定名称函数表,此部分比较多,关于这方面的内容...DSL 14.1 DSL简介 14.1.1 DSL的设计与实现 14.1.2 DSL分类 14.2 DSL语义模型 14.2.1 依赖网络 14.2.2 产生式规则系统 14.2.3 状态机 14.3...Kotlin的DSL特性 14.4 kotlinx.html创建DSL 14.4.1 Maven方式构建 14.4.2 Gradle方式构建 14.4.3 kotlinx.html实例 14.5 Android

    3.3K10

    如何让你的回调更具Kotlin风味

    那么今天一起来说说如何让你的回调更具kotlin风味: 1、Java中的回调实现 2、使用Kotlin来改造Java中的回调 3、进一步让你的回调更具Kotlin风味 4、Object对象表达式回调和DSL...来改造Java中的回调 针对上述Java中的回调写法,估计大部分人转到Kotlin后,估计会做如下处理: 1、如果接口只有一个回调函数可以直接使用lamba表达式实现回调的简写。...Kotlin中回调,有不少的Kotlin的小伙伴在公众号留言向我吐槽过,感觉这样的写法是直接从Java中的翻译过来的一样,完全看不出Kotlin的优势在哪。...四、DSL配置回调基本步骤 在Kotlin的一个类中实现了DSL配置回调非常简单主要就三步: 1、定义一个回调的Builder类,并且在类中定义回调lamba表达式对象成员,最后再定义Builder类的成员函数...区别就在这里,所以在性能方面object对象表达式这种方式会更优一点,但是通过问过一些Kotlin社区的大佬们他们还是更倾向于DSL配置这种写法。

    1.6K20

    将构建配置从 Groovy 迁移到 KTS

    Kotlin DSL的出现感觉是为了我们量身定做的,因为采用 Kotlin 编写的代码可读性更高,并且 Kotlin 提供了更好的编译时检查和 IDE 支持。...Android构建配置从Groovy迁移KTS 准备工作 Groovy 字符串可以用单引号 'string' 或双引号 "string" 引用,而 Kotlin 需要双引号 "string"。...有两个关键的最佳实践可以更轻松地在 Kotlin DSL 的静态上下文中工作: 使用plugins {}块 将本地构建逻辑放在构建的buildSrc目录中 该plugins {}块是关于保持您的构建脚本声明性...(如 debug 和 release,)是隐式提供的。...,往往会抽取一个version_config.gradle来作为全局的变量控制,而ext扩展函数则是必须要使用到的,而在我们的Gradle Kotlin DSL中,如果想要使用全局控制,则需要建议使用buildSrc

    3.6K00

    将构建配置从 Groovy 迁移到 KTS

    Kotlin DSL的出现感觉是为了我们量身定做的,因为采用 Kotlin 编写的代码可读性更高,并且 Kotlin 提供了更好的编译时检查和 IDE 支持。...Android构建配置从Groovy迁移KTS 准备工作 Groovy 字符串可以用单引号 'string' 或双引号 "string" 引用,而 Kotlin 需要双引号 "string"。...有两个关键的最佳实践可以更轻松地在 Kotlin DSL 的静态上下文中工作: 使用plugins {}块 将本地构建逻辑放在构建的buildSrc目录中 该plugins {}块是关于保持您的构建脚本声明性...(如 debug 和 release,)是隐式提供的。...,往往会抽取一个version_config.gradle来作为全局的变量控制,而ext扩展函数则是必须要使用到的,而在我们的Gradle Kotlin DSL中,如果想要使用全局控制,则需要建议使用buildSrc

    1.7K20

    你应该知道的kotlin实用技巧

    ,直接调用setRoundRectBg即可,简单方便 reified使用 reified,kotlin中的泛型实化关键字,使抽象的东西更加具体或真实。...Gson解析例子 我们首先看下一般我们使用gson解析json是怎么做的 在Java序列化库(如Gson)中,当您想要反序列化该JSON字符串时,您最终必须将Class对象作为参数传递,以便Gson...如果只需要覆盖 remove() 函数来保持对已删除项目的引用,并将 MutableList 的其余空实现委托给其他对象,那该有多好啊。...比如,本文提到的 Kotlin DSL,我们为 Kotlin DSL 做一个简单的定义: “使用 Kotlin 语言开发的,解决特定领域问题,具备独特代码结构的 API 。”...5.定义一个成员函数,参数是一个带有我们定好那个类的接受者对象并且返回Unit的Lambda表达式,在函数里创建相应的对象,并且使用also函数把Lambda表达式传进去。

    1.5K10

    TeamCity VS Jenkins:选择正确的CI CD工具

    它还提供对.Net框架的支持,并且可以集成到IDE(如Visual Studio和Eclipse)中。在撰写本文时,TeamCity的最新版本为2020.1。...云集成的非捆绑插件是Windows Azure中,谷歌云,数字海洋云,和更多。对于对在TeamCity中实现云支持感兴趣的开发人员,有详细的文档。...除社区论坛外,TeamCity还拥有一个活跃的TeamCity博客,该博客中TeamCity团队提供与产品和功能更新有关的信息。...插件生态系统 没有那么丰富的插件生态系统 插件蓬勃发展(目前有近1500多个插件可用) 并行化 是 是(部分) 报告中 是 是 建立管道 是的,允许使用基于Kotlin的DSL(域特定语言)定义管道 是的...,通过Jenkins Pipeline DSL支持自定义管道。

    7.2K20

    你应该知道的kotlin实用技巧

    ,直接调用setRoundRectBg即可,简单方便 reified使用 reified,kotlin中的泛型实化关键字,使抽象的东西更加具体或真实。...Gson解析例子 我们首先看下一般我们使用gson解析json是怎么做的 在Java序列化库(如Gson)中,当您想要反序列化该JSON字符串时,您最终必须将Class对象作为参数传递,以便Gson知道您想要的类型...如果只需要覆盖 remove() 函数来保持对已删除项目的引用,并将 MutableList 的其余空实现委托给其他对象,那该有多好啊。...比如,本文提到的 Kotlin DSL,我们为 Kotlin DSL 做一个简单的定义: “使用 Kotlin 语言开发的,解决特定领域问题,具备独特代码结构的 API 。”...5.定义一个成员函数,参数是一个带有我们定好那个类的接受者对象并且返回Unit的Lambda表达式,在函数里创建相应的对象,并且使用also函数把Lambda表达式传进去。

    1.4K00

    Ktorm - 让你的数据库操作更具 Kotlin 风味

    在上篇文章中,我们介绍了 Ktorm 的基本使用方法。Ktorm 是一个专注于 Kotlin 的 ORM 框架,它提供的 SQL DSL 和序列 API 可以让我们方便地进行数据库操作。...Kotlin 为我们提供了构建内部 DSL 的强大能力,所谓内部 DSL,即使用 Kotlin 语言开发的,解决特定领域问题,具备独特代码结构的 API。...,这个表达式最终会被 SqlFormatter 翻译为 SQL 中的加号。...然而,为了将 Kotlin 中的运算符翻译到 SQL,Ktorm 要求运算符函数必须返回一个 SqlExpression,以记录我们的表达式的语法结构(比如上文中的 plus 函数)。...,不同的仅仅是在 lambda 表达式中的等号 == 和大于号 > 被这里的 eq 和 greater 函数代替了而已。

    1.7K20

    【Kotlin】DSL 领域特定语言 ( apply 标准库函数分析 | 普通匿名函数 | 扩展匿名函数 | 泛型扩展匿名函数 )

    表达式 读取 和 配置 接收者对象 ; "123".apply { println(this) } 上述写法 是 一种 Kotlin 提供的 编程范式 , 该编程范式...暴露 接收者 的 函数特性 , 以便于 使用 Lambda 表达式 读取 和 配置 接收者对象 ; , 借助该编程范式 , 可以写出 DSL 领域特定语言 ; 二、apply 标准库函数分析 ----...| Lambda 表达式 | 闭包 | 内联函数 | 函数引用 ) 博客进行理解 ; 如果泛型扩展函数是 : fun T.apply(block: () -> Unit): T 就很容易理解...函数参数不是泛型扩展函数类型的假设 如果要 在 不使用 泛型扩展函数 的 前提下 , 达到上述 在 Lambda 表达式中 通过 this 调用 接收者 的效果 , 那么就需要使用 普通类型的 匿名扩展函数...; 如 : 要想在 String 类型的 apply 扩展函数 的 闭包参数 中 通过 this 来调用 接收者 , 此时就必须使用 如下形式的 标准库 函数 ; public inline fun

    72010

    Kotlin开发指南

    对比Java语言Kotlin有很多优点,如:空指针安全、支持方法扩展、lamda表达式、高阶函数、函数式编程、kotlin协程(用同步的方式写异步代码)等等。...: 左侧的表达式值不是null, 就会返回表达式的的值,否则, 返回右侧表达式的值。...此外还可以进行属性扩展,原理是一样的。 4、Kotlin DSL 使用anko-layout库,可以用到牛逼的dsl(领域特定语言)功能,布局的另一种代码方式,相对比较简洁,xml的简易替代。...DSL 方式的布局没有运行时的解析的负担 三、成本 1、安装包成本     kotlin复用了java的大部分方法,Kotlin 的标准库只有 7000 个方法,比 support-v4 还要小。...Kotlin和Java的交互性很好,可以说是无缝连接。表现在 Kotlin可以自由的引用Java的代码,反之亦然。

    2.2K40

    干货 | 实现一个属于你的“语言”-携程Kotlin DSL开发与实践

    DSL:在主程序设计语言之外,用一种单独的语言表示领域专有语言。可以是定制语法,或者遵循另外一种语法,如XML、JSON。...内部DSL:通常是基于通用编程语言实现,具有特定的风格,如 iOS 的依赖管理组件 CocoaPods 和 Android 的主流编译工具 Gradle。...这里主要分享在Kotlin中构建使用DSL。 二、应用 Kotlin DSL的应用广泛,包括gradle编写、编写js、html、SQL等。...在Gradle5.0中,官方提供可以选择在项目中生成Groovy或者kotlin DSL构建脚本,并进一步的优化代码自动完成、重构和其他 IDE 辅助功能,为使用Kotlin DSL的 IDE 用户带来了极大的便利...kotlin的扩展函数、高阶函数、lambda表达式、中缀调用、invoke 约定和函数小括号省略等特性,使得Kotlin编写DSL尤为顺畅,我们可以使用这些特性来实现自己的“领域特定语言”。

    1.6K10

    Kotlin学习笔记(三)-程序结构(下 )

    ,如+ plus - minus += plusAssign 只对参数个数有要求,对参数类型,返回类型无要求 表达式(中缀表达式,分支表达式,when表达式) 中缀表达式 方法只有一个参数的时候可以不用对象...比较常用 } } 中缀表达式常用在DSL中,不建议使用,否则降低可读性 分支表达式 if语句: fun main(args: Array) { val mode = if...中时带返回值的 when表达式 功能类似于Java中的switch,也是带有返回值的 fun main(args: Array) { val x = 5 when (x)...但是不用的Java的变长参数只能作为参数的最后一个Kotlin是没要求的,如: Java public void vararg1(String... strings) { }//正确...public void vararg2(String... strings,int i) { }//错误 在Kotlin中因为有具名参数所以是没有要求的 具名参数 具名参数就在传入参数的同时

    67920

    第10章 使用 Kotlin 创建 DSL第10章 使用 Kotlin 创建 DSL

    相对于传统的API, DSL 更加富有表现力、更符合人类语言习惯。 本章就让我们一起来学习一下 Kotlin中 DSL的相关内容。...我们会首先介绍什么是DSL , 然后简单介绍 Kotlin DSL 设计中的特性支持,最后给出了一个http ajax请求的DSL 实现的完整案例。...在Kotlin 中创建 DSL , 一般主要使用下面3个特性: 扩展函数、扩展属性 带接收者的 Lambda 表达式(高阶函数) invoke 函数调用约定 例如上面的示例的 UI {...}...但是在 DSL 中,将会非常有用。这个特性会使得我们的 DSL 代码更加简洁清晰。 10.3 实现一个http ajax请求的DSL 我们现在已经基本知道 Kotlin 中 DSL 的样子了。...Kotlin 的扩展函数和高阶函数(Lambda 表达式),为定义Kotlin DSL提供了核心的特性支持。 使用DSL的代码风格,可以让我们的程序更加直观易懂、简洁优雅。

    1.3K20

    《Kotin 极简教程》第14章 使用 Kotlin DSL第14章 使用 Kotlin DSL《Kotlin极简教程》正式上架:

    第14章 使用 Kotlin DSL 非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~ ---- 我们在前面的章节中,已经看到了 Kotlin DSL 的强大功能。...我们可以看出,使用DSL的编程风格,可以让程序更加简单干净、直观简洁。当然,我们也可以创建自己的 DSL。 本章就让我们一起来学习一下 Kotlin中 DSL的相关内容。...这样,你就能够用短小的对象表达式去组织一个原本很长的表达式,使它读起来更加自然。 外部DSL 外部DSL跟通用编程语言(GPL)类似,但是外部DSL更加专注于特定领域。...在Kotlin 中创建 DSL , 一般主要使用下面两个特性: 扩展函数、扩展属性 带接收者的 Lambda 表达式(高阶函数) 例如上面的示例的 UI {...}...Kotlin 的扩展函数和高阶函数(Lambda 表达式),为定义Kotlin DSL提供了核心的特性支持。 使用DSL的代码风格,可以让我们的程序更加直观易懂、简洁优雅。

    2.1K10

    JetBrains遭美国调查,称其是被大规模黑客攻击的源头?

    作者 | 大东 来源 | 开源中国 据纽约时报报道,IntelliJ IDEA、Kotlin 所属公司 JetBrains 近日被美国安全部门调查,该公司被认为与最近发生的 SolarWinds 黑客攻击事件有某种联系...FireEye 和 Microsoft 的分析指出,这是涉及 SolarWinds Orion 软件的供应链攻击,美国网络安全和基础架构安全局(CISA)发布了紧急指令,指示非军事政府系统停止运行该软件...美方调查认为 SolarWinds 攻击事件来源于 TeamCity 中的漏洞。...Maxim 认为 TeamCity 并不存在严重的安全漏洞,该攻击很有可能是 SolarWinds 方面配置不当造成的。...“需要强调的是,TeamCity 是需要正确配置的复杂产品,如果在此过程中攻击者以某种方式使用了 TeamCity,则很可能是由于配置错误而不是特定漏洞引起的。”

    39310

    使用新 Android Gradle 插件加速您的应用构建

    此时可以使用 Gradle 提供的 project、task 容器、configuration 容器等全局对象来创建包含声明的输入和输出的任务。如上代码中,我们注册了一个任务并进行相应配置。...所以只有先前已经被序列化的状态才会在新实例化的任务执行时被引用,这个阶段也不允许使用对全局状态的引用。...在我们的例子中,这个 HTML 文件会包含图中的内容: △ 配置缓存错误报告 您可以从这些内容中找到各个出错点对应的堆栈跟踪信息。如示例中构建脚本的第 5 和第 11 行导致了这些问题。...我们还需要对 ToyPlugin.kt 作进一步修改,让插件可以获取到我们在 DSL 中为每个变体定义的 asset 内容: // buildSrc/src/main/kotlin/ToyPlugin.kt...另外需要您注意,我们在 beforeVariants 块中获取了自定义 toy DSL 中的值,这个操作其实是安全的。

    2.7K30
    领券