函数重载
参数个数不同,参数类型不同。返回值不同不算重载
fun printMultiple(multipiler: Int, addValue: Int) {}
fun printMultiple(multipiler: String, addValue: String) {}
fun printMultiple(multipiler: Int, addValue: Int, thirdValue: Int) {}
如果返回类型不同,不能算重载,因此函数名不能一样
fun getValue(): Int {
return 43
}
fun getValue(): String {
return "hello world"
}
// 报错
// 上面的返回类型不一致,不能算重载
形参不能重新赋值
fun add(a: Int, b: Int): Int {
a += 1 // 报错 val cannot be reassigned
}
// 需更改为
fun add(a: Int, b: Int): Int {
val r = a + 1
}
注意第一种写法在js中是没有什么问题的。
函数作为参数和变量
作为变量赋值给另一变量时的写法要注意
fun add(a: Int, b: Int): Int {
return a + b
}
// 赋值给另一个变量
val myAdd = ::add
// 作为参数
fun printResult(addFunc: (Int, Int) -> Int, a, b) {
val result = add(a, b)
println("result: $result")
}
printResult(::myAdd, 10, 20)
::add
这个写法真有点丑 🤣
返回空值
kotlin中的返回空值使用 Unit
, 类似swift中的 Void
fun saySomething: Unit {
println("hello")
}
Lamada 表达式
这个和swift的语法比较相似
// kotlin
// 写法1
val sum: (Int, Int) -> Int = { x, y -> x + y}
println("sum: ${sum(12, 12)}")
// 写法2
val sum2 = {x: Int, y: Int -> x + y}
Swift 中的写法
// swift
let sum: (Int, Int) -> Int = {
$0 + $1
}
let sum2 = { (x: Int, y: Int) -> Int in return x + y}
类型别名 typealias
这个和swift中的用法一致
typealias operation = (Int, Int) -> Int
fun main() {
val add = {x: Int, y: Int -> x + y}
// 此处使用上面的operation 代替
fun printResult(addFunc: operation, a, b) {
val result = add(a, b)
println("result: $result")
}
}
知识点:
- 函数重载的概念,这个js中是不存在的
- 形参使用是需要注意
- 函数作为变量或者参数传递时的使用方式,
::funcName
这种写法 - 基础的lamada表达式的写法
-
typealias
的用法
2019年07月19日00:44:56
网友评论