标签:override 位置 自动 方式 推导 err 传统 默认值 size
在Kotlin中申明一个函数要使用fun关键字,至于为啥用fun这个缩写也没啥奇怪的,可能是JB家创造这门语言的人喜欢……好吧好吧,fun就fun,你喜欢就好
其实不管是fun还是function,我们在ide中敲代码,这些关键字都是有提示的,例如在intellij idea中,在合适的位置敲一个f就会有fun的提示。
函数申明:
先看看如何申明一个最基本的函数,求两个Int之和
fun add(num1: Int,num2: Int): Int{
return num1 + num2
}
var result: Int = add(1,1)//函数调用
无返回值的函数,返回类型其实是Unit,此时返回类型是可以省略的
//此时返回类型可以省略 fun testFun():Unit{ print("======") }
如果函数体是单个的表达式,就可以简化函数的定义,具体来书就是不要大括号了,直接在返回类型后面 “= 表达式”
fun addNum(num1: Int,num2: Int): Int = num1 + num2//单条普通语句 fun maxNum(num1: Int,num2: Int): Int = if (num1 > num2) num1 else num2//if表达式 fun getScroeLevel(scroe: Int): String = when{//when表达式 scroe == 100 -> "very good!" scroe >= 80 -> "good!" scroe >= 60 -> "passed!" else -> "bad" }
函数参数:
现在函数可以有默认值了,这在一定程度上可以减少函数重载
//第二个参数使用默认实参 fun add(num1: Int,num2: Int = 10): Int{ return num1 + num2 }
再看一个默认参数在继承结构中的规则
open class Base{ open fun test(id: Int = 10){ } } class Dev : Base(){ //重写父类中带有默认参数的方法时不允许再有默认参数,其默认值默认是父类中的默认参数 override fun test(id: Int) { print("$id") } } fun main(args: Array<String>) { Dev().test()//输出10 }
命名参数的使用,在默认参数很多的情况下,如果只想改变其中的某一个默认参数时,这个语法很有用(但是Kotlin调用Java写的方法是不能使用)
class User { fun setUserInfo(id: Int, name: String, param1: Boolean = true, param2: Boolean = false, param3: Boolean = true, param4: Boolean = false) { //TODO } } fun main(args: Array<String>) { var user: User = User() //次数我只想改变param4 user.setUserInfo(1, "liuliqianxiao", true, false, true, true)//传统写法 user.setUserInfo(1, "liuliqianxiao", param4 = true)//使用命名参数的写法 }
返回类型推导:
如果函数使用表达式的方式定义的,则函数返回类型是自动推导的,也就是可以省略的,但是如果是用大括号来定义的函数体,则必须返回值不能自动推导。
//虽然函数体是一个很简单的表达式,但是返回类型也必须明确标识出来,除非是要返回Unit,否则不能省略 fun addNum(num1: Int, num2: Int): Int { return num1 + num2 } fun addNum1(num1: Int, num2: Int) = num1 + num2//使用函数表达式的方式返回类型是可以自动推导出来滴
函数基础篇就写到这里咯,下一篇准备讲讲函数方面稍微高级一点的语法
Kotlin---------------函数之fun?function?
标签:override 位置 自动 方式 推导 err 传统 默认值 size
原文地址:http://www.cnblogs.com/liuliqianxiao/p/7142662.html