跳转到主要内容

介绍


条件语句是每种编程语言的一部分。使用条件语句,我们可以让代码有时运行,有时不运行,具体取决于当时程序的条件。

当我们完全执行程序的每条语句时,我们并不是要求程序评估特定条件。通过使用条件语句,程序可以确定是否满足某些条件,然后被告知下一步该做什么。

让我们看一些使用条件语句的例子:

  • 如果学生的考试成绩超过 65%,则报告她的成绩通过;如果不是,请报告她的成绩不及格。
  • 如果他的账户里有钱,计算利息;如果他不这样做,则收取罚款。
  • 如果他们买了 10 个或更多的橙子,则计算 5% 的折扣;如果他们买的少,那就不要。

通过评估条件并根据是否满足这些条件来分配要运行的代码,我们正在编写条件代码。

本教程将带您完成使用 Go 编程语言编写条件语句。

如果语句


我们将从 if 语句开始,它将评估语句是真还是假,并且仅在语句为真的情况下运行代码。

在纯文本编辑器中,打开一个文件并编写以下代码:

package main

import "fmt"

func main() {
    grade := 70

    if grade >= 65 {
        fmt.Println("Passing grade")
    }
}

使用这段代码,我们有变量grade,并给它一个整数值70。然后我们使用if语句来评估变量grade是否大于或等于(>=)到65。如果它满足 在这种情况下,我们告诉程序打印出字符串 Passing Grade。

将程序另存为grade.go,并从终端窗口使用命令go rungrade.go在本地编程环境中运行它。

在这种情况下,70的成绩确实满足大于或等于65的条件,所以运行程序会得到如下输出:

Output
Passing grade


现在让我们通过将等级变量的值更改为 60 来更改该程序的结果:

package main

import "fmt"

func main() {
    grade := 60

    if grade >= 65 {
        fmt.Println("Passing grade")
    }
}

当我们保存并运行这段代码时,我们将不会收到任何输出,因为条件不满足并且我们没有告诉程序执行另一条语句。

再举一个例子,让我们计算一个银行账户余额是否低于 0。让我们创建一个名为 account.go 的文件并编写以下程序:

package main

import "fmt"

func main() {
    balance := -5

    if balance < 0 {
        fmt.Println("Balance is below 0, add funds now or you will be charged a penalty.")
    }
}

当我们使用 go run account.go 运行程序时,我们将收到以下输出:

Output
Balance is below 0, add funds now or you will be charged a penalty.


在程序中我们初始化变量 balance 的值为 -5,小于 0。由于 balance 满足 if 语句的条件(balance < 0),一旦我们保存并运行代码,我们就会收到字符串 输出。 同样,如果我们将余额更改为 0 或正数,我们将不会收到任何输出。

Else 语句


即使 if 语句的计算结果为 false,我们也可能希望程序执行某些操作。 在我们的成绩示例中,我们需要输出成绩是通过还是失败。

为此,我们将在上面的成绩条件中添加一个 else 语句,其结构如下:

package main

import "fmt"

func main() {
    grade := 60

    if grade >= 65 {
        fmt.Println("Passing grade")
    } else {
        fmt.Println("Failing grade")
    }
}

由于grade变量的值为60,if语句的计算结果为false,所以程序不会打印出Passing Grade。 后面的 else 语句告诉程序无论如何都要做某事。

当我们保存并运行程序时,我们将收到以下输出:

Output
Failing grade


如果我们随后重写程序以将等级值设为 65 或更高,我们将收到输出的 Passing 等级。

要在银行账户示例中添加 else 语句,我们将代码重写如下:

package main

import "fmt"

func main() {
    balance := 522

    if balance < 0 {
        fmt.Println("Balance is below 0, add funds now or you will be charged a penalty.")
    } else {
        fmt.Println("Your balance is 0 or above.")
    }
}

Output
Your balance is 0 or above.


在这里,我们将 balance 变量值更改为正数,以便打印 else 语句。要打印第一个 if 语句,我们可以将值重写为负数。

通过将 if 语句与 else 语句结合起来,您构建了一个由两部分组成的条件语句,它将告诉计算机执行某些代码,无论 if 条件是否满足。

Else if  语句


到目前为止,我们已经为条件语句提供了一个布尔选项,每个 if 语句评估为真或假。在许多情况下,我们需要一个评估两个以上可能结果的程序。为此,我们将使用一个 else if 语句,它是用 Go 编写的 as else if。 else if 或 else if 语句看起来像 if 语句,并将评估另一个条件。

在银行账户程序中,我们可能希望为三种不同的情况提供三个离散输出:

  • 余额低于0
  • 余额等于0
  • 余额大于0

else if 语句将放置在 if 语句和 else 语句之间,如下所示:

package main

import "fmt"

func main() {
    balance := 522

    if balance < 0 {
        fmt.Println("Balance is below 0, add funds now or you will be charged a penalty.")
    } else if balance == 0 {
        fmt.Println("Balance is equal to 0, add funds soon.")
    } else {
        fmt.Println("Your balance is 0 or above.")
    }
}

现在,一旦我们运行程序,就会出现三种可能的输出:

  • 如果变量 balance 等于 0,我们将收到 else if 语句的输出(Balance 等于 0,尽快添加资金。)
  • 如果变量 balance 设置为正数,我们将收到 else 语句的输出(Your balance is 0 or above.)。
  • 如果变量 balance 设置为负数,输出将是 if 语句中的字符串(Balance 低于 0,请立即添加资金,否则将收取罚款)。

但是,如果我们想要拥有三种以上的可能性怎么办?我们可以通过在代码中编写多个 else if 语句来做到这一点。

在grade.go程序中,让我们重写代码,使得有几个字母等级对应于数字等级的范围:

  • 90或以上相当于A级
  • 80-89相当于B级
  • 70-79相当于C级
  • 65-69相当于D级
  • 64或以下相当于F级

要运行此代码,我们将需要一个 if 语句、三个 else if 语句和一个处理所有失败情况的 else 语句。

让我们重写前面示例中的代码,让字符串打印出每个字母的等级。我们可以保持我们的 else 语句相同。

grade.go

package main

import "fmt"

func main() {
    grade := 60

    if grade >= 90 {
        fmt.Println("A grade")
    } else if grade >= 80 {
        fmt.Println("B grade")
    } else if grade >= 70 {
        fmt.Println("C grade")
    } else if grade >= 65 {
        fmt.Println("D grade")
    } else {
        fmt.Println("Failing grade")
    }
}

因为 else if 语句将按顺序进行评估,所以我们可以保持我们的语句非常基本。该程序正在完成以下步骤:

  1. 如果成绩大于 90,程序将打印 A 成绩,如果成绩小于 90,程序将继续下一条语句……
  2. 如果成绩大于等于 80,程序会打印 B 级,如果成绩是 79 或以下,程序会继续下一条语句……
  3. 如果成绩大于等于 70,程序会打印 C 成绩,如果成绩是 69 或以下,程序会继续下一条语句……
  4. 如果等级大于等于65,程序会打印D级,如果等级小于等于64,程序会继续下一条语句……
  5. 由于未满足上述所有条件,该程序将打印不及格成绩。

嵌套 If 语句


一旦您对 if、else if 和 else 语句感到满意,您就可以继续使用嵌套条件语句。如果第一个条件执行为真,我们可以使用嵌套 if 语句来检查第二个条件。为此,我们可以在另一个 if-else 语句中添加一个 if-else 语句。让我们看一下嵌套 if 语句的语法:

if statement1 { // outer if statement
    fmt.Println("true")

    if nested_statement { // nested if statement
        fmt.Println("yes")
    } else { // nested else statement
        fmt.Println("no")
    }

} else { // outer else statement
    fmt.Println("false")
}

此代码可能会产生一些可能的输出:

如果 statement1 评估为 true,则程序将评估 nested_statement 是否也评估为 true。 如果两种情况都为真,则输出将是:


Output
true
yes


但是,如果 statement1 的计算结果为 true,而 nested_statement 的计算结果为 false,则输出将是:


Output
true
no


如果 statement1 的计算结果为 false,则嵌套的 if-else 语句将不会运行,因此 else 语句将单独运行,输出将是:




Output

false


我们还可以在整个代码中嵌套多个 if 语句:

if statement1 { // outer if
    fmt.Println("hello world")

    if nested_statement1 { // first nested if
        fmt.Println("yes")

    } else if nested_statement2 { // first nested else if
        fmt.Println("maybe")

    } else { // first nested else
        fmt.Println("no")
    }

} else if statement2 { // outer else if
    fmt.Println("hello galaxy")

    if nested_statement3 { // second nested if
        fmt.Println("yes")
    } else if nested_statement4 { // second nested else if
        fmt.Println("maybe")
    } else { // second nested else
        fmt.Println("no")
    }

} else { // outer else
    statement("hello universe")
}

在这段代码中,除了 else if 语句之外,每个 if 语句中还有一个嵌套的 if 语句。 这将允许在每个条件下提供更多选项。

让我们看一个使用我们的 Grade.go 程序的嵌套 if 语句的示例。 我们可以先检查一个等级是否通过(大于或等于 65%),然后评估数值等级应该与哪个字母等级相当。 但是,如果成绩不及格,我们不需要检查字母成绩,而是可以让程序报告成绩不及格。 我们修改后的带有嵌套 if 语句的代码将如下所示:

grade.go

package main

import "fmt"

func main() {
    grade := 92
    if grade >= 65 {
        fmt.Print("Passing grade of: ")

        if grade >= 90 {
            fmt.Println("A")

        } else if grade >= 80 {
            fmt.Println("B")

        } else if grade >= 70 {
            fmt.Println("C")

        } else if grade >= 65 {
            fmt.Println("D")
        }

    } else {
        fmt.Println("Failing grade")
    }
}

如果我们将变量grade设置为整数值92运行代码,则满足第一个条件,程序将打印出Passing grade of: 。 接下来,它会检查等级是否大于或等于90,并且由于也满足这个条件,所以它会打印出A。

如果我们在grade变量设置为60的情况下运行代码,那么第一个条件不满足,所以程序将跳过嵌套的if语句并向下移动到else语句,程序打印出Failing grade。

我们当然可以为此添加更多选项,并使用第二层嵌套 if 语句。 也许我们会想要分别评估 A+、A 和 A- 的成绩。 我们可以通过首先检查成绩是否通过,然后检查成绩是否为 90 或以上,然后检查成绩是否超过 96 来获得 A+:

grade.go

...
if grade >= 65 {
    fmt.Print("Passing grade of: ")

    if grade >= 90 {
        if grade > 96 {
            fmt.Println("A+")

        } else if grade > 93 && grade <= 96 {
            fmt.Println("A")

        } else {
            fmt.Println("A-")
        }
...

在此代码中,对于设置为 96 的等级变量,程序将运行以下内容:

  1. 检查成绩是否大于等于65(真)
  2. 打印出及格分数:
  3. 检查成绩是否大于等于90(真)
  4. 检查成绩是否大于96(假)
  5. 检查成绩是否大于 93 并且小于或等于 96(真)
  6. 打印一个
  7. 离开这些嵌套的条件语句并继续剩下的代码

因此,96 分的程序输出如下所示:

Output
Passing grade of: A


嵌套 if 语句可以为您的代码添加几个特定级别的条件。

结论


通过使用 if 语句之类的条件语句,您可以更好地控制程序的执行内容。 条件语句告诉程序评估是否满足某个条件。 如果满足条件,它将执行特定代码,但如果不满足,程序将继续向下移动到其他代码。

文章链接