Kotlin——基础的函数/方法详解

Kotlin——基础的函数/方法详解

对于Kotlin中的函数来说,和JavaScript或者Lua这些语言很像,它有着这些语言的特性。但是也与这些语言就着许多不同之处。或许你更了解Java语言,然而对于Java语言来说,它不是不是闭包这个特性的。由于在这篇文章主要是讲解函数的基本使用,故而只会讲解到函数的定义、函数的返回值、函数的参数等。剩下的部分我会在这个系列的高级篇会给大家奉上。

目录

Kotlin——基础的函数/方法详解

一、函数的声明及基本使用

Kotlin中函数的声明,同JavaScript相似。

1.1、函数的声明

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

定义格式为:可见性修饰符 fun 函数名(参数名 :类型,...) : 返回值{}

这里的可见性修饰符请参见我的另一篇文章Kotlin——可见性修饰符详解,至于返回值以及参数请继续往下面看

例:定义一个最基本的函数

fun basis(){ ... }

注意:

上面的例子中没有可见性修饰符,那是因为Kotlin中默认为public可见性修饰符

()圆括号必须存在,即使是没有参数的情况下

{}大括号必须存在,即使是没有函数体的时候,不过在Kotlin中有一个特例就是,函数具备返回值的时候,如果只用一个表达式就可以完成这个函数,则可以使用单表达式函数。在下面会详细的给大家讲解

在函数没有返回值时可以省略其返回值

1.2、成员函数

成员函数是指在类或对象中的内部函数。你可以参见我的另一篇文章Kotlin——类详解

例:声明一个类,在类中在定义一个方法,这个方法就是这个类的成员函数

class Test{ fun foo(){} } 1.3、函数的使用

函数的使用分为两种:

普通的使用

成员函数的使用

例:

// 普通的使用 basis() // 如果函数有返回值 val x = basis() // 成员函数的使用:先初始化对象,在根据对象使用`中缀符号(.)`调用其成员函数 Test().foo() // 如果函数有返回值 val x = Test().foo() 二、函数的返回值

在Kotlin中,函数的返回值类型可以分为:

Unit类型:该类型即无返回值的情况,可以省略。

其他类型: 显示返回类型的情况

2.1、Unit类型

这个类型可以理解为函数无返回值。

例:

fun unitFun() : Unit{ println("我是返回值为Unit的函数,Unit可省略") return // return Unit 可省略 // 或者 return 可省略 } 等价于 fun unitFun(){ println("我是返回值为Unit的函数,Unit可省略") }

当无返回值时,使用平时Java语法写普通函数一样即可。不需显示写成Unit。这里只是做一个介绍而已

2.2 、其他显示返回类型的返回值

这个类型可以理解为,该函数具有返回值,并且返回值类型不能省略,并且return也不能省略

例: 定义一个返回类型为Int的函数

fun returnFun() : Int{ return 2 } 三、函数的参数

对于函数中的参数来说,这里主要分为几个模块来讲解:

具有参数的基本函数声明

默认参数,即参数具有默认值

命名参数,当传递参数的时候显示使用参数名 = 参数值

可变数量的参数:即参数的个数不定。

3.1、具有参数的函数定义

定义一个具有参数的函数,使用Pascal表示法定义,即为:name : type。其中的参数必须具有显示的参数类型,并且参数与参数之间用逗号(,)隔开。

例:

fun funArgs(numA : Int, numB : Float){ println("numA = $numA \t numB = $numB") } fun main(args: Array<String>) { funArgs(1,10f) } 3.2、默认参数

对于默认参数,即使指一个函数中的参数具有默认值,这样在使用该函数的时候,可以省略一部分参数,可以减少函数的重载

例:定义个具有默认参数的函数

fun defArgs(numA : Int = 1, numB : Float = 2f, numC : Boolean = false){ println("numA = $numA \t numB = $numB \t numC = $numC") } fun main(args: Array<String>) { // 默认参数的函数使用 defArgs() defArgs(1,10f,true) }

输出结果为:

numA = 1 numB = 2.0 numC = false numA = 1 numB = 10.0 numC = true

可以看出:当具有默认参数时,可以对是参数有默认值的参数不传递参数值。

不过这里有一点值得注意的是: 当该函数是一个成员函数时,并且该函数时覆写继承类中的方法时,则该成员函数必须从签名中省略该函数的默认值。其实这一点不必过于看重,因为在你覆写方法时,编辑器都默认会帮你实现的..

举例说明:

open class A{ open fun foo(i : Int = 10){} } class B : A(){ override fun foo(i: Int) { super.foo(i) println(i) } } fun main(args: Array<String>) { B().foo() }

输出结果为:10

如果你对类继承不了解,可以参见我的另一篇文章

3.3、命名参数

即在使用函数时显示使用参数名 = 参数值这种方式传递参数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzdfys.html