kotlin学习笔记-方法 fun

发布时间:

kotlin学习- 方法 fun

kotlin的方法和 typescript 的方法非常类似,可以说是一模一样

方法定义

关键词fun 类似 python里的 def, typescript里的 function a,b 就是2个参数 a,b 后面的冒号后面的 Int 是参数的类型, 和 typescript的类型定义一样, 和 python的 type hints 一样 括号后面的冒号后面的Int 是函数的返回值类型

fun sum(a: Int, b: Int): Int { return a + b }

方法调用

fun main() { sum(1, 2) // 这样就可以调用刚才定义的方法了 println(sum(1, 2)) // 使用println打印出方法的返回值 }

有默认值的参数

给参数设置默认值,这样在调用方法的时候,就可以不用传递这个参数了 这里给参数a,b分别默认传入了 0

fun sum(a: Int = 0, b: Int = 0): Int { return a + b } fun main() { println(sum()) // 会输出 0, 因为a,b都是默认值0 println(sum(1)) // 会输出 1, 因为a是1,b是默认值0, 只传入一个值的时候,默认会分配给第一个参数 a println(sum(1, 2)) // 会输出 3, 因为a是1,b是2 println(sum(b = 2)) // 会输出 2, 因为a是默认值0,b是2, 这里使用了命名参数,指定了b的值 println(sum(b = 2, a = 3)) // 会输出 5, 因为a是3,b是2, 这里使用了命名参数, 指定了a,b的值, 先给b指定值,再给a指定值,使用命名参数的时候,传值的顺序不重要 }

参数的长度可变、自适应

类似python里的可变参数 *args, typescript里的 剩余参数 ...args

// 可变长参数 // 接受任意长度的Int类型的参数,这些参数会被自动组装成一个数组 fun sum2(vararg args: Int) { println(args.toList()) } fun main(){ sum2(1,2,3,4) // 输出 [1, 2, 3, 4], 可以传入任意个参数 }

没有返回值的函数

这2个函数完全等价,都是没有返回值的函数

// 如果函数没有返回值,那就可以啥都不写(即不写 : Unit ),这里为了演示就写出来了 fun printSum(a: Int, b: Int): Unit { println(a + b) } // 如果函数没有返回值,那就像这样,括号后面不写冒号,也不写Unit,这样省事 fun printSum2(a: Int, b: Int) { println(a + b) }

函数的返回值是可以省略的(通常情况,它会自动推断)

不是特别花里胡哨的,都可以推断,花里胡哨的我也不知道它能不能推断出来

// 显式的、手动的定义了返回值是 Int fun sum2(a: Int, b: Int): Int { return a + b } // 没有定义返回值,但kotlin会根据函数体里面的代码,自动推断出返回值是 Int,这有时候可以让我们偷懒, //(但我觉得最好是写上,为了让代码更健壮,万一习惯了偷懒,遇到它不能推断的情况,就可能会出bug,或许是我杞人忧天) fun sum2(a: Int, b: Int) { return a + b }

单表达式函数

如果函数内部只有一个表达式,那就可以不写花括号,不写 return,直接写表达式

感觉和 JavaScript 的箭头函数一样, 只是写法不同

下面这2个函数等价

fun sum(a: Int, b: Int): Int = a + b fun sum2(a: Int, b: Int): Int {return a + b}

infix 中缀表示法

这个我感觉有些类似python里的魔法函数,但这个似乎更高级、更牛逼 这个可以用来自己创造一些语法,总之很强大,我以后要好好研究一下

// 让String类支持equalsIgnoreCase 来对比字符串是否相等,切忽略大小写 infix fun String.equalsIgnoreCase(other: String): Boolean { // 这里是this就是前面的值,也就是下方的 str1,other就是后的值,也就是str2 return this.equals(other, ignoreCase = true) } fun main() { val str1 = "helLo" val str2 = "HELLO" val str3 = "HELLO" println(str1 == str2) // 输出:false 因为大小写不一样,不相等 println(str2 == str3) // 输出:true,因为大小写一样,相当 println(str1 equalsIgnoreCase str2) // 输出:true,因为忽略大小写的情况下,他们是相等的 println(str1.equalsIgnoreCase(str2))// 输出:true,等价于上面的写法 }

2025 © 糊涂.