Kotlin從入門到放棄(四) 函數(shù)運用

Kotlin從入門到放棄(四) 函數(shù)運用

本篇主要總結(jié)和分析Kotlin對函數(shù)提供的新功能怠褐,包括函數(shù)的基本定義昌腰、輸入?yún)?shù)褂删、輸出參數(shù)的類型定義來歸納整理飞醉。

1.函數(shù)的基本用法

1.1與Java聲明方式的區(qū)別

Java編寫的onCreate函數(shù)如下:

@Override
public void onCreate(Bundle savedInstanceState){
    ...
}

Kotlin編寫的onCreate函數(shù)如下:

 override fun onCreate(savedInstanceState: Bundle?) {
     ...
 }
  1. Java使用“@Override”來表示父類的方法,Kotlin使用小寫的“override”在同一行表示進行重載操作屯阀。
  2. Java使用“public”表示公共方法缅帘,Kotlin默認函數(shù)就是公開的,所以省略關(guān)鍵字难衰。
  3. Java使用“void”表示函數(shù)無返回值钦无,Kotlin無返回參數(shù),不用特別說明召衔。
  4. Kotlin新增了關(guān)鍵字“fun”铃诬,來表達這是函數(shù)定義
  5. Java 聲明參數(shù)的格式為“變量類型 變量名稱”,而Kotlin為“變量名稱:變量類型”
  6. Kotlin引入了空安全機制,如果某個變量允許為空趣席,則在變量類型后面加兵志?
1.2輸入?yún)?shù)的格式

無參函數(shù)寫法如下:

 fun setText(){
        tx.setText("Java")
    }

有參函數(shù)的寫法如下:

 fun setText(str:String){
        tx.setText(str)
    }

在Kotlin中調(diào)用函數(shù)方法和Java中一樣,直接采取“函數(shù)名稱(參數(shù)列表)”

  setText(str)
1.3輸出參數(shù)的格式
 fun main():Int

當開發(fā)者不聲明任何返回參數(shù)宣肚,Kotlin函數(shù)也會默認返回一個Unit類型的對象想罕。
因為Unit類型的參數(shù)無須開發(fā)者返回具體的值,所以Kotlin代碼往往把函數(shù)名稱后面的“:Unit”直接省略掉了霉涨。增加Unit類型的目的是為了讓函數(shù)定義完全符合變量定義的形式按价,函數(shù)需要具體的輸出函數(shù),加關(guān)鍵字return 返回參數(shù)值笙瑟。

 fun setText(str:String):String{
        tx.setText(str)
        return str
 }

2.輸入?yún)?shù)的變化

2.1默認參數(shù)

Java的默認參數(shù)允許在定義函數(shù)時直接輸入?yún)?shù)的默認值楼镐,如果調(diào)用函數(shù)時沒有給出某參數(shù)的具體值,系統(tǒng)就自動對該參數(shù)賦予默認值往枷。寫法如下

 fun setText(str:String = "Kotlin"):String{
        tx.setText(str)
        return str
 }
2.2命名參數(shù)

如果不滿意默認值框产,我們可以在調(diào)用函數(shù)時輸入新的值。具體格式“參數(shù)名= 參數(shù)值”

setText(str = "Java")
2.3可變參數(shù)

Kotlin新增了關(guān)鍵字vararg错洁,表示后面的參數(shù)格式是不確定的秉宿。寫法如“vararg arg:String?”屯碴。
Kotlin同時也支持可變的數(shù)組參數(shù)描睦,寫法如下

 vararg nameArray: Array<String>

3.幾種特殊的函數(shù)

3.1泛型函數(shù)

定義泛型函數(shù)時,得在函數(shù)名稱前面加“<T>",表示以T聲明的參數(shù)导而,其參數(shù)類型在函數(shù)調(diào)用時指定忱叭。

 fun <T> setText(str:T):T{
        return str
    }
3.2內(nèi)聯(lián)函數(shù)

舉個例子,Int嗡载、Float窑多、Double都繼承自Number類仍稀,但是定義一個輸入?yún)?shù)為setArray(array:Array<Number>)的函數(shù)洼滚,他并不接受值為Int的參數(shù)。這是我們需要指定T繼承自基類Nuember技潘,同時在fun 前面添加inline遥巴,表示此函數(shù)屬于內(nèi)聯(lián)函數(shù)。用法如下

 inline fun <reified T:Number> setText(str:T):T {
        return str
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末享幽,一起剝皮案震驚了整個濱河市铲掐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌值桩,老刑警劉巖摆霉,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡携栋,警方通過查閱死者的電腦和手機搭盾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婉支,“玉大人鸯隅,你說我怎么就攤上這事∠蛲冢” “怎么了蝌以?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長何之。 經(jīng)常有香客問我跟畅,道長,這世上最難降的妖魔是什么溶推? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任碍彭,我火速辦了婚禮,結(jié)果婚禮上悼潭,老公的妹妹穿的比我還像新娘庇忌。我一直安慰自己,他們只是感情好舰褪,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布皆疹。 她就那樣靜靜地躺著,像睡著了一般占拍。 火紅的嫁衣襯著肌膚如雪略就。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天晃酒,我揣著相機與錄音表牢,去河邊找鬼。 笑死贝次,一個胖子當著我的面吹牛崔兴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蛔翅,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼敲茄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了山析?” 一聲冷哼從身側(cè)響起堰燎,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笋轨,沒想到半個月后秆剪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赊淑,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年仅讽,在試婚紗的時候發(fā)現(xiàn)自己被綠了膏燃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡何什,死狀恐怖组哩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情处渣,我是刑警寧澤伶贰,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站罐栈,受9級特大地震影響黍衙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荠诬,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一琅翻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柑贞,春花似錦方椎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至有决,卻和暖如春闸拿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背书幕。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工新荤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人台汇。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓苛骨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親励七。 傳聞我的和親對象是個殘疾皇子智袭,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

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