【Kotlin】一、類和函數(shù)

前言

因?yàn)锳ndroid Studio 3.0默認(rèn)支持Kotlin晤柄,所以這里我就省略如何配置Kotlin的環(huán)節(jié),直接進(jìn)入正題擦剑。(關(guān)于如何配置,請看這篇文章)

介紹

Kotlin中的類遵循一個(gè)簡單的結(jié)構(gòu)芥颈。盡管與Java有一點(diǎn)細(xì)微的差別惠勒。你可以在 try.kotlinlang.org 網(wǎng)站測試一些簡單的代碼范例。

怎么定義一個(gè)類

如果你想定義一個(gè)類爬坑,你只需要使用 class 關(guān)鍵字

class MainActivity{

}

它有一個(gè)默認(rèn)唯一的構(gòu)造器纠屋。我們會(huì)在剩下的文章中學(xué)習(xí)在特殊的情況下創(chuàng)建其它額外的構(gòu)造器,但是請記住大部分情況下你只需要這個(gè)默認(rèn)的構(gòu)造器盾计。你只需要在類名后面寫上它的參數(shù)售担。如果這個(gè)類沒有任何內(nèi)容可以省略大括號:

class Person(name: String, surname: String)

那么構(gòu)造函數(shù)的函數(shù)體在哪呢赁遗?你可以寫在 init 塊中:

class Person(name: String, surname: String) {
    init{
        ...
    }
}

類繼承

默認(rèn)任何類都是基礎(chǔ)繼承自Any(與java中的Object類似),但是我們可以繼承其它類族铆。所有的類默認(rèn)都是不可繼承的(final)岩四,所以我們只能繼承那些明確聲明 open 或者 abstract 的類:

open class Animal(name: String) 
class Person(name: String, surname: String) : Animal(name)

當(dāng)我們只有單個(gè)構(gòu)造器時(shí),我們需要在從父類繼承下來的構(gòu)造器中指定需要的參數(shù)骑素。這是用來替換Java中的 super 調(diào)用的炫乓。

函數(shù)

函數(shù)(我們Java中的方法)可以使用 fun 關(guān)鍵字就可以定義:

fun onCreate(savedInstanceState: Bundle?) {
}

如果你沒有指定它的返回值,它就會(huì)返回 Unit 献丑,與Java中的 void 類似末捣,但
是 Unit 是一個(gè)真正的對象。你當(dāng)然也可以指定任何其它的返回類型:

fun add(x: Int, y: Int) : Int {
    return x + y
}

小提示:分號不是必須的

就像你在上面的例子中看到的那樣创橄,我在每句的最后沒有使用分號箩做。當(dāng)然你也可以使用分號,分號不是必須的妥畏,而且不使用分號是一個(gè)不錯(cuò)的實(shí)踐邦邦。當(dāng)你這么做了,你會(huì)發(fā)現(xiàn)這節(jié)約了你很多時(shí)間醉蚁。

然而如果返回的結(jié)果可以使用一個(gè)表達(dá)式計(jì)算出來燃辖,你可以不使用括號而是使用等號:

fun add(x: Int,y: Int) : Int = x + y

構(gòu)造方法和函數(shù)參數(shù)

Kotlin中的參數(shù)與Java中有些不同。如你所見网棍,我們先寫參數(shù)的名字再寫它的類型:

fun add(x: Int, y: Int) : Int {
    return x + y
}

我們可以給參數(shù)指定一個(gè)默認(rèn)值使得它們變得可選黔龟,這是非常有幫助的。這里有一個(gè)例子滥玷,在Activity中創(chuàng)建了一個(gè)函數(shù)用來Toast一段信息:

fun toast(message: String, length: Int = Toast.LENGTH_SHORT) {
    Toast.makeText(this, message, length).show()
}

如你所見氏身,第二個(gè)參數(shù)(length)指定了一個(gè)默認(rèn)值。這意味著你調(diào)用的時(shí)候可以傳入第二個(gè)值或者不傳惑畴,這樣可以避免你需要的重載函數(shù):

toast("Hello")
toast("Hello", Toast.LENGTH_LONG)

這個(gè)與下面的Java代碼是一樣的:

void toast(String message){
}

void toast(String message, int length){
    Toast.makeText(this, message, length).show();
}

再看看這個(gè)例子:

fun niceToast(message:String,tag:String=javaClass<MainActivity>().getSimpleName(),length: Int = Toast.LENGTH_SHORT) {
    Toast.makeText(this, "[$className] $message", length).show()
}

我增加了第三個(gè)默認(rèn)值是類名的tag參數(shù)蛋欣。如果在Java中總數(shù)開銷會(huì)以幾何增長。現(xiàn)在可以通過以下方式調(diào)用:

toast("Hello")
toast("Hello", "MyTag")
toast("Hello", "MyTag", Toast.LENGTH_SHORT)

而且甚至還有其它選擇如贷,因?yàn)槟憧梢允褂脜?shù)名字來調(diào)用陷虎,這表示你可以通過在值前寫明參數(shù)名來傳入你希望的參數(shù):

toast(message = "Hello", length = Toast.LENGTH_SHORT)

小提示:String模版

你可以在String中直接使用模版表達(dá)式。它可以幫助你很簡單地在靜態(tài)值和變量的基礎(chǔ)上編寫復(fù)雜的String杠袱。在上面的例子中泻红,我使用了"[$className]$message"。如你所見霞掺,任何時(shí)候你使用一個(gè)$符號就可以插入一個(gè)表達(dá)式。如果這個(gè)表達(dá)式有一點(diǎn)復(fù)雜讹躯,你就需要使用一對大括號括起來:"our firstname is${user.firstname}"菩彬。

下一篇:【Kotlin】二缠劝、編寫你的第一個(gè)類

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市骗灶,隨后出現(xiàn)的幾起案子惨恭,更是在濱河造成了極大的恐慌,老刑警劉巖耙旦,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脱羡,死亡現(xiàn)場離奇詭異,居然都是意外死亡免都,警方通過查閱死者的電腦和手機(jī)锉罐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绕娘,“玉大人脓规,你說我怎么就攤上這事∠樟欤” “怎么了侨舆?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绢陌。 經(jīng)常有香客問我挨下,道長,這世上最難降的妖魔是什么脐湾? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任臭笆,我火速辦了婚禮,結(jié)果婚禮上沥割,老公的妹妹穿的比我還像新娘耗啦。我一直安慰自己,他們只是感情好机杜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布帜讲。 她就那樣靜靜地躺著,像睡著了一般椒拗。 火紅的嫁衣襯著肌膚如雪似将。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天蚀苛,我揣著相機(jī)與錄音在验,去河邊找鬼。 笑死堵未,一個(gè)胖子當(dāng)著我的面吹牛腋舌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渗蟹,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼块饺,長吁一口氣:“原來是場噩夢啊……” “哼赞辩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起授艰,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤辨嗽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后淮腾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糟需,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年谷朝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了洲押。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡徘禁,死狀恐怖诅诱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情送朱,我是刑警寧澤娘荡,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站驶沼,受9級特大地震影響炮沐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜回怜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一大年、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玉雾,春花似錦翔试、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驹碍,卻和暖如春壁涎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背志秃。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工怔球, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浮还。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓竟坛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子流码,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355