2-1-1 快速掌握Kotlin-kotlin中变量&语句&表达式

在 Kotlin 中,变量、语句和表达式是编程的基础概念。让我详细解释:

1. 变量(Variables)

声明方式

kotlin 复制代码
// 只读变量(推荐使用,类似 Java 的 final)
val name = "Kotlin"  // 类型自动推断为 String
val age: Int = 25     // 显式声明类型

// 可变变量
var count = 0
var price: Double = 99.9

特点

  • val(value)只读变量,赋值后不能修改
  • var(variable)可变变量,可以重新赋值
  • 类型可自动推断,也可显式声明
  • 变量名使用驼峰命名法

空安全

kotlin 复制代码
var nullableString: String? = null  // 可空类型
var nonNullString: String = "Hello"  // 非空类型(默认)

val length = nullableString?.length  // 安全调用
val length2 = nullableString!!.length  // 非空断言(可能抛异常)
val length3 = nullableString?.length ?: 0  // Elvis 操作符

2. 语句(Statements)

语句是执行操作的代码单元,不返回值:

赋值语句

kotlin 复制代码
val x = 10
var y = 20
y = 30  // 重新赋值

控制流语句

kotlin 复制代码
// if 语句
if (x > 5) {
    println("x is greater than 5")
} else {
    println("x is not greater than 5")
}

// when 语句(类似 switch)
when (x) {
    1 -> println("One")
    2 -> println("Two")
    in 3..10 -> println("3 to 10")
    else -> println("Other")
}

// for 循环
for (i in 1..5) {
    println(i)
}

val items = listOf("apple", "banana", "orange")
for (item in items) {
    println(item)
}

// while 循环
while (x > 0) {
    println(x)
    x--
}

3. 表达式(Expressions)

表达式有值,可以放在赋值符号右边:

赋值表达式

kotlin 复制代码
val result = 5 + 3 * 2  // 表达式值为 11

if 表达式(在 Kotlin 中,if 是表达式)

kotlin 复制代码
val max = if (a > b) a else b  // if 返回一个值

val grade = if (score >= 90) {
    "A"
} else if (score >= 80) {
    "B"
} else {
    "C"
}

when 表达式

kotlin 复制代码
val description = when (number) {
    1 -> "One"
    2 -> "Two"
    else -> "Many"
}

val type = when {
    x > 0 -> "Positive"
    x < 0 -> "Negative"
    else -> "Zero"
}

try-catch 表达式

kotlin 复制代码
val number = try {
    "123".toInt()
} catch (e: NumberFormatException) {
    0  // 默认值
}

Lambda 表达式

kotlin 复制代码
val sum = { a: Int, b: Int -> a + b }
println(sum(5, 3))  // 输出 8

val numbers = listOf(1, 2, 3, 4, 5)
val doubled = numbers.map { it * 2 }  // [2, 4, 6, 8, 10]

4. 关键区别和特性

表达式 vs 语句

kotlin 复制代码
// 语句(不返回值)
fun printMessage(message: String) {
    println(message)
}

// 表达式函数(单表达式函数)
fun add(a: Int, b: Int) = a + b

// if 作为表达式(返回类型推断为 Int)
val result = if (condition) 1 else 2

作用域函数(特殊的表达式)

kotlin 复制代码
val person = Person().apply {
    name = "Alice"
    age = 25
}

val length = person.let {
    it.name.length
}

val modified = person.run {
    name = "Bob"
    this  // 返回对象本身
}

范围表达式

kotlin 复制代码
// 范围表达式
val range1 = 1..10  // 包含 10
val range2 = 1 until 10  // 不包含 10
val range3 = 10 downTo 1  // 递减
val range4 = 1..10 step 2  // 步长为 2

5. 实用示例

kotlin 复制代码
// 变量声明和初始化
val name = "Kotlin"
var counter = 0

// 表达式组合
val status = when {
    counter > 10 -> "High"
    counter > 5 -> "Medium"
    counter > 0 -> "Low"
    else -> "Zero"
}

// 使用 Elvis 操作符处理空值
val displayName = nullableName ?: "Guest"

// 集合操作(函数式表达式)
val numbers = listOf(1, 2, 3, 4, 5)
val evenSquares = numbers
    .filter { it % 2 == 0 }
    .map { it * it }
    .sum()

最佳实践

  1. 优先使用 val,除非确实需要可变性
  2. 利用类型推断减少冗余代码
  3. 使用表达式形式使代码更简洁
  4. 善用空安全特性避免空指针异常
  5. 使用范围表达式简化循环和条件判断

Kotlin 的设计鼓励使用表达式而不是语句,这使代码更简洁、更函数式。很多在 Java 中是语句的结构,在 Kotlin 中都是表达式。

相关推荐
应用市场9 分钟前
用本机跑的开源音乐模型,给安卓小游戏做 20 秒无缝循环背景音乐
android·python·游戏开发·soundpool·音频处理
企业数字化笔记13 分钟前
表单发布前怎么验收?版本引用、字段兼容和历史数据回归
android·数据挖掘·回归
生信分析笔记20 分钟前
Nature 正刊 GPN-Star 基因组语言模型
android
渣渣盟20 分钟前
Flink 状态管理深度剖析:从 KeyedState 到 RocksDB,状态如何存储、恢复与扩缩容
android·大数据·flink
avi911126 分钟前
电影开源Jevdo - 源码介绍(vue版)没有android 和 没有wpf
android·wpf·框架·数据爬虫·meego·电影管理
OxYGC32 分钟前
[工程] PHP2Shell 漏洞解析:两条 PHP 内核 RCE,为什么应用层的防护全部失效
android·开发语言·php
拥小抱16 小时前
Compose 知识点
android
文章永久免费只为良心16 小时前
Web应用安全与防护_第三章_日志文件包含_从一道 CTFshow 题目讲透「日志投毒型 LFI → RCE」:原理、时序陷阱与全变种攻防手册
android·网络安全·渗透测试·漏洞危害·漏洞描述·日志投毒·红队指南
AIsoft_868916 小时前
学术讲座录音如何整理?录音APP可行吗
android·iphone
Patrick在香港19 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos