Kotlin 學(xué)習(xí)筆記:基本語法和函數(shù)

Kotlin學(xué)習(xí)筆記:概述
Kotlin學(xué)習(xí)筆記:基本語法和函數(shù)
Kotlin學(xué)習(xí)筆記:類和接口
Kotlin學(xué)習(xí)筆記:lambda編程
Kotlin學(xué)習(xí)筆記:類型系統(tǒng)
Kotlin學(xué)習(xí)筆記:泛型
Kotlin學(xué)習(xí)筆記:注解和反射

  • 變量
val str = "hello" // val修飾的變量是不可變的揖盘,相當(dāng)于java的final變量
var count = 12  // var修飾的變量 是可變的
  • when表達(dá)式代替switch語句
fun getMnemonic(color: Color) =
    when (color) {
        Color.RED -> "Richard"
        Color.ORANGE -> "Of"
        Color.YELLOW -> "York"
        Color.GREEN -> "Gave"
        Color.BLUE -> "Battle"
        Color.INDIGO -> "In"
        Color.VIOLET -> "Vain"
    }
>>> println(getMnemonic(Color.BLUE))
Battle
  • if() else是表達(dá)式。說明if() else 可以作為賦值給變量违施,也可以作為返回值。
fun main(args: Array<String>) {
    val name = if (args.size > 0) args[0] else "Kotlin"
    println("Hello, $name!")
}

函數(shù)

image.png

聲明函數(shù)的語法

函數(shù)聲明語法

Kotlin也有與Java相對應(yīng)的main函數(shù)法精,定義方式如下

fun main(args: Array<String>) {
    println("hello Kotlin")
}

參數(shù)

  • 命名參數(shù)
  • 支持默認(rèn)參數(shù)值

假如需要寫一個在list列表中將元素用分隔符分割并打印以String類型打印的功能。

一般情況下矩乐,可以這樣寫璧函。

fun <T>joinToString(collection: Collection<T>, 
                    separator: String, 
                    prefix: String, 
                    suffix: String): String{
    val result = StringBuilder(prefix)

    for((index, element) in collection.withIndex()) {
        if (index >0) result.append(separator)
        result.append(element)
    }
    result.append(suffix)
    return result.toString()
}

為了解決過度重載的問題,可以使用默認(rèn)參數(shù)值勋桶。

fun <T>joinToString(collection: Collection<T>, 
                     separator: String=",", 
                     prefix: String="", 
                     suffix: String=""): String{
    val result = StringBuilder(prefix)

    for((index, element) in collection.withIndex()) {
        if (index >0) result.append(separator)
        result.append(element)
    }
    result.append(suffix)

    return result.toString()
}

可以使用以下方式調(diào)用

joinToString(list)
joinToString(list, ";")

頂層函數(shù)

在Java中經(jīng)常會用到一些工具類脱衙,這些工具類中往往都是靜態(tài)方法,沒有類的實例對象例驹,例如Jdk中的Collections類捐韩,以及我們自己定義的一些放在util包下的工具類。在Kotlin中鹃锈,完全不需要這些類荤胁。Kotlin引入了頂層函數(shù),可以替代靜態(tài)類仪召。

那么如何定義頂層函數(shù)呢寨蹋?

創(chuàng)建一個Kotlin文件,然后將函數(shù)添加進(jìn)去即可扔茅。以joinToString為例已旧,

fun <T>joinToString(...): String{
  ....
}

等價于

/* Java */
package strings;
public class JoinKt {
    public static String joinToString(...) { ... }
}

擴(kuò)展函數(shù)

定義:函數(shù)定義在類的外部,但可以像調(diào)用該類的成員函數(shù)一樣調(diào)用

  • 擴(kuò)展函數(shù)的語法

接收者類型:要擴(kuò)展類或接口的名稱召娜,放到要添加的函數(shù)前运褪。

接收者對象:用來調(diào)用擴(kuò)展函數(shù)的對象

擴(kuò)展函數(shù)聲明
  • 擴(kuò)展函數(shù)如何調(diào)用及優(yōu)點(diǎn)

擴(kuò)展函數(shù)可以在不更改原來類的情況下,對類的方法進(jìn)行拓展玖瘸。擴(kuò)展函數(shù)可以像被擴(kuò)展類的方法一樣調(diào)用秸讹。

舉例來講,自定義一個String類的擴(kuò)展函數(shù)lastChar雅倒,該函數(shù)可以取字符串的最后一個字符璃诀。

fun String.lastChar(): Char = get(length-1)

在Kotlin代碼中調(diào)用

import com.nxiangbo.kotlin_learning.function.lastChar
"str".lastChar()

在Java代碼中調(diào)用

import com.nxiangbo.kotlin_learning.function.FunctionLearnKt;
public class FunctionTest {
    public void Test(){
        FunctionLearnKt.lastChar("str");
    }
}
  • 擴(kuò)展函數(shù)能做什么

在Kotlin標(biāo)準(zhǔn)庫中,大量使用擴(kuò)展函數(shù)蔑匣。例如劣欢,String等

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市裁良,隨后出現(xiàn)的幾起案子凿将,更是在濱河造成了極大的恐慌,老刑警劉巖价脾,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牧抵,死亡現(xiàn)場離奇詭異,居然都是意外死亡侨把,警方通過查閱死者的電腦和手機(jī)犀变,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門妹孙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弛作,你說我怎么就攤上這事涕蜂。” “怎么了映琳?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵机隙,是天一觀的道長。 經(jīng)常有香客問我萨西,道長有鹿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任谎脯,我火速辦了婚禮葱跋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘源梭。我一直安慰自己娱俺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布废麻。 她就那樣靜靜地躺著荠卷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烛愧。 梳的紋絲不亂的頭發(fā)上油宜,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機(jī)與錄音怜姿,去河邊找鬼慎冤。 笑死,一個胖子當(dāng)著我的面吹牛沧卢,可吹牛的內(nèi)容都是我干的蚁堤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼但狭,長吁一口氣:“原來是場噩夢啊……” “哼披诗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起熟空,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搞莺,沒想到半個月后息罗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡才沧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年迈喉,在試婚紗的時候發(fā)現(xiàn)自己被綠了绍刮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡挨摸,死狀恐怖孩革,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情得运,我是刑警寧澤膝蜈,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站熔掺,受9級特大地震影響饱搏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜置逻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一推沸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧券坞,春花似錦鬓催、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至眠冈,卻和暖如春飞苇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蜗顽。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工布卡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雇盖。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓忿等,卻偏偏與公主長得像,于是被迫代替她去往敵國和親崔挖。 傳聞我的和親對象是個殘疾皇子贸街,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 寫在開頭:本人打算開始寫一個Kotlin系列的教程,一是使自己記憶和理解的更加深刻狸相,二是可以分享給同樣想學(xué)習(xí)Kot...
    胡奚冰閱讀 678評論 0 4
  • 在Kotlin中創(chuàng)建集合 上一章我們已經(jīng)使用setOf函數(shù)創(chuàng)建一個set了薛匪。同樣的,我們也可以用類似的方法創(chuàng)建一個...
    4e70992f13e7閱讀 6,499評論 0 4
  • 不重要的廢話 前段時間看了一遍《Programming Kotlin》脓鹃,主要目的是想提高自己的英文閱讀能力逸尖,能力提...
    珞澤珈群閱讀 3,344評論 1 7
  • 華麗的影子在光斑下跳動 纖細(xì),輕盈 逆風(fēng)而行的舞動 帶著肆意輕狂的芬芳 跳躍,仰起 飛起弧度斑斕的彩條 空寂的舞臺...
    不愛念舊的左左閱讀 209評論 0 0
  • 今天雨寶11個月4天終于學(xué)會爬了,平時爺爺奶奶擔(dān)心骯臟一直抱著很少讓她爬苞俘!所以我家雨寶十一個月盹沈,還不太敢地上爬,只...
    牛小丫53閱讀 203評論 0 1