函數運用
函數的基本用法
- 與Java的差別
java編寫的onCreate代碼
@Override
public void onCreate(Bundle savedInstanceState) {
...
}
Kotlin編寫的onCreate代碼
override fun onCreate(savedInstanceState: Bundle?) {
...
}
兩者對比,可以看出來有以下不同點:
- java使用”@Override“ 來表示該函數重載父類的方法,而Kotlin使用小寫的“override”在同一行表達重載操作
- java使用“public"表示該函數是公共方法,而Kotlin預設的函數就是公開的,是以省略了關鍵字”public“
- java使用”void“表示該函數沒有傳回參數,而Kotlin不存在關鍵字”void“,若無傳回參數,則不用特别說明
- Kotlin新增了關鍵字”fun“,表示這裡是函數定義,其格式類似于Java的關鍵字”class“,而Java不存在關鍵字”fun“
- Java聲明輸入參數的格式為”變量類型 變量名稱“,而Kotlin聲明輸入參數的格式為”變量名稱:變量類型“
- Kotlin引入了空安全機制,如果某個變量允許為空,就需要在變量類型後面加個問号”?“
- 輸入參數的格式
下面是一個見到那的函數定義代碼,沒有輸入也沒有輸出:
fun getDinnerEmpty() {
tv_process.text = "這是一個過程"
tv_result.text = ""
}
增加了輸入參數的函數定義
fun getDinnerInput(egg:Int, leek:Double, water:String, shell:Float) {
tv_process.text = " "
tv_result.text = ""
}
允許入參為空
fun getDinnerInput(egg:Int, leek:Double?, water:String?, shell:Float) {
tv_process.text = " "
tv_result.text = ""
}
調用方式如下
btn_input_empty.setOnClickListener { getDinnerEmpty() }
btn_input_param.setOnClickListener { getDinnerInput(2, 1111.1111, "22222", 10000f) }
btn_input_null.setOnClickListener { getDinnerCanNull(2, 1111.1111, null , 10000f) }
-
輸出參數的格式
Kolin輸出函數的聲明代碼如下:
var i:Int
//類似整型變量,輸出函數在後面展現
fun main():Int
//java使用void表示不存在傳回參數,然而Kotlin的傳回參數是一定存在的,Kotlin函數如果不聲明任何傳回參數,其實是預設傳回一個Unit類型的對象的
//Unit表示沒有傳回參數,也可以直接省略Unit聲明
fun getDinnerUnit():Unit {
tv_process.text = "這是一個過程"
tv_result.text = ""
}
//如果函數需要具體的輸出函數,則一樣要在函數末尾使用關鍵字"return"來傳回參數值,如下
fun getDinnerOutput():String {
tv_process.text = "這是有String類型的輸出參數的"
var dinner:String = "末尾需要加上return"
return dinner
}
//同時具備輸入參數和輸出參數
fun getDinnerInput(egg:Int, leek:Double?, water:String?, shell:Float):String {
tv_process.text = "這是有String類型的輸出參數的"
var dinner:String = "末尾需要加上return"
return dinner
}
//調用方式如下
btn_output_empty.setOnClickListener { getDinnerUnit() }
btn_output_param.setOnClickListener { tv_result.text=getDinnerOutput() }
btn_full_param.setOnClickListener { tv_result.text=getDinnerFull(2, 111 1.1111, "123", 10000f) }
輸入參數的變化
- 預設參數
//預設參數允許崽定義函數時直接指定輸入參數的預設值。如果調用函數時沒有給出某參數的具體值,系統就自動對該參數入獄預設值,進而免去每次都要手工指派的麻煩。寫法:聲明輸入參數時崽其後面加上等号及其預設值。
fun getFourBigDefault(general:String, first:String="111", second:String="222", third:String="333"):String {
var answer:String = "$generalғ$first҅$second҅$third҅$fourth"
return answer
}
//調用
btn_input_default.setOnClickListener {
tv_four_answer.text= getFourBigDefault("隻要輸入第一個就好了,其他的都是預設參數")
}
- 命名參數
//如果給第二個參數填寫指定的描述文字
btn_input_part.setOnClickListener {
tv_four_answer.text=getFourBigDefault("第一個不是預設參數","可以寫第二個預設參數")
}
//如果想單獨的就隻給第三個填寫指定的描述文字,就需要用到命名函數
btn_input_part.setOnClickListener {
tv_four_answer.text=getFourBigDefault("第一個不是預設參數",,second"可以寫第二個預設參數")
}
//上面代碼使用了命名函數的表達式,實作了給指定參數指派的功能。
- 可變參數
//在Java體系重,可變參數采用“Object ..... args”的形式;在Kotlin體系中,新增了關鍵字vararg,表示氣候的參數個數時不确定的。以可變的字元串參數為例,Java的寫法為“String... args”,而Kotlin的寫法是"vararg args:String?".函數内部在解析的時候,Kotlin會把可變參數當作一個數組,開發者需要循環取出每個參數值進行處理。
fun getFourBigVararg(general:String, first:String="2", second:String="3", third:String="4", vararg otherArray: String?):String {
var answer:String = "$general:$first҅$second҅$third҅"
//循環取出可變參數包含的所有字段
for (item in otherArray) {
answer = "$answer҅ , $item"
}
return answer
}
//調用
getFourBigVararg("開始","1","2","3","4","5","6","7")