首發(fā)于公眾號(hào): DSGtalk1989
18.函數(shù)
-
默認(rèn)參數(shù)
override
復(fù)寫的方法不允許出現(xiàn)默認(rèn)參數(shù)俐芯。 -
vararg
vararg
關(guān)鍵字表示傳入的是數(shù)組蔑穴,如下的方法傳入的是String
字符串?dāng)?shù)組fun foo(vararg strings: String) { }
如果我們需要通過指定的方式傳入的話需要注意以下問題
fun main() { foo(strings = *arrayOf("a", "b", "c")) }
strings
指向的是String
類型,如果不加上*
泥栖,會(huì)報(bào)錯(cuò)。以此類推,我們有時(shí)候也可以直接在數(shù)組初始化中傳入數(shù)組
val a = arrayOf(1, 2, 3) val list = asList(-1, 0, *a, 4)
-
中綴表示法
我們?cè)趉otlin中可以使用一些自己命名的方法很好的處理一些事情阴绢。比如說系統(tǒng)為我們定了了操作符
>
來判斷左邊的是否大于右邊的店乐。我們也可以自己實(shí)現(xiàn)infix fun Int.大于(b : Int) : Boolean{ return this > b }
中綴關(guān)鍵字
infix
用來修飾的函數(shù)只有兩種,一種是上面的這種擴(kuò)展函數(shù)呻袭,一種是成員函數(shù)眨八。中綴函數(shù)的使用方式跟操作符是一樣的,直接
a 中綴函數(shù)名 b
左电,a
和b
都不可少廉侧,需要接受者和參數(shù)。舉個(gè)成員函數(shù)的例子:class MyStringCollection { infix fun add(s: String) { …… } fun build() { this add "abc" // 正確 add("abc") // 正確 add "abc" // 錯(cuò)誤:必須指定接收者 } }
-
尾遞歸函數(shù)
關(guān)鍵字
tailrec
用來表示尾遞歸函數(shù)篓足,他有形式上的要求段誊,就是描述的函數(shù)需要有有條件,且最終不斷的執(zhí)行自己栈拖。大致的格式如下tailrec fun againFun(x: Int) = if( x < 0) x else againFun(--x)
Kotlin學(xué)習(xí)筆記之 1 基礎(chǔ)語法
Kotlin學(xué)習(xí)筆記之 2 基本數(shù)據(jù)類型
Kotlin學(xué)習(xí)筆記之 4 循環(huán)控制
Kotlin學(xué)習(xí)筆記之 5 類和對(duì)象
Kotlin學(xué)習(xí)筆記之 8 擴(kuò)展
Kotlin學(xué)習(xí)筆記之 9 數(shù)據(jù)類與密封類
Kotlin學(xué)習(xí)筆記之 12 對(duì)象表達(dá)式和對(duì)象聲明
Kotlin學(xué)習(xí)筆記之 13 基礎(chǔ)操作符run连舍、with、let涩哟、also索赏、apply
Kotlin學(xué)習(xí)筆記之 14 包與導(dǎo)入
Kotlin學(xué)習(xí)筆記之 15 伴生對(duì)象
Kotlin學(xué)習(xí)筆記之 18 函數(shù)
Kotlin學(xué)習(xí)筆記之 19 高階函數(shù)與 lambda 表達(dá)式
Kotlin學(xué)習(xí)筆記之 20 內(nèi)聯(lián)函數(shù)
Kotlin學(xué)習(xí)筆記之 21 解構(gòu)聲明
Kotlin學(xué)習(xí)筆記之 28 協(xié)程基礎(chǔ)
Kotlin學(xué)習(xí)筆記之 29 上下文與調(diào)度器
Kotlin學(xué)習(xí)筆記之 30 協(xié)程取消與超時(shí)
Kotlin學(xué)習(xí)筆記之 31 協(xié)程掛起函數(shù)的組合