if 语句
之前,我们已经了解到程序中的实际工作是由表达式完成的。本节课进一步阐述了这一概念,通过讲解一种使用逻辑表达式的重要的控制结构来加以说明。
控制语句
到目前为止,我们所看到的所有程序表达式都从 main() 函数开始执行,一直运行到 main 函数的末尾。
控制语句是影响表达式执行过程的特性。这些语句本身不产生值,也不具有副作用。它们决定哪些表达式被执行,以及以何种顺序执行。在做出这些决策时,控制语句有时会使用逻辑表达式。
注意: 其他编程语言对“表达式”和“语句”的定义可能不同,有些语言甚至根本不区分这两者。
if 语句及其作用域
if 语句 根据某个条件是否为真来决定执行哪一段代码。它通过评估一个逻辑表达式来做出判断。其含义与英文中的“如果”相同,例如:“如果有咖啡,我就喝咖啡”。
if 是 D 语言中的关键字,后跟括号内的逻辑表达式。如果该逻辑表达式的值为 true,则执行花括号内包含的代码块;反之,如果逻辑表达式的值为 false,则跳过花括号内的语句。
花括号内的区域称为作用域,其中的所有代码被称为代码块。
以下是 if 语句的语法:
1if (一个逻辑表达式) { 2 // ... 条件为真时要执行的表达式 3}
示例
当“有咖啡”时,此程序将输出“喝咖啡并洗杯子”。
1import std.stdio; 2 3void main() { 4 bool 有咖啡 = true; 5 6 if (有咖啡) { 7 writeln("喝咖啡"); 8 writeln("洗杯子"); 9 } 10}
如果 有咖啡 的值为 false,则花括号内的表达式将被跳过,程序不会输出任何内容。
else 语句及其作用域
有时,在 if 语句的逻辑表达式为 false 时,也需要执行某些语句。
示例
在做决策时总是需要一个操作,比如:“如果有咖啡,我就喝咖啡;否则我就喝茶”,当主要条件不成立时,就执行“喝茶”。
在 false 情况下要执行的操作应放在 else 关键字之后的作用域中。这称为 else 块:
1if (一个逻辑表达式) { 2 // ... 条件为真时要执行的表达式 3} else { 4 // ... 条件为假时要执行的表达式 5}
例如,假设总是有茶,程序如下所示:
1import std.stdio; 2 3void main() { 4 bool 有咖啡 = false; 5 6 if (有咖啡) { 7 writeln("喝咖啡"); 8 } else { 9 writeln("喝茶"); 10 } 11}
在这个例子中,根据 有咖啡 的值,只会显示第一个或第二个字符串中的一个。
else 本身并不是一个独立的语句,而是 if 语句的一个可选部分,不能单独使用。
注意: 请注意上面
if和else块中花括号的位置。虽然官方 D 语言风格 建议将花括号放在单独的行上,但本课程在整个过程中采用常见的内联花括号写法。
始终使用花括号
尽管不推荐,但如果作用域中只有一条语句,实际上可以省略花括号。由于上面的 if 和 else 作用域中各自只包含一条语句,因此这段代码也可以写成如下形式:
1import std.stdio; 2 3void main() { 4 bool 有咖啡 = false; 5 6 if (有咖啡) 7 writeln("喝咖啡"); 8 else 9 writeln("喝茶"); 10}
大多数有经验的程序员即使只有一条语句也会使用花括号。
在下一课中,我们将学习如何将 if 和 else 语句串联起来,以实现更复杂的逻辑结构。