您的位置:首页 > 移动开发

Kotlin开发安卓APP笔记-函数和lambda表达式(1)

2017-12-15 11:59 387 查看

函数声明

在Kotlin中,使用“fun”关键字声明函数:

fun bestmk(i:Int):String{
return "猫客技术论坛bestmk.cn建站$i 年啦!"
}


可以看出,kotlin函数参数是用 Pascal 符号定义的 name:type。参数之间用逗号隔开,每个参数必须指明类型。函数参数可以有默认参数。这样相比其他语言可以减少重载。

函数使用方法和Java类似

var result=bestmk(1)
//返回猫客技术论坛bestmk.cn建站1年啦!


对于类成员函数,通过类实例加“.”方式使用:

例如
KotlinUtils().bestmk(1)


函数的默认参数

和Java不同的是,kotlin函数可以设置默认参数,通过“=”符号添加默认值,例如

fun setYear(year:Int=10){
//....
}


如果通过继承重写的函数,默认是会带有父类函数的默认参数;且重写的函数不能在设置默认值。

open class A {
open fun foo(i: Int = 10) { ... }
}

class B : A() {
override fun foo(i: Int) { ... }  // no default value allowed
//override fun foo(i: Int = 2) { ... } //error,父类函数已设置默认值,重写函数,不能再设置默认值。
}


命名参数

调用函数时,可以给传入的参数添加参数名;当一个函数有多个参数时,非常有用。如,有如下的一个函数:

fun reformat(str: String,
normalizeCase: Boolean = true,
upperCaseFirstLetter: Boolean = true,
divideByCamelHumps: Boolean = false,
wordSeparator: Char = ' ')  {
...
}


则可以通过该方式调用:
reformat(str)


当该函数的所有参数都没有设置默认值,则需要这样调用:
reformat(str, true, true, false, '_')


此时,可以在调用函数时,给传入的参数添加参数名,增加可读性:

reformat(str,
normalizeCase = true,
upperCaseFirstLetter = true,
divideByCamelHumps = false,
wordSeparator = '_'
)


只需要传入部分参数情况:

reformat(str, wordSeparator = '_')


注意:调用Java方法的时候不可以使用命名参数方式,Java不支持这种语法。。

返回“Unit”类型函数

如果一个函数不需要返回任何有效值,那么它的返回类型为“Unit”。“Unit”类型只有一个值,即“Unit”。另,可以不显示返回Unit:

fun printHello(name: String?): Unit {
if (name != null)
println("Hello ${name}")
else
println("Hi there!")
// `return Unit` or `return` is optional
}


返回的“Unit”也是可选的,下面的方式等同于返回“Unit”类型:

fun printHello(name: String?) {
...
}


单表达式函数(Single-Expression functions)

当函数返回一个单表达式的值,可以省略“{ }”直接将该单表达式使用“=”跟在函数定义的后面:

fun double(x: Int): Int = x * 2


今天先到这里。。下次在更新
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: