1、输入输出函数
fun main() {
/**-------------------- 输出函数println() --------------------*/
println("欢迎来到kotlin世界!")
/**-------------------- 输入函数readLine() --------------------*/
print("请输入第一个参数:")
val a = readLine()?.toInt() ?: -1
print("请输入第二个参数:")
val b = readLine()?.toInt() ?: -1
println("$a + $b = ${a + b}")
}
2、四种函数模型
/**
* 1、无参无返回值函数(其返回值是Unit,可以不写)
*/
fun sayHello(): Unit {
println("hello")
}
/**
* 2、有参无返回值函数(其返回值是Unit,可以不写)
*/
fun sayHello(name: String) {
println("Hello $name")
}
/**
* 3、有参有返回值函数
*/
fun getHello(name: String): String {
return "Hello $name"
}
/**
* 4、无参有返回值函数
*/
fun getHello(): String {
return "hello"
}
fun main() {
sayHello()
sayHello("Kotlin")
println(getHello())
println(getHello("Kotlin"))
}
3、顶层函数
//main函数也是顶层函数
fun main() {
}
//haha也是顶层函数
fun haha() {
}
4、嵌套函数
fun main() {
//sayHello即为嵌套函数
fun sayHello() {
println("hello")
}
sayHello()
}
5、函数表达式
fun add(a: Int, b: Int): Int {
return a + b
}
/**
* 函数表达式:函数体只有一条语句的函数就是函数表达式
*
* (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、函数引用
fun sub(a: Int, b: Int): Int {
return if (a > b) a - b else b - a
}
fun main() {
/**-------------------- ::函数名 --------------------*/
//::sub:获取sub函数的引用,类似于c语言里的函数指针
val pSub = ::sub
/**-------------------- 使用 --------------------*/
//(1)直接调用
println(pSub(3, 5))
//(2)通过invoke调用,这种方式的好处是可以使用空安全调用符 ?.
println(pSub?.invoke(5, 3))
}
7、匿名函数
fun main() {
/**
* 匿名函数(Int, Int) -> Int:代表具有两个Int参数和返回值为Int类型的函数
*/
val pFun: (Int, Int) -> Int = { a, b -> a + b }
println(pFun(1, 2))
}
8、函数的默认参数
/**
* 函数的默认参数
* 1.method的默认值为GET
* 2.如果调用的时候只传path,则会使用method默认值GET
* 3.调用时仍然可以传递method来替换默认值
*
* 注:此处可以对比java里面的重载函数来理解,可以避免写很多重载函数。
*/
fun sendRequest(path: String, method: String = "GET") {
println("path=$path method=$method")
}
fun main() {
sendRequest("http://www.baidu.com")
//此处使用默认的GET请求方式,结果为:path=http://www.baidu.com method=GET
sendRequest("http://www.baidu.com", "POST")
//此处使用指定的POST请求方式,结果为:path=http://www.baidu.com method=POST
}
9、函数具名参数
/**
* 函数具名参数
* 1.具名参数是指在调用时显示指定参数名字
* 2.使用具名参数时可以不用管参数的顺序
*/
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")
//结果:path=http://www.baidu.com method=GET header=UTF-8
/**-------------------- 使用具名参数调用函数 --------------------*/
enqueueRequest(path = "http://www.baidu.com")
//结果:path=http://www.baidu.com method=GET header=UTF-8
enqueueRequest(path = "http://www.baidu.com", method = "POST")
//结果:path=http://www.baidu.com method=POST header=UTF-8
enqueueRequest(header = "GBK", method = "POST", path = "http://www.baidu.com")
//结果:path=http://www.baidu.com method=POST header=GBK
}
10、函数可变参数
/**
* 1.vararg关键字修饰参数即为可变参数
* 2.其参数类型变成对应的数组类型
*
* 注:对比于java里面的:int... x
* 求n个Int数据的和
*/
fun add(vararg x: Int): Int {
//这里的x的数据类型为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
}
网友评论