Kotlin 函数

比眉伴天荒 2022-05-08 10:58 308阅读 0赞

kotlin中函数的定义是通过关键字fun来完成的。其基本的语法格式如下:

  1. fun funName(param : paramType,..) : returnType{
  2. function body
  3. }

示例:

  1. fun printHello(username: String): String {
  2. print("Hi,$username ,Welcome to Kotlin!\n")
  3. return "Mr $username"
  4. }
  5. var username = "Jack"
  6. print(printHello(username))

输出:

  1. Hi,Jack ,Welcome to Kotlin!
  2. Mr Jack

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

  1. fun printHello(username: String, exponent: Int) { …… }

在函数的使用过程中,我们经常会使用到带默认参数的函数,函数参数可以有默认值,当省略相应的参数时使用默认值。与其他语言相比,这可以减少重载数量:

  1. fun defaultParams(stuCount: Int = 10, grade: Int) {
  2. print("Grade$grade have $stuCount students \n")
  3. }

这是一个带有默认参数的函数,我们试着按照下面的方式调用函数:

  1. defaultParams(15)

结果产生了编译错误:
在这里插入图片描述

从上面的图中大家也都知道原因了,在匹配函数的参数时与参数的申明顺序有关。当然了,若果我们把默认参数放在函数参数的末尾就不会有问题了。

  1. fun defaultParams(grade: Int, stuCount: Int = 10)

编译器获得我们传入的参数,第一个赋值给参数grade,然后发现stuCount参数并没有值传递进来就会使用默认值。

那么还有其他的方法可以解决这个问题吗?

可以在调用函数时使用命名的函数参数,使用命名参数我们可以使代码更具有可读性,当一个函数有大量的参数或默认参数时这会非常方便。

拿上面的例子来说,我们只需要在传入参数的时候指定给哪个参数传递即可。
在上面的例子中,我们通过定义函数时的参数名称来显示的指定该参数值。
在这里插入图片描述

接下来我们需要任何一个新的关键字:
vararg --允许一个参数传入可变数量的参数

也就是说我们传递一个可变的参数时,可以使用vararg关键字声明即可。当然了,习惯性的写法是将可变参数放在末尾,如果有特殊需求大家记得可以使用刚刚提到的命名参数来使用。

  1. fun variedParamet(language: String, vararg students: String) {
  2. print("Language:$language\nStudents:")
  3. students.iterator().forEach {
  4. print("$it ")
  5. }
  6. }
  7. variedParamet("Kotlin", "zhaosi", "zhangsan", "wangwu")

输出:

  1. Language:Kotlin
  2. Students:zhaosi zhangsan wangwu

由于students是一个变长参数,我们可以使用for等可以语句循环的处理我们需要的数据。

我们还可以通过使用星号操作符(*)将可变数量参数(vararg) 以命名形式传入:

  1. variedParamet("Kotlin",students = *arrayOf("zhaosi","zhangsan","wangwu"))

写法是等价的,当然了由于students 在末尾即使不使用命名参数也是可以正常运行的。

函数返回值
如果一个函数不返回任何有用的值,它的返回类型是 Unit。Unit 是一种只有一个值——Unit 的类型。这个值不需要显式返回。

我们可以看下这个Unit类型到底是什么东西,说白了其实就是我们常见的void类型:

  1. /**
  2. * The type with only one value: the Unit object. This type corresponds to the
  3. * `void` type in Java.
  4. */
  5. public object Unit {
  6. override fun toString() = "kotlin.Unit"
  7. }

很简单就是一个字符串,如果你试着输出它的结果:

  1. kotlin.Unit

示例:

  1. fun back() {
  2. print("back function\n")
  3. }

单表达式函数
当函数返回单个表达式时(也就是只有一条语句),可以省略花括号并且在 = 符号之后指定代码体即可:
fun double(x: Int): Int = x * 2

当返回值类型可由编译器推断时,显式声明返回类型是可选的:
fun double(x: Int) = x * 2

显式返回类型

具有块代码体的函数必须始终显式指定返回类型,除非他们旨在返回 Unit,在这种情况下它是可选的。 Kotlin
不推断具有块代码体的函数的返回类型,因为这样的函数在代码体中可能有复杂的控制流,并且返回类型对于读者(有时甚至对于编译器)是不明显的。

发表评论

表情:
评论列表 (有 0 条评论,308人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Kotlin函数

    函数和方法指的是同一个东西 语法规则 fun(function的简写)是定义函数的关键字,无论定义什么函数,都需要用fun来声明 fun后面是方法名,可以随意起,但是