本人情况:学习安卓开发一段时间,主要集中在使用Java进行基础开发。随着学习深入,意识到安卓开发不仅仅局限于Java,还需要学习Kotlin语言------Google官方推荐的新语言,未来还会学习比如Jetpack Compose等新的开发框架。为了更好地跟进这些变化,我决定在这里总结自己的学习进展。
本文将简单介绍Kotlin的特点、语法基础、控制流和函数变量等内容,希望能快速掌握这门语言的基础知识。当然,学习Kotlin,最好需要Java语言基础,这两者密不可分。
Kotlin的特点与历史
1. Kotlin 特点
简洁与易读性:Kotlin 比 Java 更简洁,能减少代码量,避免冗余,提供了更加简洁和清晰的语法。比如,它不需要像 Java 一样定义大量的 getter 和 setter 方法。
互操作性:Kotlin 与 Java 完全兼容,可以无缝地与现有的 Java 代码进行交互。你可以在 Kotlin 中调用 Java 类库,也可以在 Java 中使用 Kotlin 编写的代码。
空安全:Kotlin 的空安全特性帮助避免了空指针异常(NullPointerException)。通过类型系统,Kotlin 强制要求开发者显式处理可能为空的变量,这减少了很多潜在的运行时错误。
扩展函数:Kotlin 支持扩展函数,可以在不修改现有类的情况下,给类添加新的方法。这使得开发者能够增强库或框架的功能,而无需继承或修改原始类。
Lambda 表达式与函数式编程支持:Kotlin 提供了对函数式编程风格的支持,支持 Lambda 表达式、高阶函数、集合操作等,使得开发者能够写出更简洁和灵活的代码。
类型推导:Kotlin 提供强大的类型推导机制,开发者无需显式指定类型,编译器会自动推断变量类型,简化了代码的书写。
2. Kotlin 历史
创建背景:Kotlin 由 JetBrains 团队于 2011 年首次发布,旨在解决 Java 编程语言中的一些痛点,特别是在开发现代应用时所面临的繁琐代码和复杂性。
2017 年成为官方安卓开发语言:Kotlin 的一个重要里程碑是在 2017 年,Google 宣布将 Kotlin 作为 Android 开发的官方语言。这标志着 Kotlin 得到了广泛的认可和应用,尤其是在安卓开发社区中。
支持多平台开发:Kotlin 不仅适用于安卓开发,随着 Kotlin Multiplatform(KMP)项目的发展,Kotlin 也逐渐支持跨平台开发,可以用于 iOS、Web 和后端开发等多个平台。
Kotlin语法基础
Kotlin的语法设计非常现代化,简洁且易于理解。它可以轻松上手,并且不需要过多的模板代码。
**1.**变量的声明与使用
Kotlin 是一种强类型语言,所有变量都必须有确定的类型。Kotlin 的类型系统既安全又简洁,支持类型推断(无需显式声明类型),同时也提供完整的类型控制。
Kotlin
fun main() {
val name = "Kotlin" // 不可变
var age = 5 // 可变
age += 1
println("$name 语言已经 $age 岁了")
}
Kotlin 能自动推断变量类型。若希望明确类型,可写成下面的。
Kotlin
val height: Double = 1.75
var count: Int = 10
**2.**数字类型介绍
Kotlin的类型系统十分丰富,支持基本数据类型、集合类型、字符串等,和Java一致。
Byte(8 位)取值范围:-128 到 127
Short(16 位)取值范围:-32768 到 32767
Int(32 位)取值范围:-2,147,483,648 到 2,147,483,647
Long(64 位)取值范围极大:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807,结尾必须加 L(大写字母)
Kotlin
fun main() {
var a = 10
var b = 3
println("加法: ${a + b}")
println("减法: ${a - b}")
println("乘法: ${a * b}")
println("除法: ${a / b}")
println("取余: ${a % b}")
a += 5
println("a 增加后为 $a")
a++
println("a 自增后为 $a")
}
引用需要用 $变量 或 ${表达式}。
3.布尔类型介绍
布尔类型只有两个值:true 与 false。
Kotlin
fun main() {
val isKotlinFun: Boolean = true
val isJavaHard = false
println("Kotlin 有趣吗?$isKotlinFun")
println("Java 难吗?$isJavaHard")
val result = isKotlinFun && !isJavaHard
println("结论:Kotlin 是最棒的?$result")
}
4.字符类型介绍
Char 表示单个字符,用单引号包围。
Kotlin
fun main() {
val letter: Char = 'A'
val digit = '5'
val symbol = '#'
println(letter)
println(digit)
println(symbol)
// 判断字符类型
println("是否为字母: ${letter.isLetter()}")
println("是否为数字: ${digit.isDigit()}")
}
5.字符串类型介绍
Kotlin 的字符串是 String 类型,支持模板表达式与多行字符串。
Kotlin
fun main() {
val name = "Crogin"
val age = 20
println("我的名字是 $name,今年 $age 岁。")
}
多行字符串。
Kotlin
fun main() {
val text = """
Kotlin 是一种现代编程语言,
支持函数式和面向对象编程,
并且完全兼容 Java。
"""
println(text)
}
字符串有许多方法,一下是一些可以用到的。
Kotlin
fun main() {
val str = "Kotlin"
println(str.length) //输出字符串长度 (6)
println(str.uppercase()) //输出大写形式
println(str.lowercase()) //输出小写形式
println(str.contains("lin")) //检查是否包含 "lin" 子串
println(str.substring(0, 3)) //输出子串,从索引0到3
println(str.reversed()) // 字符串反转
println(str.first()) // 第一个字符
println(str.last()) // 最后一个字符
println(str.drop(2)) // 删除前两个字符
}
**3.**控制流
控制流语句用于控制程序的执行流程,Kotlin提供了丰富的控制流语句,如条件语句**if、else、when** ,以及循环语句**for、while**等。
1.条件语句:if
与其他编程语言类似,if语句用于根据条件执行不同的代码块。
Kotlin
val number = 10
if (number > 5) {
println("数字比5大")
} else {
println("比5小")
}
控制流语句在当每个分支代码只有一行的时候,可以直接省略{}
Kotlin
fun main() {
val score = 2
if (score >= 90)
println("优秀")
else if (score >= 70)
println("良好")
else if (score >= 60)
println("及格")
else
println("不及格")
}
除了直接执行语句之外,我们也可以将if和else用作结果判断,对于多行代码块的情况,默认最后一行作为返回的结果,比如:
Kotlin
fun main() {
val score = 70
val res = if (score > 60) "Yes" else "No"
}
fun main() {
val score = 80
val res = if (score > 60) {
println("居然捞你了")
"Yes" //代码块默认最后一行作为返回结果
} else {
println("挂科吧")
"No"
}
}
2.条件语句:when
when作为Kotlin的条件语句,类似于Java的switch语句,但更加灵活。when可以处理更复杂的条件,可以直接使用表达式而不是常量。
Kotlin
fun main() {
val grade = 'A'
when (grade) {
'A' -> println("很好")
'B' -> println("合格")
'C' -> println("不及格")
else -> println("啥也不是") //如果以上条件都不满足,就进入else中
}
}
when不仅支持值匹配,还支持范围匹配和类型检查,极大地提高了灵活性。
Kotlin
fun main() {
val score = 95
when (score) {
in 90..100 -> println("很好") //使用in判断目标变量值是否在指定范围内
in 70..89 -> println("不错")
in 50..69 -> println("合格")
else -> println("啥也不是")
}
}
有时候我们可能希望某些值都属于同一个情况,可以使用逗号将其条件组合成一行。
Kotlin
fun main() {
val x : Int = 10
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("其他。。。。")
}
}
写when的流程代码时候,都会加上else防止意外,当然除了布尔类型可以不写else分支,因为只有0和1。
Kotlin
fun main() {
val a = true
val result = when (a) {
false -> 0
true -> 1
}
println(result)
}
3.循环语句:for
Kotlin 的 for 循环可用于遍历区间、数组或集合,比 Java 更直观简洁。
Kotlin
fun main() {
for (i in 1..10) //1..10表示1~10这个区间
println("打印$i")
for (i in 1..10 step 2) { //step跳步,每次循环+2
println(i) // 1,3,5,7,9
}
for (i in 10 downTo 1) {
println(i) //10到1倒着来
}
for (i in 0..10)
for (j in 0..2)
println("外层$i,内层$j")
for (i in 1 until 5) { //左闭右开,输出1 2 3 4
println(i)
}
}
遍历集合与索引
Kotlin
fun main() {
val fruits = listOf("苹果", "小米", "华为")
for ((index, fruit) in fruits.withIndex()) {
println("索引 $index 对应 $fruit")
}
}
我们也可以在循环过程中提前终止或是加速循环的进行
Kotlin
for (i in 0..10) {
if (i == 1) continue //比如i等于1时跳过这一轮,不执行打印
println("i的值为 $i")
}
continue关键字来跳过本次循环。这里的跳过是指,在循环体中,无论后面有没有未执行的代码,一律不执行,比如上面的判断如果成功,那么将执行continue进行跳过,虽然后面还有打印语句,但是不会再去执行了,而是直接结束当前循环,开启下一轮。
但是在某些情况下,我们可能希望提前结束循环。
Kotlin
fun main() {
for (i in 0..2) {
if (i == 1) break //当i等于1时提前结束
println("i的值 $i")
}
}
想要终止或者是加速外层循环,我们可以为循环语句打上标记。
Kotlin
fun main() {
outer@ for (i in 10..30) { //outer@ 来进行标记
inner@ for (j in 1..30) {
if (i == j) break@outer
//break后紧跟要结束的循环标记,当i == j时终止外层循环
println("$i, $j")
//输出为 10,1 10,2 ...... 10,9
}
}
}
4.循环结构:while
while 循环会在每次执行前先判断条件是否为真。和for循环一样,while也支持使用break和continue来进行循环的控制,以及嵌套使用。
Kotlin
fun main() {
var i = 50
while (i > 0) { //只要大于0那么就可以继续执行
if (i < 10) break //达到条件就结束
println(i)
i /= 2
}
}
也可以先执行循环内容,然后再做循环条件判断,这里要用到do-while语句,其至少会执行一次循环体。
Kotlin
fun main() {
var x = 0
do {
println("x = $x")
x++
} while (x < 3)
}
4.总结
到这里,我们已经能看懂 Kotlin 的基础语法和逻辑结构了。接下来,就该让代码真正"动"起来了。
下一节,我们会讲解Kotlin的函数。