Kotlin基础
引言
Kotlin是一种非常简洁的语言,它省略了java中许多繁重的写法。
基本语法
入门必学
- 可变类型var,不可变类型val
- 函数定义
例如:fun 函数名(arg1: type1, arg2: type2) : returnType{ return returnValue }
或者fun add(i: Int, j: Int): Int{ return i + j }
fun add(i: Int,j Int): Int = i + j
- 变长参数列表
fun add(vararg list:Int): Int{ var result = 0 for (i:Int in list){ result += i } return result }
- lombda表达式函数
var add: (Int, Int) -> Int = {i,j -> i + j}
- 模式匹配
val age = 100 val name = "张启灵" println("$name的年龄是$age")
- 空指针避免调用,在Kotlin中可通过?来进行空指针避免调用,注意,这里函数的参数为String?,也就意味着参数可null,如果msg:String,那么在调用时是不能传可能为null的值的。此外,Kotlin使用java中的变量或方法,都需要进行?处理
fun printMsg(msg:String?) { msg?.length // 如果msg==null,这句话不会被调用 }
- 空指针二目
fun printMsg(msg:String?) { println(msg?:"default value") // 若msg为空,则打印default value,否则打印msg }
- 不管是否为空,强制传值
printMsg(msg!!) // 这种情况需要msg一定不为null,否则会发生空指针异常
- 函数返回值可能为null
fun getValue():String? = value // 这个value肯能为null
遍历
- 普通循环
vs javafor (i:Int in 1..9)
for (int i = 1; i <= 9; i++)
- 倒序循环
vs javafor (i:Int in 9 downTo 1)
for (int i = 9;i >= 1; i--)
- 循环增加step
vs javafor (i:Int in 1..20 step 2) { println(i) }
for (int i = 0; i <= 20; i+= 2)
- 包头不包尾
vs javafor (i:Int in 1 until 10)
for (int i = 0; i < 10; i++)
数组
通过arrayOf和Array构造函数定义数组
val numbers:Array<Int> = arrayOf(1,2,3,4,5)
for(i:Int in numbers) { println(i) }
val numbers2:Array<Int> = Array(20, {value: Int->(value + 1000)})
for(i:Int in numbers2) { println(i) } // 结果都加了1000
表达式
var maxValue:Int = if (number1 > number2) num1 else num2
var minValue:Int = if (number1 < number2) {
number1
} else {
number2
}
in关键字
用于判断是否在一个数组中
if (x in array) {
//..
}
if(x in 1..9) {
// ..
}
when
when通常用于代替if else if
var number = 5
when (number) {
1-> {//..}
2-> {//..}
//..
5-> {//..}
}
when (number) {
in array1 -> //..
in array2 -> //..
}
//还可以把when赋值给一个表达式
var result = when (number) {
5 -> {"星期五"}
else -> "周末"
}
多重循环
通过T@进行标记,类似于java中的Label
T@
for(i:Int in array1){
for(j:Int in array2){
break@T
}
}
集合
集合和数组的定义很类似
var items:list<String> = listOf<String>("a","b","c")
//遍历
for(item:String in items){
println(item)
}
items.forEach{
println(it)
}
for(index in items.indices){
println("下标:$index,对应的值,${item[index]}")
}
延迟加载lateint/lazy
lateinit
lateint var a:String //这种方式可以不需要在定义时初始化
val a2:String by lazy{ //lazy也是懒加载的一种方式,但只能给val用,在第一次被调用时初始化
"str"
}
总结
本节主要描述了Kotlin的简单使用,如空处理、函数、循环、懒加载、数组、in、when等