国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

切底掌握Android中的Kotlin DSL

這篇具有很好參考價(jià)值的文章主要介紹了切底掌握Android中的Kotlin DSL。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

切底掌握Android中的Kotlin DSL,Android,kotlin,android,開(kāi)發(fā)語(yǔ)言,DSL

前言

在這篇文章中,我們將學(xué)習(xí)如何在您的 Android 項(xiàng)目中編寫(xiě) Kotlin DSL。

這個(gè)文章會(huì)很長(zhǎng),所以花點(diǎn)時(shí)間,讓我們一起來(lái)寫(xiě)你的 DSL。我們將討論以下主題,

  • 什么是簡(jiǎn)單英語(yǔ)中的 DSL?
  • 您使用任何 DSL 嗎?
  • 為什么我們使用 DSL?
  • 我們?nèi)绾尉帉?xiě)自己的 DSL
  • 基本示例說(shuō)明。

那么讓我們開(kāi)始吧。

什么是 DSL?

維基百科的定義說(shuō),

領(lǐng)域特定語(yǔ)言( DSL) 是專(zhuān)門(mén)針對(duì)特定應(yīng)用領(lǐng)域的計(jì)算機(jī)語(yǔ)言。這與廣泛適用于跨領(lǐng)域的通用語(yǔ)言(GPL)形成對(duì)比。

喜歡認(rèn)真嗎?

一般而言,DSL 為您提供了任何特定語(yǔ)言的靈活工具,以利用特定編程語(yǔ)言提供的功能。

您使用任何 DSL 嗎?

如果您是一名 android 開(kāi)發(fā)人員并且在您的項(xiàng)目中使用 kotlin,您可能會(huì)有意或無(wú)意地在您的項(xiàng)目中使用 DSL?你能想出一個(gè)例子嗎?

讓我?guī)湍?,你有沒(méi)有寫(xiě)過(guò)類(lèi)似的代碼,

yourlist.forEach { 
    //your code is here
}

上面的例子是在 Kotlin 的列表中使用forEach。forEach is kotlin 是 DSL 的一個(gè)例子

為什么我們使用 DSL?

我們應(yīng)該使用 DSL 來(lái)簡(jiǎn)化和提高應(yīng)用程序的復(fù)雜性,并使代碼更具可讀性。

我們?nèi)绾尉帉?xiě)自己的 DSL?

在開(kāi)始編寫(xiě)我們自己的 DSL 之前,我們需要了解帶有接收器的 lambda。
但也讓我簡(jiǎn)要概述一下 lambda with receiver

假設(shè)我們有一個(gè)函數(shù) buildString,

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

在這里,我們有一個(gè)函數(shù)buildString,它將動(dòng)作(它是一個(gè)函數(shù))作為參數(shù)。此處的action函數(shù)以StringBuilder作為參數(shù),函數(shù)buildString以 String 作為返回類(lèi)型。

現(xiàn)在,要使用我們編寫(xiě)的buildString ,

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

我們?cè)谶@里使用 Kotlin 的屬性來(lái)傳遞與 StringBuilder 相關(guān)的屬性,因?yàn)槲覀冊(cè)?strong>buildString函數(shù)中使用了擴(kuò)展函數(shù)的強(qiáng)大功能。

我們還可以使用創(chuàng)建自定義 DSL,

中綴

在 Kotlin 中,中綴幫助我們創(chuàng)建自定義 DSL,類(lèi)似于我們用英語(yǔ)編寫(xiě)的方式。例如,

在英語(yǔ)中,我們說(shuō)“1加2”來(lái)求和或求差,我們說(shuō)“1減2”。使用中綴調(diào)用可以在 Kotin 中實(shí)現(xiàn)類(lèi)似的事情。

為了創(chuàng)建一個(gè)中綴來(lái)添加我們使用的數(shù)字,

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

在這里,我們創(chuàng)建了一個(gè) Int 的擴(kuò)展函數(shù),加上它接受一個(gè)數(shù)字并返回這個(gè) + 數(shù)字的總和。這是應(yīng)用函數(shù)的數(shù)字。

所以,要使用我們使用的這個(gè)中綴函數(shù),

val output = 1 plus 2

在上面的代碼中,我們使用我們創(chuàng)建加號(hào)的中綴函數(shù)來(lái)生成輸出。當(dāng)我們?cè)?Logcat 中打印它時(shí),它會(huì)打印3作為總和。

這是因?yàn)槲覀儎?chuàng)建了一個(gè)中綴擴(kuò)展函數(shù)來(lái)使用加號(hào)文本代替“ + ”,我們將其用作傳統(tǒng)方式。

同樣,如果我們想讓中綴函數(shù)減號(hào),我們使用

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

為了使用它,我們使用,

val output = 1 minus 2

中綴使代碼具有可讀性并且非常有序,任何人都可以閱讀。因此,如果任何對(duì)編程一無(wú)所知的人也可以說(shuō)這是對(duì)兩個(gè)數(shù)字進(jìn)行加法或減法。

調(diào)用

在調(diào)用中,運(yùn)算符允許將任何對(duì)象作為函數(shù)調(diào)用。在這里,讓我們創(chuàng)建一個(gè)名為Student的類(lèi),

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

在類(lèi)中,我們創(chuàng)建了一個(gè)函數(shù)調(diào)用,它接受一個(gè)學(xué)生類(lèi)型的參數(shù)并返回學(xué)生本身。所以,這里我們可以在student本身的對(duì)象中使用Student類(lèi)的所有方法。

現(xiàn)在,要使用 Class,我們?nèi)匀粫?huì)像在 Kotlin 中一樣創(chuàng)建對(duì)象,

val student = Student()

現(xiàn)在你可以看到我們有另一個(gè)函數(shù)叫做addName addMarks**我們將把它用作 DSL。但是,在這里我們可以以?xún)煞N不同的方式使用它。兩者如下,

  1. 類(lèi)型 - 1(傳統(tǒng)方式)
student.addName("MindOrks")
student.addMarks(100)

上面的代碼就像我們以前在 Android 中做的舊的傳統(tǒng)方式。2.DSL方式

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

在這里,我們使用 Kotlin DSL。如果你注意到了,我們有類(lèi)似的 lambda,

Student.() -> Unit

如果你注意到了,我們?cè)谀抢镉幸粋€(gè).()。它指定 lambda 有一個(gè)接收器,要使用它,我們需要?jiǎng)?chuàng)建一個(gè)類(lèi)的構(gòu)造。這就是您可以使用調(diào)用來(lái)創(chuàng)建 DSL 的方式。

通過(guò)以上方式,您可以在 Kotlin 中創(chuàng)建您贏得的 DSL。

現(xiàn)在,讓我們討論 Android 中 DSL 的用例和示例。

  1. 數(shù)據(jù)類(lèi)

在此,讓我們討論如何創(chuàng)建數(shù)據(jù)類(lèi)的 DSL??紤]我們有一個(gè)數(shù)據(jù)類(lèi) Student

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

在此,如果我們使用我們編寫(xiě)的數(shù)據(jù)類(lèi),

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

現(xiàn)在要在 DSL 中轉(zhuǎn)換上述代碼,

現(xiàn)在我們將創(chuàng)建一個(gè)新的 lambda,如下所示,

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

在上面的代碼中,

我們有一個(gè)接收器,參數(shù)為 student 并將其用作我們使用的 DSL,

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

這就是我們可以將數(shù)據(jù)類(lèi)轉(zhuǎn)換為 DSL 的方法。

  1. UI 元素

為此,讓我們將 textView 視為 UI 元素。在那,我們使用如下,

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

但是要通過(guò)我們使用的 DSL 使用它,

textView.apply {
    text = "MindOrks"
    setOnClickListener {

    }
    textColor(Color.BLACK)
}

我們使用apply在任何 UI元素中創(chuàng)建 DSL。

  1. JSON

在我們使用的 Android 中創(chuàng)建 JSON,

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

這是創(chuàng)建 JSON 對(duì)象的傳統(tǒng)方式。

現(xiàn)在,讓我們看看如何創(chuàng)建 DSL 來(lái)創(chuàng)建 JSON。首先,我們將創(chuàng)建一個(gè)類(lèi)并使用 JSONObject() 對(duì)其進(jìn)行擴(kuò)展,

class Json() : JSONObject() {

}

現(xiàn)在,我們將使用帶有接收器的 lambda 構(gòu)造函數(shù)

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

將使用中綴創(chuàng)建一個(gè)泛型來(lái)向 JSON 對(duì)象添加值。

看起來(lái)像,

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

在這里,它將使用字符串鍵放置值,而值將使用“ to”的類(lèi)型。

現(xiàn)在,完整的類(lèi)文件看起來(lái)像,

class Json() : JSONObject() {

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

    infix fun <T> String.to(value: T) {
        put(this, value)
    }
}
為了在 Activity 文件中使用它,我們使用剛剛創(chuàng)建的 DSL 創(chuàng)建 JSON,

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

這里,

  • to是我們?yōu)閷⒅捣湃?JSON 對(duì)象而創(chuàng)建的中綴。
  • JSON 是我們創(chuàng)建的類(lèi),它使用鍵和值來(lái)創(chuàng)建 JSON 對(duì)象。

當(dāng)我們?cè)?Logcat 中打印它時(shí),我們得到以下輸出,

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

這就是您可以在 kotlin 代碼中創(chuàng)建 DSL 的方式。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-684808.html

到了這里,關(guān)于切底掌握Android中的Kotlin DSL的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android開(kāi)發(fā)知識(shí)學(xué)習(xí)——Kotlin進(jìn)階

    Android開(kāi)發(fā)知識(shí)學(xué)習(xí)——Kotlin進(jìn)階

    申明前綴有construct修飾 如果有一個(gè)主構(gòu)造函數(shù),每個(gè)次構(gòu)造函數(shù)需要委托給主構(gòu)造函數(shù),可以直接委托或者通過(guò)別的構(gòu)造函數(shù) 主構(gòu)造函數(shù):是類(lèi)頭的一部分,跟在類(lèi)名后面(可帶參數(shù)),沒(méi)有任何注解和可見(jiàn)性修飾符。如: 主構(gòu)造函數(shù)中沒(méi)有任何代碼,初始化代碼放在關(guān)鍵

    2024年02月06日
    瀏覽(93)
  • Kotlin開(kāi)發(fā)Android之基礎(chǔ)問(wèn)題記錄

    1、Kotlin中如何直接通過(guò)組件id來(lái)操作組件? 解決方案:在build.gradle中添加對(duì)相應(yīng)插件的使用即可。 2、Kotlin中Button設(shè)置背景顏色沒(méi)有效果。 解決方案:在res-values-themes.xml文件中修改如下代碼: 3、Kotlin中如何使用靜態(tài)類(lèi)或者靜態(tài)方法? 解決方案: 4、Kotlin中EditText的賦值問(wèn)題

    2024年02月09日
    瀏覽(91)
  • 擁抱創(chuàng)新:用Kotlin開(kāi)發(fā)高效Android應(yīng)用

    擁抱創(chuàng)新:用Kotlin開(kāi)發(fā)高效Android應(yīng)用

    在當(dāng)今數(shù)字時(shí)代,移動(dòng)應(yīng)用已經(jīng)成為人們生活中不可或缺的一部分。無(wú)論是社交媒體、電子商務(wù)還是健康管理,移動(dòng)應(yīng)用已經(jīng)深刻地影響了我們的生活方式。隨著移動(dòng)設(shè)備的普及和功能的增強(qiáng),Android平臺(tái)作為最大的移動(dòng)操作系統(tǒng)之一,扮演著舉足輕重的角色。然而,隨著用戶(hù)

    2024年02月14日
    瀏覽(95)
  • Android開(kāi)發(fā):kotlin語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易計(jì)算器

    Android開(kāi)發(fā):kotlin語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易計(jì)算器

    輸入兩個(gè)數(shù)字,可選加減乘除操作符,并計(jì)算顯示對(duì)應(yīng)結(jié)果 隨系統(tǒng)切換語(yǔ)言 可對(duì)結(jié)果進(jìn)行四舍五入操作 界面布局:activity_main.xml文件代碼 字符定義:string.xml文件代碼 邏輯實(shí)現(xiàn):MainActivity.kt 文件代碼 方法一(偷懶): 復(fù)制文件到對(duì)應(yīng)位置 方法二: 1. 繪制界面 2. 編寫(xiě)邏輯

    2023年04月08日
    瀏覽(28)
  • Android開(kāi)發(fā)中,JDK版本,Gradle版本,Kotlin插件與Kotlin版本等各自對(duì)應(yīng)關(guān)系

    Android開(kāi)發(fā)中,JDK版本,Gradle版本,Kotlin插件與Kotlin版本等各自對(duì)應(yīng)關(guān)系

    一、Gradle版本和Java版本對(duì)應(yīng)關(guān)系 二、Gradle版本和Kotlin版本對(duì)應(yīng)關(guān)系 三、Gradle版本和Gradle插件版本匹配關(guān)系 可以在Android Studio的?File Project Structure Project 菜單中指定插件版本,也可以在頂級(jí) build.gradle 文件中進(jìn)行修改

    2024年03月15日
    瀏覽(30)
  • Android開(kāi)發(fā):基于Kotlin編寫(xiě)一個(gè)簡(jiǎn)易計(jì)算器

    Android開(kāi)發(fā):基于Kotlin編寫(xiě)一個(gè)簡(jiǎn)易計(jì)算器

    本著程序員“擁抱變化”的思想,最近開(kāi)始學(xué)Kotlin了。感覺(jué)還是得通過(guò)實(shí)戰(zhàn)來(lái)入門(mén)一門(mén)新語(yǔ)言,所以打算寫(xiě)一個(gè)基于Kotlin語(yǔ)言的計(jì)算器,本文對(duì)開(kāi)發(fā)過(guò)程以及學(xué)習(xí)Kotlin的一些知識(shí)進(jìn)行了記錄。 計(jì)算器的全部源碼已經(jīng)放到了我的Github中,需要的伙伴自?。篊alculator Kotlin中文站:

    2023年04月27日
    瀏覽(25)
  • Android java項(xiàng)目添加kotlin混合開(kāi)發(fā)環(huán)境配置

    Android Studio java代碼中添加kotlin混合開(kāi)發(fā) 1.項(xiàng)目的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日
    瀏覽(24)
  • Android 安卓開(kāi)發(fā)語(yǔ)言kotlin與Java該如何選擇

    Android 安卓開(kāi)發(fā)語(yǔ)言kotlin與Java該如何選擇

    ????????如今在Android開(kāi)發(fā)中,應(yīng)用層開(kāi)發(fā)語(yǔ)言主要是Java和Kotlin,Kotlin是后來(lái)加入的,主導(dǎo)的語(yǔ)言還是Java。kotlin的加入仿佛讓會(huì)kotlin語(yǔ)言的開(kāi)發(fā)者更屌一些,其實(shí)不然。 ????????有人說(shuō)kotlin的引入是解決開(kāi)發(fā)者復(fù)雜的邏輯,并且對(duì)空指針控制的比較友好,但是我們?cè)陂_(kāi)

    2024年02月11日
    瀏覽(94)
  • 10個(gè)用于Android開(kāi)發(fā)的有用的Kotlin庫(kù)及示例

    10個(gè)用于Android開(kāi)發(fā)的有用的Kotlin庫(kù)及示例

    在Android開(kāi)發(fā)領(lǐng)域,Kotlin已成為一門(mén)領(lǐng)先的語(yǔ)言,帶來(lái)了現(xiàn)代語(yǔ)法和功能的浪潮。隨著Kotlin的崛起,涌現(xiàn)出了許多專(zhuān)為其定制的庫(kù),進(jìn)一步增強(qiáng)了開(kāi)發(fā)體驗(yàn)。本文將深入介紹其中的10個(gè)庫(kù),并為每個(gè)庫(kù)提供簡(jiǎn)要概述和實(shí)際示例。 一個(gè)用于異步編程的Kotlin原生方法。 示例: 一個(gè)

    2024年01月18日
    瀏覽(21)
  • 顛覆Android開(kāi)發(fā)行業(yè)未來(lái),讓Kotlin成為您的新寵

    顛覆Android開(kāi)發(fā)行業(yè)未來(lái),讓Kotlin成為您的新寵

    看看這位老哥的回答: kotlin語(yǔ)言有前景嗎? 看看在職高級(jí)開(kāi)發(fā)怎么說(shuō)的: Kotlin是一種基于Java虛擬機(jī)(JVM)的靜態(tài)類(lèi)型編程語(yǔ)言,可以與Java代碼互相調(diào)用、混合使用。Kotlin受到了許多現(xiàn)代編程語(yǔ)言的影響,如Swift、Scala、Groovy和C#,它被認(rèn)為是一種功能強(qiáng)大、直觀易用、安全

    2024年02月02日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包