Kotlin 基础语法
环境装好后,我们来系统过一遍 Kotlin 的基础语法。这一章不涉及复杂概念,只讲程序"长什么样"——结构、注释、分号规则、关键字。读完你就能看懂任何 Kotlin 代码的大致框架。
1. Kotlin 程序的基本结构
一个可执行的 Kotlin 程序最少包含三部分:package 声明、import 导入、fun main() 入口函数。看这个例子:
// 包声明(可选,但强烈推荐)
package com.example.hello
// 导入(可以用通配符 *,但推荐显式)
import kotlin.math.sqrt
// 顶层 main 函数,程序入口
fun main() {
println("Hello, Kotlin!")
val x = sqrt(2.0)
println("根号 2 ≈ $x")
}
// 程序执行完 main 后退出几个要点:
- package 声明:可选但强烈推荐,放在文件第一行(注释除外)。包名通常反向,如
com.example.hello。 - import:导入其他包的类/函数。Kotlin 默认导入了一批常用包(
kotlin.*、kotlin.collections.*、kotlin.io.*等),listOf、println等无需手动导入。 - fun main():程序入口,无参无返回值。也可以写
fun main(args: Array<String>)接收命令行参数(老式写法)。 - 顶层函数:Kotlin 不强制 main 必须包在某个 class 里——这和 Java 不一样。底层编译后会生成一个叫
文件名Kt的 Java class 包裹它,但你写代码时无感。
2. import 规则
Kotlin 的 import 比 Java 更灵活,支持别名导入:
// 单个导入
import kotlin.collections.listOf
import java.util.Date
// 通配符导入(导入整个包)
import kotlin.math.*
// 别名导入(避免命名冲突)
import com.example.User as AppUser
import com.other.User as OtherUser
fun main() {
val u1 = AppUser("小明") // com.example.User
val u2 = OtherUser("小红") // com.other.User
}注意 Kotlin 还可以导入顶层函数和属性(Java 不行),这让函数式风格的代码组织更灵活。
3. 注释
Kotlin 的注释规则和 Java/JS 完全一致,但文档注释叫 KDoc(用三斜杠 /// 或 /** */),支持 Markdown 语法:
// 这是单行注释,双斜杠开头,到行尾结束
/* 这是多行注释,
可以跨多行,
用斜杠星号包裹 */
/*
块注释常用于:
- 文件开头的版权/说明
- 临时禁用一大段代码
*/
/**
* KDoc 文档注释:三斜杠开头
* 用于生成 API 文档(类似 Java 的 Javadoc)
* @param name 用户名
* @return 问候字符串
*/
fun greet(name: String): String {
return "你好, $name"
}
// KDoc 支持_markdown_ 语法,可以用 *列表*、`代码`、[链接]用 Dokka 工具可以把 KDoc 生成 HTML 文档,效果类似 Java 的 Javadoc。
4. 分号规则(重要!)
这是 Kotlin 与 Java/C 最大的视觉差异:分号是可选的。绝大多数情况下你不需要写分号——每行一条语句结尾不加。Kotlin 编译器和 Kotlin 风格指南都强烈推荐不写分号。
// Kotlin 和 Java/C 不同:语句末尾的分号是【可选的】
val a = 1 // 推荐写法,无分号
val b = 2; // 加分号也对,但社区不推荐
// 一行多条语句必须加分号分隔
val x = 1; val y = 2; println(x + y)
// 但【不要】这么写,可读性差
// 例外:return、break、continue 后必须换行或加分号这条规则强制了统一的代码风格——这也是为什么 Kotlin 社区的代码"长得都一样",几乎不存在分号之争。
5. 关键字(Keywords)
Kotlin 有大约 40 个硬关键字(hard keyword)和一批软关键字(soft keyword)。硬关键字绝对不能用作变量/函数名,软关键字只在特定位置有特殊含义。
// Kotlin 关键字列表(共 ~40 个硬关键字 + 软关键字)
//
// 【硬关键字】不能用作标识符:
// as as? break class continue do else
// false for fun if in !in interface
// is !is null object package return super
// this throw true try typealias typeof val
// var when while
//
// 【软关键字】只在特定位置是关键字,其他地方可作标识符:
// by catch constructor delegate dynamic field
// file finally get import init param property
// receiver set setparam value where
//
// 【修饰符关键字】也是软关键字:
// abstract actual annotation companion const crossinline
// data enum final infix inline inner internal lateinit
// private protected public open operator outbound override
// private reified sealed suspend tailrec vararg对比 Java 的 50 个关键字,Kotlin 关键字数差不多,但因为语法简洁,实际写代码时用到的远比 Java 少。
6. 标识符命名规则
标识符是程序员自己起的名字(变量、函数、类)。Kotlin 命名规则:
// 合法标识符:字母/下划线开头,后面跟字母/数字/下划线
val name = "小明"
val _count = 0
val max_value = 100
val 中文变量名 = "也合法" // Kotlin 支持 Unicode 标识符
// 非法标识符:
// val 2x = 1 // 数字开头
// val my-name = "x" // 包含连字符
// 如果一定要用关键字当变量名,可用反引号包裹(慎用)
val `fun` = "这不是函数"
val `in` = "也不是运算符"命名风格(社区约定):
- 变量、函数、属性:小驼峰
userName、getAge()。 - 类、接口:大驼峰
HttpClient、Runnable。 - 包名:全小写,不加下划线
com.example.myapp。 - 常量(伴生对象里的 const val):全大写 + 下划线
MAX_VALUE、DEFAULT_TIMEOUT。 - 泛型类型参数:单个大写字母
T、E、K、V。
7. 空白符与代码格式化
Kotlin 对空白符(空格、Tab、换行)大部分情况下不敏感。为了统一风格,JetBrains 官方提供 ktlint(命令行工具)和 IDEA 内置的 Code Style 设置:
- 用 4 个空格缩进(不是 Tab)。
- 左花括号
{必须跟在签名行尾,不换行(类似 K&R 风格)。 - 等号两边、逗号后、运算符两边都有空格。
- 类名和左花括号之间一个空格:
class Foo {。
在 IDEA 里可以一键 Reformat Code(Ctrl+Alt+L),几乎所有人写出来的 Kotlin 都长一个样。
8. 表达式 vs 语句
Kotlin 和 Java 一个重要差异:if、when、try 等都是表达式,有返回值,可以写在赋值号右边。Java 里它们只是语句。
// if 是表达式,可以直接给变量赋值
val max = if (a > b) a else b
// when 也是表达式
val desc = when (x) {
0 -> "零"
in 1..9 -> "个位"
else -> "其他"
}
// try 也是表达式
val num = try {
"42".toInt()
} catch (e: NumberFormatException) {
0
}这是 Kotlin 比 Java 简洁的根源之一——很多 Java 必须先声明变量、再分支赋值的代码,在 Kotlin 里能合并成一行。
小结
这一章你了解了 Kotlin 程序的整体骨架:包声明 → 导入 → main 函数;知道了注释和分号规则;记住了硬/软关键字的区分;摸清了标识符命名约定。下一篇我们看 Kotlin 的变量——val 和 var 是 Kotlin 一切的基础。
← 上一篇 Kotlin 环境搭建
下一篇 Kotlin 变量 →