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 后退出

几个要点:

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` = "也不是运算符"

命名风格(社区约定):

7. 空白符与代码格式化

Kotlin 对空白符(空格、Tab、换行)大部分情况下不敏感。为了统一风格,JetBrains 官方提供 ktlint(命令行工具)和 IDEA 内置的 Code Style 设置:

在 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 变量

✈️💬