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 <T> outputString(a:T, b:T):String{
return "$a和$b"
}