Groovy 条件语句
最后修改于 2025 年 4 月 5 日
条件语句允许程序根据布尔表达式做出决策。Groovy 提供了几种条件结构,包括 if/else、switch 和三元运算符。这些结构根据条件控制程序流程。
基本定义
条件语句评估布尔表达式以确定代码执行路径。Groovy 支持标准的 Java 条件语句,并进行了额外的增强。主要的条件结构是 if/else、switch/case 和 ?: 运算符。
Groovy 的条件语句可以处理“真值”,其中非 null/非零值被评估为 true。这与 Java 严格的布尔值要求不同。
简单的 if 语句
if 语句在条件为 true 时执行代码。
def age = 18 if (age >= 18) { println "You are an adult" }
这会检查 age 是否大于等于 18。如果为 true,则打印消息。条件必须评估为布尔值。Groovy 允许真值评估。
单条语句的 {} 是可选的,但为了清晰起见建议使用。条件必须放在括号中。
$ groovy IfExample.groovy You are an adult
if-else 语句
当条件为 false 时,if-else 语句提供了一个替代的执行路径。
def temperature = 25 if (temperature > 30) { println "It's hot outside" } else { println "It's not too hot" }
这会检查 temperature 并根据值打印不同的消息。当 if 条件为 false 时,else 块执行。
else 语句必须紧跟在 if 块之后。可以使用 else-if 链式处理多个条件。
$ groovy IfElseExample.groovy It's not too hot
if-else-if 级联
可以使用 else-if 语句检查多个条件。
def score = 85 if (score >= 90) { println "Grade A" } else if (score >= 80) { println "Grade B" } else if (score >= 70) { println "Grade C" } else { println "Grade D" }
这会将 score 与多个等级阈值进行比较。第一个为 true 的条件会执行其代码块,并跳过其他条件。
条件是从上到下评估的。即使有多个条件为 true,也只有一个代码块会被执行。
$ groovy IfElseIfExample.groovy Grade B
三元运算符
三元运算符提供了一种简洁的方式来编写简单的 if-else 语句。
def age = 20 def status = age >= 18 ? "Adult" : "Minor" println status
如果 age 大于等于 18,则将 "Adult" 赋给 status,否则赋给 "Minor"。语法是 condition ? trueValue : falseValue。
三元表达式返回一个值,并且可以用于赋值或方法参数。它们非常适合简单的条件。
$ groovy TernaryExample.groovy Adult
Switch 语句
switch 语句将一个值与多个 case 进行比较。
def day = "Wednesday" switch(day) { case "Monday": println "Start of work week" break case "Friday": println "Almost weekend" break default: println "Midweek day" }
这会检查 day 变量与不同的 case。匹配的 case 会执行其代码块。如果没有 case 匹配,则执行 default。
Groovy 的 switch 比 Java 的更强大,支持各种匹配策略。break 语句可防止“贯穿”到下一个 case。
$ groovy SwitchExample.groovy Midweek day
Switch 语句支持范围
Groovy 的 switch 语句支持在 case 语句中使用范围匹配。
def score = 75 switch(score) { case 90..100: println "Excellent" break case 75..<90: println "Good" break case 60..<75: println "Average" break default: println "Needs improvement" }
这使用范围运算符匹配 score 范围。 .. 创建一个包含两端的范围,而 ..< 在上界是排他的。
范围匹配简化了数值比较,如果使用 if 语句则需要多个条件。
$ groovy SwitchRangeExample.groovy Good
Switch 语句支持正则表达式
Groovy 的 switch 语句可以与正则表达式进行匹配。
def input = "admin@example.com" switch(input) { case ~/.*@admin\..*/: println "Admin email" break case ~/.*@example\.com/: println "Example domain" break default: println "Unknown email" }
~/pattern/ 语法创建了一个正则表达式匹配器。输入会与每个模式进行检查,直到找到匹配项。
在 switch 语句中使用正则表达式匹配是 Groovy 特有的,对于字符串模式匹配非常强大。
$ groovy SwitchRegexExample.groovy Admin email
Switch 语句支持类型检查
Groovy 的 switch 语句可以检查输入值的类型。
def value = 3.14 switch(value) { case Integer: println "Integer number" break case Float: println "Float number" break case Double: println "Double number" break default: println "Unknown type" }
这会检查 value 的运行时类型是否与类类型匹配。当 value 是指定类型的实例时,匹配的 case 会执行。
在 switch 语句中使用类型检查,可以在不显式使用 instanceof 检查的情况下,根据输入类型实现多态行为,非常有用。
$ groovy SwitchTypeExample.groovy Double number
真值评估
Groovy 使用真值规则评估条件中的非布尔值。
def name = "John" def count = 0 def list = [] if (name) println "Name has value" // true if (count) println "Count is non-zero" // false if (list) println "List has elements" // false
在 Groovy 中,非 null/非空/true 值被评估为 true。零、空集合、null 和 false 被评估为 false。
这与 Java 不同,Java 中条件必须严格为布尔值。这使得 Groovy 代码在进行常见检查时更加简洁。
$ groovy TruthyExample.groovy Name has value
Elvis 运算符
Elvis 运算符 ?: 为 null 引用提供默认值。
def username = null def displayName = username ?: "Guest" println "Welcome, $displayName"
如果 username 为 null,则将其赋值为 "Guest"。语法是 value ?: defaultValue。它类似于用于 null 检查的三元运算符的简写形式。
Elvis 运算符常用于提供备用值,并安全地处理 null,而无需冗长的 if-else 块。
$ groovy ElvisExample.groovy Welcome, Guest
来源
本教程涵盖了 Groovy 的条件结构以及实际示例。条件语句是控制 Groovy 中程序流程的基础。
作者
列出 所有 Groovy 教程。