Kotlin系列六----函数

概述:kotlin中对函数的使用和定义更加灵活多样,另外支持不同程度的扩展,方便广大开发者创自己的方法,提高开发效率,这里之简单介绍下不同函数的使用,至于扩展函数会在下一篇和扩展属性一起介绍。

声明:

Kotlin 中的函数使用 fun 关键字声明:

fun double(x: Int): Int {
    return 2 * x
}
函数用法
调用函数使用传统的方法:

val result = double(2)
调用成员函数使用点表示法:

Sample().foo() // 创建类 Sample 实例并调用 foo

参数

函数参数使用 Pascal 表示法定义,即 nametype。参数用逗号隔开。每个参数必须有显式类型:

fun powerOf(number: Int, exponent: Int) {
……
}

默认参数

函数参数可以有默认值,当省略相应的参数时使用默认值。与其他语言相比,这可以减少重载数量:

fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size) {
……
}

默认值通过类型后面的 = 及给出的值来定义。

覆盖方法总是使用与基类型方法相同的默认参数值。 当覆盖一个带有默认参数值的方法时,必须从签名中省略默认参数值:
open class A { 
open fun foo(i: Int = 10) { …… } } 
class B : A() { 
override fun foo(i: Int) { …… } // 不能有默认值 }
如果一个默认参数在一个无默认值的参数之前,那么该默认值只能通过使用命名参数调用该函数来使用:
fun foo(bar: Int = 0, baz: Int) { /* …… */ }

foo(baz = 1) // 使用默认值 bar = 0
如果最后一个 lambda 表达式参数从括号外传给函数函数调用,那么允许默认参数不传值:
fun foo(bar: Int = 0, baz: Int = 1, qux: () -> Unit) { /* …… */ }
foo(1) { println("hello") } // 使用默认值 baz = 1 foo { println("hello") }
当一个函数调用混用位置参数与命名参数时,所有位置参数都要放在第一个命名参数之前。例如,允许调用 f(1, y = 2) 但不允许 f(x = 1, 2), 具有块代码体的函数必须始终显式指定返回类型。

可变参数

foo( string = *arrayOf("1","2"))
//foo( "1","2")
fun foo(vararg string: String){

}

单表达式函数

当函数返回单个表达式时,可以省略花括号并且在 = 符号之后指定代码体即可:
fun double(x: Int): Int = x * 2
当返回值类型可由编译器推断时,显式声明返回类型是可选的:
fun double(x: Int) = x * 2

泛型函数

函数可以有泛型参数,通过在函数名前使用尖括号指定,在前面泛型中已经介绍过了:
fun <T> singletonList(item: T): List<T> {
    // ……
}

函数作用域

在 Kotlin 中函数可以在文件顶层声明,这意味着你不需要像一些语言如 Java、C# 或 Scala 那样创建一个类来保存一个函数。此外除了顶层函数,Kotlin 中函数也可以声明在局部作用域、作为成员函数以及扩展函数,我们单独在kotlin文件中创建方法,不用创建类取包裹。
fun action(){
 
}
局部函数
在add()方法中创建了一个twice()方法,在twice()方法中使用外部函数的times去计算倍率:
fun add( a: Int ,  b:Int) : Int{
        var  times = 2
        fun twice() : Int{
          val  c = a * times + b * times
            Log.e("result====",c.toString())
            return c
        }
        return  twice()
    }
调用:
val result = add(2, 3)
Log.e("result:", result.toString())
输出结果:
02-07 11:55:52.019 14759-14759/com.example.administrator.kotlinpractise E/result====: 10
02-07 11:55:52.019 14759-14759/com.example.administrator.kotlinpractise E/result:: 10
成员函数
成员函数是在类或对象内部定义的函数:
class Sample() {
    fun foo() { print("Foo") }
}
成员函数以点表示法调用:
Sample().foo()














猜你喜欢

转载自blog.csdn.net/alexwll/article/details/79278275