在 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 {
return text?.length ?: 0
}
when
多于两个分支的逻辑
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
3
逆序迭代
for (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 表达式,强制要求逻辑分支完整,让你写出来的逻辑永远不会有漏洞。

原文始发于微信公众号(君伟说):Kotlin学习笔记基础知识篇
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/115126.html