函数定义
关键字:fun
- 指定返回类型:fun sum(a : Int,b : Int): Int{ return a+b}
- 不指定返回类型:fun sum2(a:Int,b: Int) = a+b
- 无返回类型:fun sum4(a:Int,b: Int) { println(a+b)}
- 多个参数:
fun varargsum(vararg va : Int): Int {
var result = 0
for (v in va) {
result += v
}
return result
}
-匿名函数(Lambda):var sumLambda:(Int,Int) -> Int = {x,y -> x+y}
常量&变量定义
变量关键字:var ( 值可变)
- 简单定义:var name : type = value -> var a : Int = 0
- var b = 5
常量关键字:val (定义后不能重新赋值)
- 简单定义:val name : type = value -> var a : Int = 0
- 直接定义:val a = 1 (自动识别类型)
- 先定义再赋值: val a : Int // a = 0
字符串
var a = 1
var s1 = “num is $a” => num is 1
var s2 = “${s1.substring(0,3)},substring 3” => num,substring 3
Null 检查机制
var age: String? = "23" //类型后面加?表示可为空
val ages = age!!.toInt() //抛出空指针异常
val ages1 = age?.toInt() //不做处理返回 null
val ages2 = age?.toInt() ?: -1 //age为空返回-1
当一个引用可能为 null 值时, 对应的类型声明必须明确地标记为可为 null。当 str 中的字符串内容不是一个整数时, 返回 null:
fun parseInt(str: String): Int? {
// ...
}
******************************
val x = parseInt(args[0])
val y = parseInt(args[1])
// 直接使用 `x * y` 会导致错误, 因为它们可能为 null.
if (x != null && y != null) {
// 在进行过 null 值检查之后, x 和 y 的类型会被自动转换为非 null 变量
print(x * y)
}
类型检测及自动类型转换
关键字: is 类似于instanceof
Any 类比于 Object 类 但是并不一样
if (obj is String) {
// 做过类型判断以后,obj会被系统自动转换为String类型
return obj.length
}
fun getStringLength(obj: Any): Int? {
if (obj !is String)
return null
// 在这个分支中, `obj` 的类型会被自动转换为 `String`
return obj.length
}
fun getStringLength(obj: Any): Int? {
// 在 `&&` 运算符的右侧, `obj` 的类型会被自动转换为 `String`
if (obj is String && obj.length > 0)
return obj.length
return null
}
区间
- 区间:关键字 : ..
- 跳过多少项:关键字:step (原本是1步,step 2 意思就是中间隔一个)
- 从高到低:关键字downTo
for(i in 1..4) print(" $i") //输出 1 2 3 4
for(i in 1..8 step 2) print(" $i") //输出 1 3 5 7
for (i in 4 downTo 1 ) print(" $i") //输出 4 3 2 1
for (i in 8 downTo 1 step 2) //输出 8 6 4 2
一个对象实例调用多个方法(with)
关键字:with
val mString = "abc"
with(mString){
println(length) // 3
println(subSequence(0,2)) // ab
}
交换两个值
var a = 1
var b = 2
a = b.also { b = a }
可空布尔值
val b: Boolean? = ……
if (b == true) {
……
} else {
// `b` 是 false 或者 null
}
学习资料
菜鸟教程: https://www.runoob.com/kotlin/kotlin-basic-syntax.html