函数

1.函数的定义

有名字的一段代码块,执行和名字有关的功能

// 函数
fun add(x:Int, y:Int):Int{
  return x+y
}
// 可以简写为
fun add(x: Int, y: Int) = x+y

2.可变参数修饰符 vararg

输入的参数个数可变

fun add(vararg x: Int):Int{
  var total = 0
  for(i in x){
    total+=i
  }
  return total
}
// 调用
var num = add(1, 2, 3, 4, 5)
// 调用方式2,如果参数是可变参数类型,那么可以传入一个数组(前面加一个*)解包
var array = arrayOf(1,2,3,4,5)
var num2 = add(*array)

3.函数的作用域

3.1 成员函数

定义在类,object或者接口内的函数,也成为方法

3.2 本地函数

Kotlin允许把函数声明在其他函数的内部,称之为本地函数或者嵌套函数
内部的函数只有在外部函数内才能生效
内部函数可以访问嵌套主函数的变量,不需要重新声明

fun printArea(w: Int, h:Int){
  // 声明在函数内部的函数
  // fun area(w:Int, h:Int) = w * h
  // 可以访问嵌套主函数的变量
  fun area = w * h
  val area = area()
  print(${area})
}
3.3 顶层函数

不属于任何源码文件的小集团(class interface 对象),就像java中的静态帮助类

4.命名参数和默认参数

4.1命名参数

调用函数传参时指出参数的名称

fun area(weight: Int, height: Int) = weight*height
area(height = 2, weight = 3)
4.2 默认参数

定义函数时给出默认值
fun add(x:Int = 1, y:Int = 2) = x+y

5.操作符重载

有一组固定的操作符可以用作函数,但是不能组合使用
要进行操作符重载的话,需要在前面添加operator关键字,对应的操作符英文单词作为函数的名称

class Matrix(val a: Int, val b:Int, val c:Int, val d:Int){
   operator fun plus(m: Matrix): Matrix{
     return Matrix(a+m.a, b+m.b, c+m.c, d+m.d)
  }
}
// 调用
val m1 = Matrix(1,2,3,4)
val m2 = Matrix(2,3,4,5)
val m1m2 = m1+m2

6.基础操作符

操作 函数名
a + b a.plus(b)
c - d c.minus(d)
e * f e.times(f)
g / h g.div(h)
i % j i.mod(j)
k..m k.rangeTo(m)
6.1 in 和 contains()
6.2 invoke 和 ()

圆括号也是操作符 对应函数名为invoke

7.函数扩展

像顶层函数一样定义,直接举例

fun Int.square() = this*this
// 调用
val num = 3
num.square()

操作符重载加上扩展方法

operator fun String.times(int:Int):String{
  var stringBuilder = StringBuilder()
  // 0..100就是[0,100]
  // 0 until 100 就是[0,100) 不包含结束的范围
  for(i in 0 util int){
    stringBuilder.append(this)
  }
  return stringBuilder
}

var a = "min"
printLn(a*13)

8.泛型函数

使用泛型可以让函数接收任意类型的参数

fun  outputString(a:T, b:T):String{
  return "$a和$b" 
}

你可能感兴趣的:(函数)