Kotlin從入門到放棄(四) 函數運用
本篇主要總結和分析Kotlin對函數提供的新功能,包括函數的基本定義、輸入參數、輸出參數的類型定義來歸納整理。
1.函數的基本用法
1.1與Java聲明方式的區別
Java編寫的onCreate函數如下:
@Override
public void onCreate(Bundle savedInstanceState){
...
}
Kotlin編寫的onCreate函數如下:
override fun onCreate(savedInstanceState: Bundle?) {
...
}
- Java使用“@Override”來表示父類的方法,Kotlin使用小寫的“override”在同一行表示進行重載操作。
- Java使用“public”表示公共方法,Kotlin默認函數就是公開的,所以省略關鍵字。
- Java使用“void”表示函數無返回值,Kotlin無返回參數,不用特別說明。
- Kotlin新增了關鍵字“fun”,來表達這是函數定義
- Java 聲明參數的格式爲“變量類型 變量名稱”,而Kotlin爲“變量名稱:變量類型”
- Kotlin引入了空安全機制,如果某個變量允許爲空,則在變量類型後面加?
1.2輸入參數的格式
無參函數寫法如下:
fun setText(){
tx.setText("Java")
}
有參函數的寫法如下:
fun setText(str:String){
tx.setText(str)
}
在Kotlin中調用函數方法和Java中一樣,直接採取“函數名稱(參數列表)”
setText(str)
1.3輸出參數的格式
fun main():Int
當開發者不聲明任何返回參數,Kotlin函數也會默認返回一個Unit類型的對象。
因爲Unit類型的參數無須開發者返回具體的值,所以Kotlin代碼往往把函數名稱後面的“:Unit”直接省略掉了。增加Unit類型的目的是爲了讓函數定義完全符合變量定義的形式,函數需要具體的輸出函數,加關鍵字return 返回參數值。
fun setText(str:String):String{
tx.setText(str)
return str
}
2.輸入參數的變化
2.1默認參數
Java的默認參數允許在定義函數時直接輸入參數的默認值,如果調用函數時沒有給出某參數的具體值,系統就自動對該參數賦予默認值。寫法如下
fun setText(str:String = "Kotlin"):String{
tx.setText(str)
return str
}
2.2命名參數
如果不滿意默認值,我們可以在調用函數時輸入新的值。具體格式“參數名= 參數值”
setText(str = "Java")
2.3可變參數
Kotlin新增了關鍵字vararg,表示後面的參數格式是不確定的。寫法如“vararg arg:String?”。
Kotlin同時也支持可變的數組參數,寫法如下
vararg nameArray: Array<String>
3.幾種特殊的函數
3.1泛型函數
定義泛型函數時,得在函數名稱前面加“<T>",表示以T聲明的參數,其參數類型在函數調用時指定。
fun <T> setText(str:T):T{
return str
}
3.2內聯函數
舉個例子,Int、Float、Double都繼承自Number類,但是定義一個輸入參數爲setArray(array:Array<Number>)的函數,他並不接受值爲Int的參數。這是我們需要指定T繼承自基類Nuember,同時在fun 前面添加inline,表示此函數屬於內聯函數。用法如下
inline fun <reified T:Number> setText(str:T):T {
return str
}