1紫皇、輸入輸出函數(shù)
fun main() {
/**-------------------- 輸出函數(shù)println() --------------------*/
println("歡迎來到kotlin世界!")
/**-------------------- 輸入函數(shù)readLine() --------------------*/
print("請輸入第一個參數(shù):")
val a = readLine()?.toInt() ?: -1
print("請輸入第二個參數(shù):")
val b = readLine()?.toInt() ?: -1
println("$a + $b = ${a + b}")
}
2腋寨、四種函數(shù)模型
/**
* 1聪铺、無參無返回值函數(shù)(其返回值是Unit,可以不寫)
*/
fun sayHello(): Unit {
println("hello")
}
/**
* 2萄窜、有參無返回值函數(shù)(其返回值是Unit铃剔,可以不寫)
*/
fun sayHello(name: String) {
println("Hello $name")
}
/**
* 3、有參有返回值函數(shù)
*/
fun getHello(name: String): String {
return "Hello $name"
}
/**
* 4脂倦、無參有返回值函數(shù)
*/
fun getHello(): String {
return "hello"
}
fun main() {
sayHello()
sayHello("Kotlin")
println(getHello())
println(getHello("Kotlin"))
}
3番宁、頂層函數(shù)
//main函數(shù)也是頂層函數(shù)
fun main() {
}
//haha也是頂層函數(shù)
fun haha() {
}
4、嵌套函數(shù)
fun main() {
//sayHello即為嵌套函數(shù)
fun sayHello() {
println("hello")
}
sayHello()
}
5赖阻、函數(shù)表達(dá)式
fun add(a: Int, b: Int): Int {
return a + b
}
/**
* 函數(shù)表達(dá)式:函數(shù)體只有一條語句的函數(shù)就是函數(shù)表達(dá)式
*
* (1)去掉{}和return,用=連接
* (2)去掉返回類型
*/
fun add1(a: Int, b: Int) = a + b
fun sayHi() = println("Hi kotlin !")
fun max(a: Int, b: Int) = if (a > b) a else b
fun main() {
println(add(1, 2))
println(add1(10, 20))
sayHi()
println(max(5, 6))
}
6踱蠢、函數(shù)引用
fun sub(a: Int, b: Int): Int {
return if (a > b) a - b else b - a
}
fun main() {
/**-------------------- ::函數(shù)名 --------------------*/
//::sub:獲取sub函數(shù)的引用火欧,類似于c語言里的函數(shù)指針
val pSub = ::sub
/**-------------------- 使用 --------------------*/
//(1)直接調(diào)用
println(pSub(3, 5))
//(2)通過invoke調(diào)用,這種方式的好處是可以使用空安全調(diào)用符 ?.
println(pSub?.invoke(5, 3))
}
7茎截、匿名函數(shù)
fun main() {
/**
* 匿名函數(shù)(Int, Int) -> Int:代表具有兩個Int參數(shù)和返回值為Int類型的函數(shù)
*/
val pFun: (Int, Int) -> Int = { a, b -> a + b }
println(pFun(1, 2))
}
8苇侵、函數(shù)的默認(rèn)參數(shù)
/**
* 函數(shù)的默認(rèn)參數(shù)
* 1.method的默認(rèn)值為GET
* 2.如果調(diào)用的時候只傳path,則會使用method默認(rèn)值GET
* 3.調(diào)用時仍然可以傳遞method來替換默認(rèn)值
*
* 注:此處可以對比java里面的重載函數(shù)來理解企锌,可以避免寫很多重載函數(shù)榆浓。
*/
fun sendRequest(path: String, method: String = "GET") {
println("path=$path method=$method")
}
fun main() {
sendRequest("http://www.baidu.com")
//此處使用默認(rèn)的GET請求方式,結(jié)果為:path=http://www.baidu.com method=GET
sendRequest("http://www.baidu.com", "POST")
//此處使用指定的POST請求方式撕攒,結(jié)果為:path=http://www.baidu.com method=POST
}
9陡鹃、函數(shù)具名參數(shù)
/**
* 函數(shù)具名參數(shù)
* 1.具名參數(shù)是指在調(diào)用時顯示指定參數(shù)名字
* 2.使用具名參數(shù)時可以不用管參數(shù)的順序
*/
fun enqueueRequest(path: String, method: String = "GET", header: String = "UTF-8") {
println("path=$path method=$method header=$header")
}
fun main() {
enqueueRequest("http://www.baidu.com")
//結(jié)果:path=http://www.baidu.com method=GET header=UTF-8
/**-------------------- 使用具名參數(shù)調(diào)用函數(shù) --------------------*/
enqueueRequest(path = "http://www.baidu.com")
//結(jié)果:path=http://www.baidu.com method=GET header=UTF-8
enqueueRequest(path = "http://www.baidu.com", method = "POST")
//結(jié)果:path=http://www.baidu.com method=POST header=UTF-8
enqueueRequest(header = "GBK", method = "POST", path = "http://www.baidu.com")
//結(jié)果:path=http://www.baidu.com method=POST header=GBK
}
10烘浦、函數(shù)可變參數(shù)
/**
* 1.vararg關(guān)鍵字修飾參數(shù)即為可變參數(shù)
* 2.其參數(shù)類型變成對應(yīng)的數(shù)組類型
*
* 注:對比于java里面的:int... x
* 求n個Int數(shù)據(jù)的和
*/
fun add(vararg x: Int): Int {
//這里的x的數(shù)據(jù)類型為IntArray
var result = 0
x.forEach {
result += it
}
return result
}
fun main() {
val result = add(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
println("result=$result")
//result=45
}