Kotlin 函數(shù):
示例:
fun function(params: String): Int {
}
- params: String 函數(shù)參數(shù)
- fun function(params: String) 無返回值函數(shù)
- fun function(params: String): Int 有返回值函數(shù),返回值類型為Int
- Kotlin的函數(shù)可以聲明為toplevel也就是跟class一個級別,也就是說不必非放在類里面
- 如果一個函數(shù)只有一行代碼時,kotlin允許我們直接這樣寫,直接省略函數(shù)體
如:
fun getAddressB(id: Int, name: String) = {
"北京"
}
fun getAddressC(id: Int, name: String) = "上海" //類型自動推導
多參數(shù)函數(shù)寫法:
fun setDatas(vararg value: Int) {
for (i in value) {
println(i)
}
}
Test().setDatas(0, 1, 2)
函數(shù)的默認參數(shù)值
聲明函數(shù)變量時,直接給參數(shù)設置默認值,如果調(diào)用函數(shù)時對應參數(shù)缺省,那么該參數(shù)就是默認值。而在java中實現(xiàn)默認參數(shù)值方法則是需要自己寫多個重構(gòu)方法。
fun createUser(name: String = "小明", age: Int = 20, id: Int = 1) {
}
createUser()
createUser("小王")
createUser("小紅",18)
createUser("小李", 25, 2)
操作示例:
fun initParams() {
//有參數(shù)默認值可不傳,可選擇性傳
action01("haha", 20)
action02("lily")
action03(age = 15)
action03(name = "luky", age = 15) //定義名字填寫的參數(shù),叫做具名函數(shù)參數(shù)
}
private fun action01(name: String, age: Int) {
println("$name---$age")
}
private fun action02(name: String, age: Int = 18) { //參數(shù)的默認值
println("$name---$age")
}
private fun action03(name: String = "hello", age: Int = 18) {
println("$name---$age")
}
//返回值類型為Unit,表示為void返回類型,在函數(shù)無返回時,一般不寫Unit。
/**
* Unit類型,不寫默認也有, 無參數(shù)返回的忽略類型
* 相當于java的void關(guān)鍵字,反編成java語言就是void
* 但是void是關(guān)鍵字,Unit是類型
*/
private fun doWork() : Unit {
println() //return可寫可不寫
// return println()
}
Kotlin 匿名函數(shù):
/**
* 匿名函數(shù) == lambda表達式
*/
fun noName() {
val len = "lili".count()
println(len)
"lili".count {
// it等價于 l i l i元素,中間調(diào)用了一個predicate函數(shù)
it == 'r'
}
}
/**
* 函數(shù)參數(shù)
*/
fun funParams() {
//將函數(shù)類型和形參分開寫
val methodAction : (Int, Int, Int) -> String = { num1, num2, num3 ->
var sum = num1 + num2 + num3
"" +sum
}
//調(diào)用函數(shù)
System.out.println(methodAction(1, 2, 3))
}
/**
* 匿名函數(shù)的類型推斷
* 入?yún)ⅰ⒎祷仡愋筒还潭? * 使用最后一行表達式推斷類型
*/
fun funType() {
//匿名函數(shù)類型推斷為String
//方法名 + 冒號: 方式必須指定參數(shù)類型和返回類型
val method1: () -> String = {
""
}
method1()
//方法名 = {} 方式自動推斷返回類型,返回類型跟回返回可隨時更改
val method2 = { v1:Double, v2:Float, v3:Int ->
"" //可返回 String
3423 //可返回 Int
true //可返回boolean類型
{ a:Int -> //可返回函數(shù)
}
}
method2(23.3, 32.2f, 10)
val method3 = {
}
method3() //無入?yún)?,無返回值類型
val method4 = { number: Int ->
number
}
var intNum = method4(8)
}