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 异步编程的核心工具,通过 launchasync 简化多线程操作。

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 多平台项目)奠定坚实基础。

最新发布