Kotlin 函数:
示例:
fun function(params: String): Int {
}
- params: String 函数参数
- fun function(params: String) 无返回值函数
- fun function(params: String): Int 有返回值函数,返回值类型为Int
- Kotlin的函数可以声明为toplevel也就是跟class一个级别,也就是说不必非放在类里面
- 如果一个函数只有一行代码时,kotlin允许我们直接这样写,直接省略函数体
如:
fun getAddressB(id: Int, name: String) = {
"北京"
}
fun getAddressC(id: Int, name: String) = "上海" //类型自动推导
多参数函数写法:
fun setDatas(vararg value: Int) {
for (i in value) {
println(i)
}
}
Test().setDatas(0, 1, 2)
函数的默认参数值
声明函数变量时,直接给参数设置默认值,如果调用函数时对应参数缺省,那么该参数就是默认值。而在java中实现默认参数值方法则是需要自己写多个重构方法。
fun createUser(name: String = "小明", age: Int = 20, id: Int = 1) {
}
createUser()
createUser("小王")
createUser("小红",18)
createUser("小李", 25, 2)
操作示例:
fun initParams() {
//有参数默认值可不传,可选择性传
action01("haha", 20)
action02("lily")
action03(age = 15)
action03(name = "luky", age = 15) //定义名字填写的参数,叫做具名函数参数
}
private fun action01(name: String, age: Int) {
println("$name---$age")
}
private fun action02(name: String, age: Int = 18) { //参数的默认值
println("$name---$age")
}
private fun action03(name: String = "hello", age: Int = 18) {
println("$name---$age")
}
//返回值类型为Unit,表示为void返回类型,在函数无返回时,一般不写Unit。
/**
* Unit类型,不写默认也有, 无参数返回的忽略类型
* 相当于java的void关键字,反编成java语言就是void
* 但是void是关键字,Unit是类型
*/
private fun doWork() : Unit {
println() //return可写可不写
// return println()
}
Kotlin 匿名函数:
/**
* 匿名函数 == lambda表达式
*/
fun noName() {
val len = "lili".count()
println(len)
"lili".count {
// it等价于 l i l i元素,中间调用了一个predicate函数
it == 'r'
}
}
/**
* 函数参数
*/
fun funParams() {
//将函数类型和形参分开写
val methodAction : (Int, Int, Int) -> String = { num1, num2, num3 ->
var sum = num1 + num2 + num3
"" +sum
}
//调用函数
System.out.println(methodAction(1, 2, 3))
}
/**
* 匿名函数的类型推断
* 入参、返回类型不固定
* 使用最后一行表达式推断类型
*/
fun funType() {
//匿名函数类型推断为String
//方法名 + 冒号: 方式必须指定参数类型和返回类型
val method1: () -> String = {
""
}
method1()
//方法名 = {} 方式自动推断返回类型,返回类型跟回返回可随时更改
val method2 = { v1:Double, v2:Float, v3:Int ->
"" //可返回 String
3423 //可返回 Int
true //可返回boolean类型
{ a:Int -> //可返回函数
}
}
method2(23.3, 32.2f, 10)
val method3 = {
}
method3() //无入参,无返回值类型
val method4 = { number: Int ->
number
}
var intNum = method4(8)
}