網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言
經(jīng)過(guò)前面對(duì) Kotlin 的介紹,相信大家已經(jīng)能對(duì) Kotlin 有了一個(gè)基本的認(rèn)識(shí)。 從這節(jié)開始,我就為大家講解 Kotlin的方法以及Lambda表達(dá)式等高級(jí)操作。
一、Kotlin的方法
1、方法聲明
fun functionLearn(days: Int): Boolean {
return days > 100
}
成員方法
//成員方法
class Person {
fun test1() {
println("成員方法")
}
}
Person().test1()
類方法
Kotlin 中并沒有 static 關(guān)鍵字,不過(guò)我們可以借助 companion object 來(lái)實(shí)現(xiàn) 類方法的目的。
(1)companion object 實(shí)現(xiàn)的類方法
class Person {
companion object {
fun test2() {
println("companion object 實(shí)現(xiàn)的類方法")
}
}
}
Person.test2()
(2)靜態(tài)類
如果我們想實(shí)現(xiàn)一個(gè)工具 util 的話,可以借助 object 來(lái)創(chuàng)建一個(gè)靜態(tài)類:
/**
* 整個(gè)靜態(tài)類
*/
object NumUtil {
fun double(num: Int): Int {
return num * 2
}
}
(3)全局靜態(tài)
我們可以直接新建一個(gè) Kotlin file 然后定義一些常量、方法。
單表達(dá)式方法
當(dāng)方法返回單個(gè)表達(dá)式時(shí),可以省略花括號(hào)并且在 = 符號(hào)之后指定代碼體即可:
fun double(x: Int): Int = x * 2
當(dāng)返回值類型可由編譯器推斷時(shí),顯式聲明返回類型是可選的:
fun double(x: Int) = x *
2、方法參數(shù)
默認(rèn)參數(shù)
方法參數(shù)可以有默認(rèn)值,當(dāng)省略相應(yīng)的參數(shù)時(shí)使用默認(rèn)值。與其 Java 相比, 這可以減少重載數(shù)量:
fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size) { /*……*/ }
我們可以通過(guò)類型后面的 = 來(lái)設(shè)置默認(rèn)值。
如果一個(gè)默認(rèn)參數(shù)在一個(gè)無(wú)默認(rèn)值的參數(shù)之前,那么該默認(rèn)值只能通過(guò)使用 具名參數(shù)調(diào)用該方法 來(lái)使用:
fun foo(bar: Int = 0, baz: Int) { /*……*/ }
foo(baz = 1) // 使用默認(rèn)值 bar = 0
如果在默認(rèn)參數(shù)之后的最后一個(gè)參數(shù)是 lambda 表達(dá)式,那么它既可以作為 具名參數(shù)在括號(hào)內(nèi)傳 入,也可以在括號(hào)外傳入:
fun foo(bar: Int = 0, baz: Int = 1, qux: () -> Unit) { /*……*/ }
foo(1) { println("hello") } // 使用默認(rèn)值 baz = 1
foo(qux = { println("hello") }) // 使用兩個(gè)默認(rèn)值 bar = 0 與 baz = 1
foo { println("hello") } // 使用兩個(gè)默認(rèn)值 bar = 0 與 baz = 1
可變數(shù)量的參數(shù)
方法的參數(shù)(通常是最后一個(gè))可以用 vararg 修飾符標(biāo)記:
fun append(vararg str: Char): String {
val result = StringBuffer()
for (char in str) {
result.append(char)
}
return result.toString()
}
允許將可變數(shù)量的參數(shù)傳遞給方法:
append('h', 'e', 'l', 'l', 'o')
可變參數(shù)的要求:
? 只有一個(gè)參數(shù)可以標(biāo)注為 vararg;
? 如果 vararg 參數(shù)不是列表中的最后一個(gè)參數(shù), 可以使用具名參數(shù)語(yǔ) 法傳遞其后的參數(shù)的 值,或者,如果參數(shù)具有方法類型,則通過(guò)在括 號(hào)外部傳一個(gè) lambda。
當(dāng)我們調(diào)用 vararg 方法時(shí),我們可以一個(gè)接一個(gè)地傳參,例如 append('h', 'e', 'l', 'l', 'o'),或者,如果我們已經(jīng)有一個(gè)數(shù)組并希望將其內(nèi)容傳給該方法, 我們使用伸展(spread)操作符(在數(shù)組前面加 *):
val world = charArrayOf('w', 'o', 'r', 'l', 'd')
val result = append('h', 'e', 'l', 'l', 'o',' ', *world)
3、方法作用域
在 Kotlin 中方法可以在文件頂層聲明,這意味著你不需要像一些語(yǔ)言如 Java、C# 那樣需要?jiǎng)?chuàng)建一個(gè)類來(lái)保存一個(gè)方法。 此外除了頂層方法, Kotlin 中方法也可以聲明在局部作用域、作為成員方法以及擴(kuò)展方法。
局部方法
Kotlin 支持局部方法,即一個(gè)方法在另一個(gè)方法內(nèi)部:
fun magic(): Int {
fun foo(v: Int): Int {
return v * v
}
val v1 = (0..100).random()
return foo(v1)
}
局部方法可以訪問外部方法(即閉包)的局部變量。
二、Lambda表達(dá)式
在 Java 8 的時(shí)候開始支持 Lambda 表達(dá)式,目前 Lambda 語(yǔ)法在 Java 中已 經(jīng)被廣泛的運(yùn)用,Lambda 表達(dá)式可以理解為是一種語(yǔ)法糖,值得慶幸的 是,Kotlin 一經(jīng)開源成熟就已經(jīng)支持這種語(yǔ)法。
Lambda 表達(dá)式的本質(zhì)其實(shí)是匿名方法,因?yàn)樵谄涞讓訉?shí)現(xiàn)中還是通過(guò)匿名 方法來(lái)實(shí)現(xiàn)的。但是我們?cè)谟玫臅r(shí)候不必關(guān)心起底層實(shí)現(xiàn)。不過(guò) Lambda 的 出現(xiàn)確實(shí)是減少了代碼量的編寫,同時(shí)也是代碼變得更加簡(jiǎn)潔明了。
Lambda 作為方法式編程的基礎(chǔ),其語(yǔ)法也是相當(dāng)簡(jiǎn)單的。這里先通過(guò)一段 簡(jiǎn)單的代碼演示沒讓大家了解 Lambda 表達(dá)式的簡(jiǎn)潔之處:
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Lambda 簡(jiǎn)潔之道",
Toast.LENGTH_LONG).show();
}
});
VS
view.setOnClickListener { v -> Toast.makeText(v.context, "Lambda 簡(jiǎn)潔之道
", Toast.LENGTH_LONG).show() }
1、Lambda表達(dá)式的特點(diǎn)
語(yǔ)法如下:
無(wú)參數(shù)的情況 :
val/var 變量名 = { 操作的代碼 }
有參數(shù)的情況:
val/var 變量名 : (參數(shù)的類型,參數(shù)類型,...) -> 返回值類型 = {參數(shù) 1,參數(shù)
2,... -> 操作參數(shù)的代碼 }
可等價(jià)于
// 此種寫法:即表達(dá)式的返回值類型會(huì)根據(jù)操作的代碼自推導(dǎo)出來(lái)。
val/var 變量名 = { 參數(shù) 1 : 類型,參數(shù) 2 : 類型, ... -> 操作參數(shù)的代碼 }
lambda 表達(dá)式作為方法中的參數(shù)的時(shí)候,這里舉一個(gè)例子:
fun test(a : Int, 參數(shù)名 : (參數(shù) 1 : 類型,參數(shù) 2 : 類型, ... ) -> 表達(dá)式返回
類型){
?...
}
2、Lambda實(shí)踐
如何使用 it
認(rèn)識(shí) it
? it 并不是 Kotlin 中的一個(gè)關(guān)鍵字(保留字)
? it 是在當(dāng)一個(gè)高階方法中 Lambda 表達(dá)式的參數(shù)只有一個(gè)的時(shí)候可以使用 it 來(lái)使 用此參數(shù)
? it 可表示為單個(gè)參數(shù)的隱式名稱,是 Kotlin 語(yǔ)言約定的
? 實(shí)例 A:單個(gè)參數(shù)的隱式名稱
// 這里舉例一個(gè)語(yǔ)言自帶的一個(gè)高階方法 filter,此方法的作用是過(guò)濾掉不滿足條
件的值。
val arr = arrayOf(1,3,5,7,9)
// 過(guò)濾掉數(shù)組中元素小于 2 的元素,取其第一個(gè)打印。這里的 it 就表示每一個(gè)元
素。
println(arr.filter { it < 5 }.component1())
//結(jié)合上文的
testClosure(1)(2) {
println(it)
}
如何使用下劃線_
在使用 Lambda 表達(dá)式的時(shí)候,可以用下劃線(_)表示未使用的參數(shù),表示不 處理這個(gè)參數(shù)。
在遍歷一個(gè) Map 集合的時(shí)候,這當(dāng)非常有用
val map = mapOf("key1" to "value1", "key2" to "value2", "key3" to
"value3")
map.forEach { (key, value) ->
println("$key \t $value")
}
// 不需要 key 的時(shí)候
map.forEach { (_, value) ->
println(value)
}
總結(jié)
本文僅僅簡(jiǎn)單介紹了pandas的使用,而pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。
原文鏈接:https://blog.csdn.net/m0_58941767/article/details/126806222
相關(guān)推薦
- 2022-09-01 MongoDB實(shí)現(xiàn)查詢、分頁(yè)和排序操作以及游標(biāo)的使用_MongoDB
- 2022-04-18 Docker安裝Nacos服務(wù)的實(shí)現(xiàn)_docker
- 2022-06-08 .Net?Core?進(jìn)程守護(hù)之Supervisor使用詳解_實(shí)用技巧
- 2022-11-20 python合并多個(gè)excel的詳細(xì)過(guò)程_python
- 2022-06-01 python中parser.add_argument()用法實(shí)例(命令行選項(xiàng)、參數(shù)和子命令解析器)_
- 2023-09-12 Spring Boot自動(dòng)配置介紹
- 2021-12-13 淺談Gin框架中bind的使用_Golang
- 2022-04-24 Postman設(shè)置環(huán)境變量的實(shí)現(xiàn)示例_相關(guān)技巧
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支