日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Kotlin方法與Lambda表達式實踐使用介紹_Android

作者:Ken' ? 更新時間: 2022-11-05 編程語言

前言

經過前面對 Kotlin 的介紹,相信大家已經能對 Kotlin 有了一個基本的認識。 從這節開始,我就為大家講解 Kotlin的方法以及Lambda表達式等高級操作。

一、Kotlin的方法

1、方法聲明

fun functionLearn(days: Int): Boolean {
 return days > 100
}

成員方法

//成員方法
class Person {
 fun test1() {
 println("成員方法")
 }
}
Person().test1()

類方法

Kotlin 中并沒有 static 關鍵字,不過我們可以借助 companion object 來實現 類方法的目的。

(1)companion object 實現的類方法

class Person {
 companion object {
 fun test2() {
 println("companion object 實現的類方法")
 }
 }
}
Person.test2()

(2)靜態類

如果我們想實現一個工具 util 的話,可以借助 object 來創建一個靜態類:

/**
* 整個靜態類
*/
object NumUtil {
 fun double(num: Int): Int {
 return num * 2
 }
}

(3)全局靜態

我們可以直接新建一個 Kotlin file 然后定義一些常量、方法。

單表達式方法

當方法返回單個表達式時,可以省略花括號并且在 = 符號之后指定代碼體即可:

fun double(x: Int): Int = x * 2

當返回值類型可由編譯器推斷時,顯式聲明返回類型是可選的:

fun double(x: Int) = x * 

2、方法參數

默認參數

方法參數可以有默認值,當省略相應的參數時使用默認值。與其 Java 相比, 這可以減少重載數量:

fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size) { /*……*/ }

我們可以通過類型后面的 = 來設置默認值。

如果一個默認參數在一個無默認值的參數之前,那么該默認值只能通過使用 具名參數調用該方法 來使用:

fun foo(bar: Int = 0, baz: Int) { /*……*/ }
foo(baz = 1) // 使用默認值 bar = 0

如果在默認參數之后的最后一個參數是 lambda 表達式,那么它既可以作為 具名參數在括號內傳 入,也可以在括號外傳入:

fun foo(bar: Int = 0, baz: Int = 1, qux: () -> Unit) { /*……*/ }
foo(1) { println("hello") } // 使用默認值 baz = 1
foo(qux = { println("hello") }) // 使用兩個默認值 bar = 0 與 baz = 1
foo { println("hello") } // 使用兩個默認值 bar = 0 與 baz = 1

可變數量的參數

方法的參數(通常是最后一個)可以用 vararg 修飾符標記:

fun append(vararg str: Char): String {
 val result = StringBuffer()
 for (char in str) {
 result.append(char)
 }
 return result.toString()
}

允許將可變數量的參數傳遞給方法:

append('h', 'e', 'l', 'l', 'o')

可變參數的要求:

? 只有一個參數可以標注為 vararg;

? 如果 vararg 參數不是列表中的最后一個參數, 可以使用具名參數語 法傳遞其后的參數的 值,或者,如果參數具有方法類型,則通過在括 號外部傳一個 lambda。

當我們調用 vararg 方法時,我們可以一個接一個地傳參,例如 append('h', 'e', 'l', 'l', 'o'),或者,如果我們已經有一個數組并希望將其內容傳給該方法, 我們使用伸展(spread)操作符(在數組前面加 *):

val world = charArrayOf('w', 'o', 'r', 'l', 'd')
val result = append('h', 'e', 'l', 'l', 'o',' ', *world)

3、方法作用域

在 Kotlin 中方法可以在文件頂層聲明,這意味著你不需要像一些語言如 Java、C# 那樣需要創建一個類來保存一個方法。 此外除了頂層方法, Kotlin 中方法也可以聲明在局部作用域、作為成員方法以及擴展方法。

局部方法

Kotlin 支持局部方法,即一個方法在另一個方法內部:

fun magic(): Int {
 fun foo(v: Int): Int {
 return v * v
 }
 val v1 = (0..100).random()
 return foo(v1)
}

局部方法可以訪問外部方法(即閉包)的局部變量。

二、Lambda表達式

在 Java 8 的時候開始支持 Lambda 表達式,目前 Lambda 語法在 Java 中已 經被廣泛的運用,Lambda 表達式可以理解為是一種語法糖,值得慶幸的 是,Kotlin 一經開源成熟就已經支持這種語法。

Lambda 表達式的本質其實是匿名方法,因為在其底層實現中還是通過匿名 方法來實現的。但是我們在用的時候不必關心起底層實現。不過 Lambda 的 出現確實是減少了代碼量的編寫,同時也是代碼變得更加簡潔明了。

Lambda 作為方法式編程的基礎,其語法也是相當簡單的。這里先通過一段 簡單的代碼演示沒讓大家了解 Lambda 表達式的簡潔之處:

view.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 Toast.makeText(v.getContext(), "Lambda 簡潔之道",
Toast.LENGTH_LONG).show();
 }
});

VS

view.setOnClickListener { v -> Toast.makeText(v.context, "Lambda 簡潔之道
", Toast.LENGTH_LONG).show() }

1、Lambda表達式的特點

語法如下:

無參數的情況 :

val/var 變量名 = { 操作的代碼 }

有參數的情況:

val/var 變量名 : (參數的類型,參數類型,...) -> 返回值類型 = {參數 1,參數
2,... -> 操作參數的代碼 }

可等價于

// 此種寫法:即表達式的返回值類型會根據操作的代碼自推導出來。
val/var 變量名 = { 參數 1 : 類型,參數 2 : 類型, ... -> 操作參數的代碼 }

lambda 表達式作為方法中的參數的時候,這里舉一個例子:

fun test(a : Int, 參數名 : (參數 1 : 類型,參數 2 : 類型, ... ) -> 表達式返回
類型){
?...
}

2、Lambda實踐

如何使用 it

認識 it

? it 并不是 Kotlin 中的一個關鍵字(保留字)

? it 是在當一個高階方法中 Lambda 表達式的參數只有一個的時候可以使用 it 來使 用此參數

? it 可表示為單個參數的隱式名稱,是 Kotlin 語言約定的

? 實例 A:單個參數的隱式名稱

// 這里舉例一個語言自帶的一個高階方法 filter,此方法的作用是過濾掉不滿足條
件的值。
val arr = arrayOf(1,3,5,7,9)
// 過濾掉數組中元素小于 2 的元素,取其第一個打印。這里的 it 就表示每一個元
素。
println(arr.filter { it < 5 }.component1())
//結合上文的
testClosure(1)(2) {
println(it)
}

如何使用下劃線_

在使用 Lambda 表達式的時候,可以用下劃線(_)表示未使用的參數,表示不 處理這個參數。

在遍歷一個 Map 集合的時候,這當非常有用

val map = mapOf("key1" to "value1", "key2" to "value2", "key3" to
"value3")
map.forEach { (key, value) ->
 println("$key \t $value")
}
// 不需要 key 的時候
map.forEach { (_, value) ->
 println(value)
}

總結

本文僅僅簡單介紹了pandas的使用,而pandas提供了大量能使我們快速便捷地處理數據的函數和方法。

原文鏈接:https://blog.csdn.net/m0_58941767/article/details/126806222

欄目分類
最近更新