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

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

第10章 使用 Kotlin 创建 DSL 使用DSL的编程风格,可以让程序更加简单干净、直观简洁。当然,我们也可以创建自己的 DSL。...开发中布局 XML文件的 DSL框架 Anko,它使用基于KotlinDSL 来声明Android UI组件,而不是传统的XML。...(XML 本质上讲也是一种 DSL),明显使用原生的编程语言(例如KotlinDSL 风格更加简单干净,也更加自由灵活。...DSL 有内部 DSL 跟外部 DSL 之分。例如 Gradle、Anko 等都是我们使用通用编程语言(Java 和 Kotlin)创建的内部DSL。...Kotlin 的扩展函数和高阶函数(Lambda 表达式),为定义Kotlin DSL提供了核心的特性支持。 使用DSL的代码风格,可以让我们的程序更加直观易懂、简洁优雅。

1.3K20

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

第14章 使用 Kotlin DSL 非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~ ---- 我们在前面的章节中,已经看到了 Kotlin DSL 的强大功能。...我们可以看出,使用DSL的编程风格,可以让程序更加简单干净、直观简洁。当然,我们也可以创建自己的 DSL。 本章就让我们一起来学习一下 KotlinDSL的相关内容。...(XML 本质上讲也是一种 DSL),明显使用原生的编程语言(例如KotlinDSL 风格更加简单干净,也更加自由灵活。...例如 Gradle、Anko 等都是我们使用通用编程语言(Java 和 Kotlin)创建的内部DSL。...Kotlin 的扩展函数和高阶函数(Lambda 表达式),为定义Kotlin DSL提供了核心的特性支持。 使用DSL的代码风格,可以让我们的程序更加直观易懂、简洁优雅。

2.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin 使用DSL构建语法结构 看这一篇就够了~

前言 DSL并不是单独为Kotlin语言提供的,可能你并知道DSL是什么,但是我敢说,只要你是Android开发者,你就一定使用过并且一直在使用DSL,那么到底什么是DSL?...使用DSL又可以实现怎么样的功能呢?...DSL的基础用法 接下来,我们来看,Kotlin中如何使用DSL构建自己的语法呢,要想装13 我们当然要来实现和上面一样的语法结构,那我们就来造一个吧~ 首先我们新建一个类Dependency,名字是可以随便起的...Anko插件 最后我们来简单的介绍下DSLKotlin中的一个框架Anko,Anko用Kotlin DSL 写的Android插件,Anko主要的作用是替代以前用XML的方式来生成UI布局。...关于Anko插件如何使用,就不讲解了,感兴趣的可直接到Github上了解:https://github.com/Kotlin/anko 写在最后 DSL使用场景远远不止这些,其实前提就是使用好高阶函数

1.5K20

Kotlin 反应式编程》使用 RxKotlin 实现一个极简的 http DSL ( Reactive Programming Using Rx Kotlin )《Kotlin 反应式编程》使用

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 ) 我们现在已经基本知道 KotlinDSL 的样子了。...提示: 更多关于OkHttp 的使用可参考: http://square.github.io/okhttp/ 创建 Kotlin Gradle 项目 我们首先使用 IDEA 创建 Kotlin Gradle...Kotlin 的扩展函数和高阶函数(Lambda 表达式),为定义Kotlin DSL提供了核心的特性支持。 使用DSL的代码风格,可以让我们的程序更加直观易懂、简洁优雅。

1.7K20

从API到DSL —— 使用 Kotlin 特性为爬虫框架进一步封装

NetDiscovery 本身提供了很多功能的 API,然而它的 DSL 模块是为了让使用者拥有更多的选择。 本文讨论的 DSL 是内部 DSL。...NetDiscovery 的 DSL 主要是结合 Kotlin 带接收者的 Lambda、运算符重载、中缀表达式等 Kotlin 语法特性来编写。...Selenium 模块的 DSL 封装 在我之前的文章为爬虫框架构建Selenium模块、DSL模块(Kotlin实现) 中,曾举例使用 NetDiscovery 的 Selenium 模块实现:在京东上搜索我的新书...这里的 DSL 需要封装所使用的浏览器、浏览器驱动地址、各个模拟浏览器动作(Action)等。...总结 爬虫框架github地址:https://github.com/fengzhizi715/NetDiscovery 这里使用DSL 很多情况是对链式调用的进一步封装。

86640

【Android Gradle 插件】ProductFlavor 配置 ( ProductFlavor#externalNativeBuild配置 | cmake 配置 | ndkBuild 配置 )

ProductFlavor 文档 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.ProductFlavor.html...参考文档 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.ProductFlavor.html#com.android.build.gradle.internal.dsl.ProductFlavor...在大多数情况下,您只需要使用NdkOptions指定所需的ABI。abiFilter(),它控制哪些ABIs Gradle构建并打包到APK中。...参考文档 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.ExternalNativeCmakeOptions.html 4...在 ExternalNativeNdkBuildOptions 配置中的 arguments 配置 , 需要与 Android.mk 和 Application.mk 构建脚本 相对应 ; ndk构建设置的每变量参数也可用于

1.6K50

Gradle Kotlin DSL指南

要激活Kotlin DSL,只需使用.gradle.kts扩展为您的构建脚本代替.gradle。这也适用于设置文件(例如settings.gradle.kts)和初始化脚本。...DSL包中的所有类型 避免使用内部Kotlin DSL api 在插件和构建脚本中使用内部Kotlin DSL api可能会在Gradle或插件发生变化时破坏构建。...Kotlin DSL API使用org.gradle.kotlin.dsl包或org.gradle.kotlin.dsl.plugins....多项目构建的另一个需要考虑的问题是,当在根构建脚本中配置子项目或在项目之间使用其他形式的跨配置时,您将无法使用类型安全访问器。我们将在下面几节中更详细地讨论这两个主题。...使用Kotlin DSL脚本相同的设置配置Kotlin编译器,确保构建逻辑和那些脚本之间的一致性。 支持预编译脚本插件。

10.1K20

AndroidStudio 新GradlePlugin和Gradle Version对应关系

Gradle DSL method not found: 'exclude()' Gradle DSL method not found: 'run()' Gradle DSL method not found...Kotlin脚本DSL支持 为了帮助改善Kotlin buildscript用户的编辑体验,Android Gradle plugin 4.1的DSL和api现在被定义在一组Kotlin接口中,与它们的实现类分开...这意味着: 空性和可变性现在在Kotlin类型上显式声明。 从这些接口生成的文档发布在kotlinapi参考中。...下面的示例将Gradle中的Gradle版本设置为 6.1.1-包装器. 属性文件。...[在这里插入图片描述] 如果是使用ecplise的话,识别高版本手机的可看: Android ADT无法识别高版本手机unknown,eclipse日志无法输出等问题 华为小游戏快应用登录问题6004报错集合

1.6K50

Kotlin 之美

比如,本文提到的 Kotlin DSL,我们为 Kotlin DSL 做一个简单的定义: “使用 Kotlin 语言开发的,解决特定领域问题,具备独特代码结构的 API 。”..."otl" 这个 DSL 的代码结构近似于我们日常使用的英语。...实现原理 看了那么多 Kotlin DSL 的风格和使用场景,相较于刻板的、传统的 Java 而言,更加神奇和富有想象力。...在2018年的今天我们依然无法使用或者要花很大的代价才能在 Android 编程中使用,而 Kotlin 则帮助我们解决了这一瓶颈,这也是我们拥抱 Kotlin 的原因之一。...而更进一步, Kotlin DSL 则是对 Kotlin 所有语法糖的一个大融合,她的代码结构通常是链式调用、lambda 嵌套,并且接近于日常使用的英语句子,我们可以愉悦的使用 DSL 风格的 API

2.9K20

DSL In Action

伴随着Kotlin的发展,有一个神奇的框架 anko-layout,一直存在于我们的视野却又一直因为各种原因无法用于生产环境中。...的方式来描述View,而缺点在于无法即时预览,在这方面导致Anko DSL的开发效率不及XML传统方式。...Kotlin DSL本身就是语法糖而已,所以DSL背后就是使用Kotlin代码来自己初始化View,初始化LayoutParams,进行addView之类… 而其实LayoutInflater它本身也只是在做相似的事情而已...XML只能设置paddingLeft/paddingRight,在Anko DSL / 自定义DSL里面就可以很轻易的封装出一个horizontalPadding。...还想说的 Anko DSL让人望而却步的部分就是它不能支持即时预览,所以这个局限性也就导致Anko无法构建大型复杂的页面。

1K20

【榨干 Kotlin】把函数当类用,Compose 风骚的作用域机制

而函数并不具备这样的功能——你想限制某些公开的属性或者函数只能在特定的函数内部才能被使用Kotlin 是没有提供这种功能的,Java 也没有。 那……Compose 是怎么做到的呢?...而你如果针对某种场景,使用 XML 去设计一种专用的格式,那它就是 DSL——比如 SVG,一种矢量图的表达格式,它就是 DSL,因为它是专用于矢量图这个领域的,虽然它本质上也是一种 XML: <svg...另外现在 Gradle 也支持 Kotlin 了,这就是它又添加了使用 Kotlin 来写 Gradle 脚本的支持。...Compose 的 Row() 组件内部可以使用一个叫 align() 的 Modifier 函数,它可以设置 Row() 内部每个组件的纵向对齐规则,比如纵向居中: 而你如果在 Row() 的外面尝试使用它...这一套打法,它只限制了「不能在外部使用」,却没有限制「不能在内部的内部使用」。

24210

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

那么今天一起来说说如何让你的回调更具kotlin风味: 1、Java中的回调实现 2、使用Kotlin来改造Java中的回调 3、进一步让你的回调更具Kotlin风味 4、Object对象表达式回调和DSL...回调对比 5、Kotlin中回调使用建议 6、Don't Repeat Yourself(DSL回调配置太模板化了,不妨来撸个自动生成代码的AS插件吧) 7、DslListenerBuilder插件基本介绍和使用...{ view -> //add your logic code } //针对OnClickListener监听设置Coroutine协程框架中onClick扩展函数的使用 mBtnSubmit.onClick...三、进一步让你的回调更具Kotlin风味(DSL配置回调) 其实如果你看过很多国外大佬的有关Koltin项目的源码,你就会发现他们写回调很少去使用object表达式去实现回调,而是采用另一种方式去实现,...配置更加符合Kotlin风格,所以DSL配置回调更胜一筹 2、使用上对比 使用DSL有个明显优势就是对于不需要监听的回调函数可以直接省略,而对于object表达式是直接实现一个接口回调必须重写,虽然它也能做到任意选择自己需要方法回调

1.6K20

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

,我们无法在运行时访问全局状态。...修改和扩展 DSL 接下来我们需要修改 Android Gradle 插件的 DSL,从而允许我们设置额外 asset 的内容。...您可以很方便地为每个变体的自定义变体属性设置独立的值。 与自定义 DSL 相比,自定义变体属性能提供与其他插件之间更简单、稳健的交互。...set("Hello ${variant.name}") } ) } △ 在 build.gradle 中使用带有自定义变体属性的扩展 虽然这样的写法没有直接扩展 DSL 那样简单,但它可以很方便地为每个变体设置自定义属性的值...如果其他插件也想设置您的自定义变体属性,或者将属性用于它们的构建任务,也只需要使用类似上述 onVariants 代码块的方式。

2.6K30
领券