在 Kotlin 里,一切都是对象。变量声明
Kotlin中使用“val”或者是“var”这样的关键字作为开头,后面跟“变量名称”,接着是“变量类型”和“赋值语句”,最后是分号结尾。
关键字 变量类型
var price: Int = 100; /*
变量名 变量值 */
在 Kotlin 当中,我们应该尽可能避免使用 var,尽可能多地去使用 val。
val 声明的变量,我们叫做不可变变量,它的值在初始化以后就无法再次被修改,它相当于 Java 里面的 final 变量。
var 声明的变量,我们叫做可变变量,它对应 Java 里的普通变量。
Kotlin 强制要求开发者在定义变量的时候,指定这个变量是否可能为 null。 数字类型 Java 可以隐式转换数字类型,而 Kotlin 更推崇显式转换。
函数声明
关键字 函数名 参数类型 返回值类型
fun helloFunction(name: String): String {
return "Hello $name !"
花括号内为:函数体
使用了fun 关键字来定义函数;
函数名称,使用的是驼峰命名法(大部分情况下);
函数参数,是以 (name: String) 这样的形式传递的,这代表了参数类型为 String 类型;
返回值类型,紧跟在参数的后面;
最后是花括号内的函数体,它代表了整个函数的逻辑。
fun helloFunction(name: String): String = "Hello $name !"
这种写法,我们称之为单一表达式函数。需要注意的是,在这种情况下,表达式当中的“return”是需要去掉的。
函数调用helloFunction(name = "Kotlin")
命名参数。简单理解,就是它允许我们在调用函数的时候传入“形参的名字”。 Kotlin 还支持参数默认值。
流程逻辑判断 if
Kotlin 针对这种情况就提供了一种简写,叫做 Elvis 表达式。
fun getLength(text: String?): Int {when
return text?.length ?: 0
多于两个分支的逻辑
val i: Int = 1
when(i) {
1 -> print("一")
2 -> print("二")
else -> print("i 不是一也不是二")
}
输出结果:
一
也可以作为表达式
val i: Int = 1
val message = when(i) {
1 -> "一"
2 -> "二"
else -> "i 不是一也不是二" // 如果去掉这行,会报错
}
print(message)
注意点:与 switch 不一样的是,when 表达式要求它里面的逻辑分支必须是完整的。
for循环 基础迭代遍历val array = arrayOf(1, 2, 3)区间
for (i in array) {
println(i)val oneToThree = 1..3 // 代表 [1, 3]
for (i in oneToThree) {
println(i)
}
输出结果:逆序迭代
1
2
3for (i in 6 downTo 0 step 2) {
println(i)
}
输出结果:改进之处
6
4
2
0
相对Java来说,Kotlin的改进有以下几点:
支持类型推导;
代码末尾不需要分号;
字符串模板;
原始字符串,支持复杂文本格式;
单一表达式函数,简洁且符合直觉;
函数参数支持默认值,替代 Builder 模式的同时,可读性还很强;
if 和 when 可以作为表达式。
强制区分“可为空变量类型”和“不可为空变量类型”,规避空指针异常;
推崇不可变性(val),对于没有修改需求的变量,IDE 会智能提示开发者将“var”改为“val”;
基础类型不支持隐式类型转换,这能避免很多隐藏的问题;
数组访问行为与集合统一,不会出现 array.length、list.size 这种恼人的情况;
函数调用支持命名参数,提高可读性,在后续维护代码的时候不易出错;
when 表达式,强制要求逻辑分支完整,让你写出来的逻辑永远不会有漏洞。
热门跟贴