Kotlin 基础语法(保姆级教程)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
在移动开发与后端编程领域,Kotlin 作为一门现代化的静态类型编程语言,凭借其简洁性、安全性及与 Java 的无缝兼容性,逐渐成为开发者首选的工具之一。对于编程初学者而言,掌握 Kotlin 的基础语法是迈向专业开发的第一步;而对于中级开发者来说,深入理解其语法特性则能显著提升编码效率与代码质量。本文将从变量、控制结构、函数到面向对象编程等核心知识点展开,通过案例与比喻,帮助读者系统性地构建 Kotlin 基础知识体系。
变量与数据类型:存储与操作数据的基石
在编程中,变量如同“存储数据的盒子”,而数据类型则决定了盒子能装什么类型的物品。Kotlin 的变量定义需遵循以下规则:
val 不可变变量 = 值
var 可变变量 = 值
val
定义不可变变量(类似 Java 的 final 变量),一旦赋值便无法修改;var
定义可变变量,允许后续重新赋值。
例如:
val name = "Alice" // 字符串类型
var age = 25 // 整数类型
age = 26 // 允许修改
Kotlin 支持丰富的数据类型,常见的包括:
| 类型 | 描述 | 示例 |
|------------|--------------------------|--------------------|
| Int
| 32 位整数 | var count = 100
|
| Double
| 64 位浮点数 | val pi = 3.14
|
| Boolean
| 布尔值(true/false) | val isOnline = true
|
| String
| 字符串 | val message = "Hello"
|
比喻:可以将数据类型比作快递包裹的标签,若标签标注为“易碎品”,则处理方式必须格外小心;同理,代码中的类型约束能避免逻辑错误。
控制结构:程序的“交通指挥系统”
控制结构决定了程序的执行流程,如同交通信号灯控制车辆行驶方向。Kotlin 提供了多种控制结构,包括条件判断、循环与跳转。
条件语句:if-else 的逻辑分支
val score = 85
if (score >= 90) {
println("优秀")
} else if (score >= 70) {
println("良好")
} else {
println("需努力")
}
关键点:
- 条件表达式需用括号包裹;
else if
可多次嵌套,但需注意逻辑顺序。
循环结构:重复任务的高效工具
while 循环
var i = 0
while (i < 5) {
println(i)
i++
}
for 循环(推荐使用)
for (i in 1..5) {
println(i) // 输出 1到5
}
扩展:in
后的 1..5
表示闭区间,若需排除上限可用 1 until 5
(输出 1-4)。
当心无限循环!
while (true) {
// 需要 break 或条件终止
}
函数:代码复用的“乐高积木”
函数是封装逻辑的核心单元。Kotlin 函数定义格式如下:
fun 函数名(参数列表): 返回类型 {
// 函数体
return 返回值
}
示例:计算圆的面积
fun calculateArea(radius: Double): Double {
val pi = 3.14159
return pi * radius * radius
}
调用方式:
val area = calculateArea(5.0) // 返回78.53975
参数与返回值的灵活性
- 默认参数值:
fun greet(name: String = "Guest") = "Hello, $name!" greet() // 输出 "Hello, Guest!"
- 可变参数(用
vararg
标记):fun sum(vararg numbers: Int): Int { var total = 0 for (num in numbers) total += num return total } sum(1,2,3) // 返回6
比喻:函数如同厨房里的“标准化菜谱”,只需输入原料(参数)即可获得固定结果,避免重复劳动。
集合与数组:管理数据的“仓库”
Kotlin 提供了 List、Set、Map 等集合类,以及数组(Array)结构,用于高效管理数据。
列表(List)
// 不可变列表
val fruits = listOf("Apple", "Banana")
// 可变列表
val mutableFruits = mutableListOf("Orange")
mutableFruits.add("Grape")
映射(Map)
val capitals = mapOf("France" to "Paris", "Japan" to "Tokyo")
val mutableCapitals = mutableMapOf<String, String>()
mutableCapitals["Germany"] = "Berlin"
数组(Array)
// 初始化固定大小的数组
val numbers = arrayOf(1, 2, 3)
// 通过循环创建
val squares = Array(5) { index -> (index + 1) * (index + 1) }
// squares 内容为 [1,4,9,16,25]
关键特性:
- 遍历集合:使用
for-in
循环或forEach
方法fruits.forEach { println(it) } // it 表示当前元素
- 条件过滤:通过
filter
方法筛选数据val evenNumbers = numbers.filter { it % 2 == 0 }
面向对象编程:构建“模块化世界”
Kotlin 支持面向对象特性,包括类、继承、接口等,帮助开发者构建可扩展的代码结构。
类与对象
class Car(val brand: String, var mileage: Int) {
fun drive(distance: Int) {
mileage += distance
}
}
val myCar = Car("Tesla", 1000)
myCar.drive(500) // mileage 变为1500
继承与多态
open class Animal(val name: String) {
open fun makeSound() = "..."
}
class Dog(name: String) : Animal(name) {
override fun makeSound() = "Woof!"
}
val pet = Dog("Buddy")
println(pet.makeSound()) // 输出 "Woof!"
open
标记类或方法可被继承,默认类不可继承;override
用于覆盖父类方法。
接口与委托
interface Flyable {
fun fly()
}
class Bird : Flyable {
override fun fly() = "Bird is flying"
}
class Airplane : Flyable by AirplaneDelegate() // 通过委托实现接口
委托机制:by
关键字可让类直接复用其他对象的功能,减少冗余代码。
扩展函数:为已有类添加“新技能”
Kotlin 的扩展函数允许在不修改原类的情况下,为类添加新方法。
// 为 String 类扩展方法
fun String.reverse(): String {
return this.reversed()
}
"Hello".reverse() // 返回 "olleH"
协程:异步编程的“瑞士军刀”
协程是 Kotlin 异步编程的核心工具,通过 launch
和 async
简化多线程操作。
import kotlinx.coroutines.*
fun main() = runBlocking {
launch {
delay(1000L)
println("World!")
}
println("Hello") // 主线程立即执行
}
// 输出顺序:Hello → World!
协程通过 coroutineScope
管理作用域,结合 async/await
实现异步等待。
最佳实践与常见误区
命名规范
- 变量名使用小驼峰(
firstName
),常量全大写(MAX_VALUE
); - 方法名以动词开头(
calculateSum
)。
空安全(Null Safety)
Kotlin 强制处理空值问题,避免 NullPointerException
:
// 非空类型
val name: String = null // 编译错误
// 允许空值类型需用问号
var address: String? = null
address?.length ?: 0 // 安全调用与 Elvis 操作符
避免过度使用可变变量
// 不推荐
var count = 0
count = count + 1
// 推荐(若无需修改)
val count = 0.inc() // 使用函数式风格
结论
掌握 Kotlin 基础语法如同搭建一座桥梁,连接编程理论与实际开发场景。从变量、函数到面向对象与协程,每个知识点都是构建高质量代码的基石。建议读者通过实践案例反复演练,逐步内化知识。随着对 Kotlin 特性的深入理解,开发者将能更高效地应对 Android 开发、服务器端编程等多样化场景,同时享受语言简洁性带来的代码愉悦感。
通过本文的学习,读者应能系统性地掌握 Kotlin 核心语法,并为后续学习进阶主题(如 Android 开发、Kotlin 多平台项目)奠定坚实基础。