Kotlin 学习笔记:基本语法和函数
2018-12-26 本文已影响0人
nxiangbo
Kotlin学习笔记:概述
Kotlin学习笔记:基本语法和函数
Kotlin学习笔记:类和接口
Kotlin学习笔记:lambda编程
Kotlin学习笔记:类型系统
Kotlin学习笔记:泛型
Kotlin学习笔记:注解和反射
- 变量
val str = "hello" // val修饰的变量是不可变的,相当于java的final变量
var count = 12 // var修饰的变量 是可变的
- when表达式代替switch语句
fun getMnemonic(color: Color) =
when (color) {
Color.RED -> "Richard"
Color.ORANGE -> "Of"
Color.YELLOW -> "York"
Color.GREEN -> "Gave"
Color.BLUE -> "Battle"
Color.INDIGO -> "In"
Color.VIOLET -> "Vain"
}
>>> println(getMnemonic(Color.BLUE))
Battle
- if() else是表达式。说明if() else 可以作为赋值给变量,也可以作为返回值。
fun main(args: Array<String>) {
val name = if (args.size > 0) args[0] else "Kotlin"
println("Hello, $name!")
}
函数
image.png声明函数的语法
函数声明语法Kotlin也有与Java相对应的main函数,定义方式如下
fun main(args: Array<String>) {
println("hello Kotlin")
}
参数
- 命名参数
- 支持默认参数值
假如需要写一个在list列表中将元素用分隔符分割并打印以String类型打印的功能。
一般情况下,可以这样写。
fun <T>joinToString(collection: Collection<T>,
separator: String,
prefix: String,
suffix: String): String{
val result = StringBuilder(prefix)
for((index, element) in collection.withIndex()) {
if (index >0) result.append(separator)
result.append(element)
}
result.append(suffix)
return result.toString()
}
为了解决过度重载的问题,可以使用默认参数值。
fun <T>joinToString(collection: Collection<T>,
separator: String=",",
prefix: String="",
suffix: String=""): String{
val result = StringBuilder(prefix)
for((index, element) in collection.withIndex()) {
if (index >0) result.append(separator)
result.append(element)
}
result.append(suffix)
return result.toString()
}
可以使用以下方式调用
joinToString(list)
joinToString(list, ";")
顶层函数
在Java中经常会用到一些工具类,这些工具类中往往都是静态方法,没有类的实例对象,例如Jdk中的Collections类,以及我们自己定义的一些放在util包下的工具类。在Kotlin中,完全不需要这些类。Kotlin引入了顶层函数,可以替代静态类。
那么如何定义顶层函数呢?
创建一个Kotlin文件,然后将函数添加进去即可。以joinToString为例,
fun <T>joinToString(...): String{
....
}
等价于
/* Java */
package strings;
public class JoinKt {
public static String joinToString(...) { ... }
}
扩展函数
定义:函数定义在类的外部,但可以像调用该类的成员函数一样调用
- 扩展函数的语法
接收者类型:要扩展类或接口的名称,放到要添加的函数前。
接收者对象:用来调用扩展函数的对象
扩展函数声明- 扩展函数如何调用及优点
扩展函数可以在不更改原来类的情况下,对类的方法进行拓展。扩展函数可以像被扩展类的方法一样调用。
举例来讲,自定义一个String类的扩展函数lastChar,该函数可以取字符串的最后一个字符。
fun String.lastChar(): Char = get(length-1)
在Kotlin代码中调用
import com.nxiangbo.kotlin_learning.function.lastChar
"str".lastChar()
在Java代码中调用
import com.nxiangbo.kotlin_learning.function.FunctionLearnKt;
public class FunctionTest {
public void Test(){
FunctionLearnKt.lastChar("str");
}
}
- 扩展函数能做什么
在Kotlin标准库中,大量使用扩展函数。例如,String等