美文网首页
#4 kotlin 函数

#4 kotlin 函数

作者: JamesSawyer | 来源:发表于2019-07-19 01:47 被阅读0次

函数重载

参数个数不同,参数类型不同。返回值不同不算重载

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

相关文章

网友评论

      本文标题:#4 kotlin 函数

      本文链接:https://www.haomeiwen.com/subject/pfydlctx.html