kotlin-1

89 阅读3分钟

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

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


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

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

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

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

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

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

二、 程序起点:main 函数

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

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

对比 Java:

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

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

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

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

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

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

    var age: Int = 5
    age = 6 // 正确!可以重新赋值
    

高级技巧:类型推断

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

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

📌 最佳实践建议:

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

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

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

// 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

调用函数:

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

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

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

  • 使用 $变量名

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

    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不仅可以做分支控制,还可以返回一个值

    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,但强大得多。

    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

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

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

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

总结与学习建议

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

下一步学习建议:

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

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

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