切底掌握Android中的Kotlin DSL

这篇具有很好参考价值的文章主要介绍了切底掌握Android中的Kotlin DSL。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

切底掌握Android中的Kotlin DSL,Android,kotlin,android,开发语言,DSL

前言

在这篇文章中,我们将学习如何在您的 Android 项目中编写 Kotlin DSL。

这个文章会很长,所以花点时间,让我们一起来写你的 DSL。我们将讨论以下主题,

  • 什么是简单英语中的 DSL?
  • 您使用任何 DSL 吗?
  • 为什么我们使用 DSL?
  • 我们如何编写自己的 DSL
  • 基本示例说明。

那么让我们开始吧。

什么是 DSL?

维基百科的定义说,

领域特定语言( DSL) 是专门针对特定应用领域的计算机语言。这与广泛适用于跨领域的通用语言(GPL)形成对比。

喜欢认真吗?

一般而言,DSL 为您提供了任何特定语言的灵活工具,以利用特定编程语言提供的功能。

您使用任何 DSL 吗?

如果您是一名 android 开发人员并且在您的项目中使用 kotlin,您可能会有意或无意地在您的项目中使用 DSL?你能想出一个例子吗?

让我帮你,你有没有写过类似的代码,

yourlist.forEach { 
    //your code is here
}

上面的例子是在 Kotlin 的列表中使用forEach。forEach is kotlin 是 DSL 的一个例子

为什么我们使用 DSL?

我们应该使用 DSL 来简化和提高应用程序的复杂性,并使代码更具可读性。

我们如何编写自己的 DSL?

在开始编写我们自己的 DSL 之前,我们需要了解带有接收器的 lambda。
但也让我简要概述一下 lambda with receiver

假设我们有一个函数 buildString,

fun buildString(action: (StringBuilder).() -> Unit): String {
    val stringBuilder = StringBuilder()
    action(stringBuilder)
    return stringBuilder.toString()
}

在这里,我们有一个函数buildString,它将动作(它是一个函数)作为参数。此处的action函数以StringBuilder作为参数,函数buildString以 String 作为返回类型。

现在,要使用我们编写的buildString ,

buildString {
    append("<")
    append("MindOrks")
    append(">")
}

我们在这里使用 Kotlin 的属性来传递与 StringBuilder 相关的属性,因为我们在buildString函数中使用了扩展函数的强大功能。

我们还可以使用创建自定义 DSL,

中缀

在 Kotlin 中,中缀帮助我们创建自定义 DSL,类似于我们用英语编写的方式。例如,

在英语中,我们说“1加2”来求和或求差,我们说“1减2”。使用中缀调用可以在 Kotin 中实现类似的事情。

为了创建一个中缀来添加我们使用的数字,

infix fun Int.plus(number: Int) = this + number

在这里,我们创建了一个 Int 的扩展函数,加上它接受一个数字并返回这个 + 数字的总和。这是应用函数的数字。

所以,要使用我们使用的这个中缀函数,

val output = 1 plus 2

在上面的代码中,我们使用我们创建加号的中缀函数来生成输出。当我们在 Logcat 中打印它时,它会打印3作为总和。

这是因为我们创建了一个中缀扩展函数来使用加号文本代替“ + ”,我们将其用作传统方式。

同样,如果我们想让中缀函数减号,我们使用

infix fun Int.minus(number: Int) = this - number

为了使用它,我们使用,

val output = 1 minus 2

中缀使代码具有可读性并且非常有序,任何人都可以阅读。因此,如果任何对编程一无所知的人也可以说这是对两个数字进行加法或减法。

调用

在调用中,运算符允许将任何对象作为函数调用。在这里,让我们创建一个名为Student的类,

class Student {
    operator fun invoke(student: Student.() -> Unit) = student
    fun addName(name: String) {
        //implementation
    }
    fun addMarks(marks: Int) {
        //implementation
    }
}

在类中,我们创建了一个函数调用,它接受一个学生类型的参数并返回学生本身。所以,这里我们可以在student本身的对象中使用Student类的所有方法。

现在,要使用 Class,我们仍然会像在 Kotlin 中一样创建对象,

val student = Student()

现在你可以看到我们有另一个函数叫做addName addMarks**我们将把它用作 DSL。但是,在这里我们可以以两种不同的方式使用它。两者如下,

  1. 类型 - 1(传统方式)
student.addName("MindOrks")
student.addMarks(100)

上面的代码就像我们以前在 Android 中做的旧的传统方式。2.DSL方式

student {
    addName("MindOrks")
    addMarks(100)
}

在这里,我们使用 Kotlin DSL。如果你注意到了,我们有类似的 lambda,

Student.() -> Unit

如果你注意到了,我们在那里有一个.()。它指定 lambda 有一个接收器,要使用它,我们需要创建一个类的构造。这就是您可以使用调用来创建 DSL 的方式。

通过以上方式,您可以在 Kotlin 中创建您赢得的 DSL。

现在,让我们讨论 Android 中 DSL 的用例和示例。

  1. 数据类

在此,让我们讨论如何创建数据类的 DSL。考虑我们有一个数据类 Student

data class Student(
    var name: String? = null,
    var age: Int? = null,
    var marks: Int? = null
)

在此,如果我们使用我们编写的数据类,

val student =  Student(
      "MindOrks",
      20,
      30
  )

现在要在 DSL 中转换上述代码,

现在我们将创建一个新的 lambda,如下所示,

fun student(student: Student.() -> Unit): Student = Student().apply(student)

在上面的代码中,

我们有一个接收器,参数为 student 并将其用作我们使用的 DSL,

val student = student {
    name = "MindOrks"
    age = 20
    marks = 30
}

这就是我们可以将数据类转换为 DSL 的方法。

  1. UI 元素

为此,让我们将 textView 视为 UI 元素。在那,我们使用如下,

textView.text = "MindOrks"
textView.setOnClickListener {  
    
} 
textView.setTextColor(Color.BLACK)

但是要通过我们使用的 DSL 使用它,

textView.apply {
    text = "MindOrks"
    setOnClickListener {

    }
    textColor(Color.BLACK)
}

我们使用apply在任何 UI元素中创建 DSL

  1. JSON

在我们使用的 Android 中创建 JSON,

val jsonObject = JSONObject()
jsonObject.put("name","MindOrks")
jsonObject.put("age",20)

这是创建 JSON 对象的传统方式。

现在,让我们看看如何创建 DSL 来创建 JSON。首先,我们将创建一个类并使用 JSONObject() 对其进行扩展,

class Json() : JSONObject() {

}

现在,我们将使用带有接收器的 lambda 构造函数

constructor(json: Json.() -> Unit) : this() {
    this.init()
}

将使用中缀创建一个泛型来向 JSON 对象添加值。

看起来像,

infix fun <T> String.to(value: T) {
    put(this, value)
}

在这里,它将使用字符串键放置值,而值将使用“ to”的类型。

现在,完整的类文件看起来像,

class Json() : JSONObject() {

    constructor(json: Json.() -> Unit) : this() {
        this.json()
    }

    infix fun <T> String.to(value: T) {
        put(this, value)
    }
}
为了在 Activity 文件中使用它,我们使用刚刚创建的 DSL 创建 JSON,

val json = Json {
    "name" to "MindOrks"
    "age" to 20
}

这里,

  • to是我们为将值放入 JSON 对象而创建的中缀。
  • JSON 是我们创建的类,它使用键和值来创建 JSON 对象。

当我们在 Logcat 中打印它时,我们得到以下输出,

{"name":"MindOrks","age":20}

这就是您可以在 kotlin 代码中创建 DSL 的方式。文章来源地址https://www.toymoban.com/news/detail-684808.html

到了这里,关于切底掌握Android中的Kotlin DSL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kotlin开发Android之基础问题记录

    1、Kotlin中如何直接通过组件id来操作组件? 解决方案:在build.gradle中添加对相应插件的使用即可。 2、Kotlin中Button设置背景颜色没有效果。 解决方案:在res-values-themes.xml文件中修改如下代码: 3、Kotlin中如何使用静态类或者静态方法? 解决方案: 4、Kotlin中EditText的赋值问题

    2024年02月09日
    浏览(27)
  • Android开发知识学习——Kotlin进阶

    申明前缀有construct修饰 如果有一个主构造函数,每个次构造函数需要委托给主构造函数,可以直接委托或者通过别的构造函数 主构造函数:是类头的一部分,跟在类名后面(可带参数),没有任何注解和可见性修饰符。如: 主构造函数中没有任何代码,初始化代码放在关键

    2024年02月06日
    浏览(38)
  • 拥抱创新:用Kotlin开发高效Android应用

    在当今数字时代,移动应用已经成为人们生活中不可或缺的一部分。无论是社交媒体、电子商务还是健康管理,移动应用已经深刻地影响了我们的生活方式。随着移动设备的普及和功能的增强,Android平台作为最大的移动操作系统之一,扮演着举足轻重的角色。然而,随着用户

    2024年02月14日
    浏览(28)
  • Android开发:kotlin语言实现简易计算器

    输入两个数字,可选加减乘除操作符,并计算显示对应结果 随系统切换语言 可对结果进行四舍五入操作 界面布局:activity_main.xml文件代码 字符定义:string.xml文件代码 逻辑实现:MainActivity.kt 文件代码 方法一(偷懒): 复制文件到对应位置 方法二: 1. 绘制界面 2. 编写逻辑

    2023年04月08日
    浏览(29)
  • Android开发中,JDK版本,Gradle版本,Kotlin插件与Kotlin版本等各自对应关系

    一、Gradle版本和Java版本对应关系 二、Gradle版本和Kotlin版本对应关系 三、Gradle版本和Gradle插件版本匹配关系 可以在Android Studio的 File Project Structure Project 菜单中指定插件版本,也可以在顶级 build.gradle 文件中进行修改

    2024年03月15日
    浏览(48)
  • Android开发:基于Kotlin编写一个简易计算器

    本着程序员“拥抱变化”的思想,最近开始学Kotlin了。感觉还是得通过实战来入门一门新语言,所以打算写一个基于Kotlin语言的计算器,本文对开发过程以及学习Kotlin的一些知识进行了记录。 计算器的全部源码已经放到了我的Github中,需要的伙伴自取:Calculator Kotlin中文站:

    2023年04月27日
    浏览(42)
  • Android java项目添加kotlin混合开发环境配置

    Android Studio java代码中添加kotlin混合开发 1.项目的build.gradle中添加kotlin-gradle-plugin buildscript {     repositories {         google()         jcenter()              }     dependencies {         classpath \\\'com.android.tools.build:gradle:7.3.1\\\'         classpath \\\"org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20\\\"

    2023年04月19日
    浏览(36)
  • Android 安卓开发语言kotlin与Java该如何选择

            如今在Android开发中,应用层开发语言主要是Java和Kotlin,Kotlin是后来加入的,主导的语言还是Java。kotlin的加入仿佛让会kotlin语言的开发者更屌一些,其实不然。         有人说kotlin的引入是解决开发者复杂的逻辑,并且对空指针控制的比较友好,但是我们在开

    2024年02月11日
    浏览(31)
  • 10个用于Android开发的有用的Kotlin库及示例

    在Android开发领域,Kotlin已成为一门领先的语言,带来了现代语法和功能的浪潮。随着Kotlin的崛起,涌现出了许多专为其定制的库,进一步增强了开发体验。本文将深入介绍其中的10个库,并为每个库提供简要概述和实际示例。 一个用于异步编程的Kotlin原生方法。 示例: 一个

    2024年01月18日
    浏览(25)
  • 颠覆Android开发行业未来,让Kotlin成为您的新宠

    看看这位老哥的回答: kotlin语言有前景吗? 看看在职高级开发怎么说的: Kotlin是一种基于Java虚拟机(JVM)的静态类型编程语言,可以与Java代码互相调用、混合使用。Kotlin受到了许多现代编程语言的影响,如Swift、Scala、Groovy和C#,它被认为是一种功能强大、直观易用、安全

    2024年02月02日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包