kotlin-1

好的,没问题!我们来写一篇更系统、更清晰、更适合零基础入门的 Kotlin 基础语法篇。

我将采用 "概念讲解 + 代码示例 + 与Java对比" 的方式,并辅以实用技巧和总结,力求让你一篇文章就掌握 Kotlin 语法的精髓。


Kotlin 基础语法入门:从零开始,写好每一行代码

相比于转载的文章,本教程将提供更清晰的逻辑脉络和更实用的知识提炼。

一、 Kotlin 初印象:为什么是它?

在深入语法之前,先了解 Kotlin 的核心优势:

  • 简洁实用:大大减少样板代码(如 getter/setter、数据类型声明等)。
  • 空安全:从语言层面杜绝了空指针异常(NullPointerException)的困扰。
  • 100% 兼容 Java:可以在项目中与 Java 代码无缝调用,平滑迁移。
  • 现代语言特性:支持函数式编程、扩展函数、协程等。

现在,让我们开始语法之旅。

二、 程序起点:main 函数

任何程序的执行都有一个入口,在 Kotlin 中,它极其简洁。

kotlin 复制代码
fun main() {
    println("Hello, Kotlin World!")
}
  • fun:关键字,用于声明一个函数。
  • main:函数名,是程序的入口点。
  • println:一个内置函数,用于在控制台输出一行内容。

对比 Java:

typescript 复制代码
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, Java World!");
    }
}

Kotlin 的写法明显更简洁,不需要类包装。

三、 变量声明:val 和 var 的艺术

Kotlin 使用两个关键字来声明变量,这是基础中的基础。

  1. val(value 的缩写) :用于声明只读变量 ,相当于 Java 中的 final变量。一旦赋值,不可更改。

    ini 复制代码
    val name: String = "Kotlin"
    // name = "Java" // 错误!编译不通过,因为 name 是只读的
  2. var(variable 的缩写) :用于声明可变变量

    ini 复制代码
    var age: Int = 5
    age = 6 // 正确!可以重新赋值

高级技巧:类型推断

Kotlin 编译器很智能,如果你在声明时直接赋值,可以省略类型声明(: String: Int)。

ini 复制代码
val language = "Kotlin" // 编译器自动推断 language 为 String 类型
var count = 10 // 编译器自动推断 count 为 Int 类型

📌 最佳实践建议:

优先使用 val,除非这个变量确实需要被改变。这能让你的代码更安全、更符合函数式编程的理念。

四、 函数定义:fun 的关键作用

使用 fun关键字来定义函数。基本语法如下:

kotlin 复制代码
// 1. 基本函数:无返回值
fun greet(name: String) {
    println("Hello, $name!")
}

// 2. 有返回值的函数
fun sum(a: Int, b: Int): Int { // 返回值类型在参数列表后声明
    return a + b
}

// 3. 单表达式函数(语法糖!)
// 当函数体只有一行表达式时,可以简化写法
fun sumSimple(a: Int, b: Int): Int = a + b
// 甚至,类型推断也能用在这里
fun sumEvenSimpler(a: Int, b: Int) = a + b

调用函数:

scss 复制代码
greet("World") // 输出:Hello, World!
val result = sum(5, 3)
println(result) // 输出:8

五、 字符串模板:让拼接成为历史

这是 Kotlin 非常方便的特性,用于在字符串中直接嵌入变量或表达式。

  • 使用 $变量名

    kotlin 复制代码
    val name = "Alice"
    println("Hello, $name") // 输出:Hello, Alice
  • 使用 ${表达式} (表达式复杂时必需):

    kotlin 复制代码
    val a = 10
    val b = 20
    println("The sum is ${a + b}") // 输出:The sum is 30
    println("The text length is ${name.length}") // 输出:The text length is 5

对比 Java 的字符串拼接: "Hello, " + name,Kotlin 的方式更直观、更安全。

六、 条件控制:if 和 when

  1. if表达式

    在 Kotlin 中,if不仅可以做分支控制,还可以返回一个值

    go 复制代码
    val max = if (a > b) {
        println("a is larger")
        a // 最后一行作为返回值
    } else {
        println("b is larger or equal")
        b
    }
    println("Max is $max")

    对比 Java: Java 的 if是语句,不返回值,需要借助三元运算符 ? :。Kotlin 用 if统一了两者。

  2. when表达式

    功能类似 Java 的 switch,但强大得多。

    rust 复制代码
    val grade = "A"
    when (grade) {
        "A" -> println("Excellent")
        "B", "C" -> println("Good") // 可以合并多个条件
        in "D".."F" -> println("Need improvement") // 可以判断范围
        else -> println("Invalid grade") // 类似 default
    }
    
    // when 也可以返回值
    val description = when (grade) {
        "A" -> "Excellent"
        else -> "Other grades"
    }
    println(description)

七、 空安全:Kotlin 的王牌特性

这是 Kotlin 解决 NPE 的核心设计。

  1. 可空类型 :在类型后面加一个问号 ?,表示这个变量可以为 null

    javascript 复制代码
    var nullableName: String? = null // 允许为 null
    var nonNullName: String = "Kotlin" // 不允许为 null
    // nonNullName = null // 错误!编译不通过
  2. 安全调用操作符 ?. :如果对象不为空,则调用方法或属性;否则返回 null

    kotlin 复制代码
    val length: Int? = nullableName?.length // 如果 nullableName 为 null,则 length 也为 null,不会抛出 NPE
  3. Elvis 操作符 ?: :提供一个默认值。

    kotlin 复制代码
    val safeLength: Int = nullableName?.length ?: 0 // 如果左边为 null,则返回 0

总结与学习建议

特性 关键字/符号 核心优点 对比 Java
变量声明 val, var 不可变优先,类型推断 减少 final,代码更简洁
函数定义 fun 单表达式函数简化 无需类包装,语法更轻量
字符串 $, ${} 嵌入变量,无需拼接 +更直观安全
条件控制 if, when 是表达式,可返回值 功能比 switch更强大
空安全 ?, ?., ?: 编译期防止 NPE 从语言层面解决痛点

下一步学习建议:

掌握了这些基础语法后,你就可以编写简单的 Kotlin 程序了。接下来可以探索:

  • 数据类型:数值类型、字符、布尔值、数组和集合。
  • 循环forwhile循环。
  • 面向对象:类、继承、接口。
  • Lambda 表达式与高阶函数:Kotlin 函数式编程的核心。

希望这篇为你量身定制的教程能让你有一个完美的开始!Kotlin 是一门令人愉悦的语言,祝你学习愉快!

相关推荐
whysqwhw2 小时前
kotlin-2
github
CoderJia程序员甲4 小时前
GitHub 热榜项目 - 日榜(2025-11-09)
github
labview_自动化4 小时前
GitHub笔记
笔记·github
知行力4 小时前
【GitHub每日速递 20251111】PyTorch:GPU加速、动态网络,深度学习平台的不二之选!
pytorch·深度学习·github
逛逛GitHub8 小时前
GitHub 开源 AI 好玩神器,自动记录你的一天。
前端·github
散峰而望8 小时前
C++入门(算法) - 习题
开发语言·c++·算法·github
mortimer8 小时前
faster-whisper本地转录简单方案
开源·github·openai
OpenTiny社区12 小时前
不止按钮和表格!TinyVue 偷偷上线 Space 组件,直接搞定「弹性+间距」布局
前端·vue.js·github
用户2217659279212 小时前
python第三方库可以处理多线程请求接口结果顺序问题?
github