1.函數(shù)的定義
有名字的一段代碼塊,執(zhí)行和名字有關(guān)的功能
// 函數(shù)
fun add(x:Int, y:Int):Int{
return x+y
}
// 可以簡寫為
fun add(x: Int, y: Int) = x+y
2.可變參數(shù)修飾符 vararg
輸入的參數(shù)個(gè)數(shù)可變
fun add(vararg x: Int):Int{
var total = 0
for(i in x){
total+=i
}
return total
}
// 調(diào)用
var num = add(1, 2, 3, 4, 5)
// 調(diào)用方式2,如果參數(shù)是可變參數(shù)類型,那么可以傳入一個(gè)數(shù)組(前面加一個(gè)*)解包
var array = arrayOf(1,2,3,4,5)
var num2 = add(*array)
3.函數(shù)的作用域
3.1 成員函數(shù)
定義在類,object或者接口內(nèi)的函數(shù),也成為方法
3.2 本地函數(shù)
Kotlin允許把函數(shù)聲明在其他函數(shù)的內(nèi)部,稱之為本地函數(shù)或者嵌套函數(shù)
內(nèi)部的函數(shù)只有在外部函數(shù)內(nèi)才能生效
內(nèi)部函數(shù)可以訪問嵌套主函數(shù)的變量,不需要重新聲明
fun printArea(w: Int, h:Int){
// 聲明在函數(shù)內(nèi)部的函數(shù)
// fun area(w:Int, h:Int) = w * h
// 可以訪問嵌套主函數(shù)的變量
fun area = w * h
val area = area()
print(${area})
}
3.3 頂層函數(shù)
不屬于任何源碼文件的小集團(tuán)(class interface 對象),就像java中的靜態(tài)幫助類
4.命名參數(shù)和默認(rèn)參數(shù)
4.1命名參數(shù)
調(diào)用函數(shù)傳參時(shí)指出參數(shù)的名稱
fun area(weight: Int, height: Int) = weight*height
area(height = 2, weight = 3)
4.2 默認(rèn)參數(shù)
定義函數(shù)時(shí)給出默認(rèn)值
fun add(x:Int = 1, y:Int = 2) = x+y
5.操作符重載
有一組固定的操作符可以用作函數(shù),但是不能組合使用
要進(jìn)行操作符重載的話,需要在前面添加operator關(guān)鍵字,對應(yīng)的操作符英文單詞作為函數(shù)的名稱
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)
}
}
// 調(diào)用
val m1 = Matrix(1,2,3,4)
val m2 = Matrix(2,3,4,5)
val m1m2 = m1+m2
6.基礎(chǔ)操作符
| 操作 | 函數(shù)名 |
|---|---|
| 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 和 ()
圓括號(hào)也是操作符 對應(yīng)函數(shù)名為invoke
7.函數(shù)擴(kuò)展
像頂層函數(shù)一樣定義,直接舉例
fun Int.square() = this*this
// 調(diào)用
val num = 3
num.square()
操作符重載加上擴(kuò)展方法
operator fun String.times(int:Int):String{
var stringBuilder = StringBuilder()
// 0..100就是[0,100]
// 0 until 100 就是[0,100) 不包含結(jié)束的范圍
for(i in 0 util int){
stringBuilder.append(this)
}
return stringBuilder
}
var a = "min"
printLn(a*13)
8.泛型函數(shù)
使用泛型可以讓函數(shù)接收任意類型的參數(shù)
fun <T> outputString(a:T, b:T):String{
return "$a和$b"
}