Goで条件文を書く方法
序章
条件文はすべてのプログラミング言語の一部です。 条件付きステートメントを使用すると、そのときのプログラムの状態に応じて、実行される場合と実行されない場合があるコードを作成できます。
プログラムの各ステートメントを完全に実行する場合、特定の条件を評価するようにプログラムに要求することはありません。 条件文を使用することにより、プログラムは特定の条件が満たされているかどうかを判断し、次に何をすべきかを指示することができます。
条件文を使用するいくつかの例を見てみましょう。
- 学生が65% onを超えるテストを受けた場合は、成績が合格したことを報告してください。 そうでない場合は、彼女の成績が失敗したことを報告してください。
- 彼の口座にお金がある場合は、利息を計算します。 そうでない場合は、違約金を請求します。
- オレンジを10個以上購入した場合は、5%の割引を計算します。 購入数が少ない場合は、購入しないでください。
条件を評価し、それらの条件が満たされているかどうかに基づいて実行するコードを割り当てることにより、条件付きコードを記述しています。
このチュートリアルでは、Goプログラミング言語で条件文を作成する方法について説明します。
Ifステートメント
if
ステートメントから始めます。これは、ステートメントがtrueかfalseかを評価し、ステートメントがtrueの場合にのみコードを実行します。
プレーンテキストエディタで、ファイルを開き、次のコードを記述します。
package main
import "fmt"
func main() {
grade := 70
if grade >= 65 {
fmt.Println("Passing grade")
}
}
このコードでは、変数grade
があり、それに70
の整数値を与えています。 次に、if
ステートメントを使用して、可変グレードが65
以上(>=
)であるかどうかを評価します。 この条件を満たしている場合は、文字列Passing grade
を印刷するようにプログラムに指示しています。
プログラムをgrade.go
として保存し、ローカルプログラミング環境でターミナルウィンドウからgo run grade.go
コマンドを使用して実行します。
この場合、グレード70
OutputPassing grade
grade
変数の値を60
に変更して、このプログラムの結果を変更してみましょう。
package main
import "fmt"
func main() {
grade := 60
if grade >= 65 {
fmt.Println("Passing grade")
}
}
this コードを保存して実行すると、条件が not であり、プログラムに別のステートメントを実行するように指示しなかったため、出力は返されません。
もう1つの例として、銀行口座の残高が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
を使用してプログラムを実行すると、次の出力が返されます。
OutputBalance is below 0, add funds now or you will be charged a penalty.
プログラムでは、変数balance
を-5
の値(0未満)で初期化しました。 天びんはif
ステートメント(balance < 0
)の条件を満たしているため、コードを保存して実行すると、文字列出力を受け取ります。 ここでも、残高を0または正の数に変更すると、出力は受信されません。
その他のステートメント
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
ステートメントは、プログラムにとにかく何かをするように指示します。
プログラムを保存して実行すると、次の出力が表示されます。
OutputFailing grade
次に、プログラムを書き直して、グレードに65
以上の値を与えると、代わりに出力Passing grade
を受け取ります。
銀行口座の例に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.")
}
}
OutputYour balance is 0 or above.
ここでは、balance
変数値を正の数に変更して、else
ステートメントが出力されるようにしました。 最初のif
ステートメントを出力するために、値を負の数に書き換えることができます。
if
ステートメントをelse
ステートメントと組み合わせることにより、if
条件が会った。
それ以外の場合のステートメント
これまで、条件付きステートメントの Booleanオプションを示してきました。各if
ステートメントはtrueまたはfalseのいずれかに評価されます。 多くの場合、2つ以上の可能な結果を評価するプログラムが必要になります。 このために、Goでelse if
と記述されているelseifステートメントを使用します。 else if
またはifステートメントは、if
ステートメントのように見え、別の条件を評価します。
銀行口座プログラムでは、3つの異なる状況に対して3つの個別の出力が必要になる場合があります。
- 残高が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.")
}
}
ここで、プログラムを実行すると発生する可能性のある3つの出力があります。
- 変数
balance
が0
と等しい場合、else if
ステートメント(Balance is equal to 0, add funds soon.
)からの出力を受け取ります。 - 変数
balance
が正の数に設定されている場合、else
ステートメント(Your balance is 0 or above.
)からの出力を受け取ります。 - 変数
balance
が負の数に設定されている場合、出力はif
ステートメント(Balance is below 0, add funds now or you will be charged a penalty
)からの文字列になります。
しかし、3つ以上の可能性が必要な場合はどうでしょうか。 これを行うには、コードに複数のelse if
ステートメントを記述します。
grade.go
プログラムで、数値の評点の範囲に対応するいくつかの文字の評点があるようにコードを書き直してみましょう。
- 90以上はAグレードに相当します
- 80-89はBグレードに相当します
- 70-79はCグレードに相当します
- 65-69はDグレードに相当します
- 64以下はFグレードに相当します
このコードを実行するには、1つのif
ステートメント、3つのelse if
ステートメント、およびすべての失敗したケースを処理するelse
ステートメントが必要です。
前の例のコードを書き直して、各文字の成績を出力する文字列を作成してみましょう。 else
ステートメントを同じに保つことができます。
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
ステートメントは順番に評価されるため、ステートメントをかなり基本的なものに保つことができます。 このプログラムは、次の手順を完了しています。
-
グレードが90より大きい場合、プログラムは
A grade
を出力し、グレードが90未満の場合、プログラムは次のステートメントに進みます… -
グレードが80以上の場合、プログラムは
B grade
を出力し、グレードが79以下の場合、プログラムは次のステートメントに進みます… -
グレードが70以上の場合、プログラムは
C grade
を出力し、グレードが69以下の場合、プログラムは次のステートメントに進みます… -
グレードが65以上の場合、プログラムは
D grade
を出力し、グレードが64以下の場合、プログラムは次のステートメントに進みます… -
上記の条件がすべて満たされていないため、プログラムは
Failing grade
を出力します。
ネストされたIfステートメント
if
、else if
、およびelse
ステートメントに慣れたら、ネストされた条件ステートメントに進むことができます。 最初の条件がtrueとして実行された場合に、2番目の条件をチェックする状況では、ネストされた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と評価されるかどうかを評価します。 両方のケースが当てはまる場合、出力は次のようになります。
Outputtrue yes
- ただし、
statement1
がtrueと評価され、nested_statement
がfalseと評価された場合、出力は次のようになります。
Outputtrue no
- また、
statement1
がfalseと評価された場合、ネストされたif-elseステートメントは実行されないため、else
ステートメントは単独で実行され、出力は次のようになります。
Outputfalse
コード全体に複数の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
ステートメントを使用して変更されたコードは次のようになります。
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ステートメントの2番目のレイヤーを使用することもできます。 おそらく、A +、A、A-のグレードを別々に評価したいと思うでしょう。 これを行うには、最初に成績が合格かどうかを確認し、次に成績が90以上かどうかを確認し、次にA+の成績が96を超えているかどうかを確認します。
...
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-")
}
...
このコードでは、grade
変数が96
に設定されている場合、プログラムは次のように実行します。
- グレードが65以上かどうかを確認します(true)
Passing grade of:
を印刷します- グレードが90以上かどうかを確認します(true)
- グレードが96より大きいかどうかを確認します(false)
- グレードが93より大きく96以下(true)かどうかを確認します
- 印刷
A
- これらのネストされた条件ステートメントを残して、残りのコードを続行します
したがって、グレード96のプログラムの出力は次のようになります。
OutputPassing grade of: A
ネストされたif
ステートメントは、コードにいくつかの特定のレベルの条件を追加する機会を提供できます。
結論
if
ステートメントのような条件ステートメントを使用することにより、プログラムの実行内容をより細かく制御できます。 条件ステートメントは、特定の条件が満たされているかどうかを評価するようにプログラムに指示します。 条件が満たされている場合は特定のコードを実行しますが、満たされていない場合はプログラムは他のコードに移動し続けます。
条件文の練習を続けるには、さまざまな演算子を使用して、条件文に慣れてください。