メインコンテンツまでスキップ

Goの条件分岐を理解しよう

Goの条件分岐を理解しよう

Go言語における条件分岐は、if文を使用して実現されます。 if文は、指定した条件が真(true)である場合に特定のコードブロックを実行します。以下に基本的な構文と例を示します。

基本的なif文の構文

package main

import "fmt"

func main() {
score := 80
if score >= 80 {
fmt.Println("大変良くできました")
}
}

上記の例では、score変数の値が80以上である場合に「大変良くできました」と表示されます。

elseとelse ifによる条件分岐

条件が偽(false)である場合に別のコードブロックを実行したい場合は、elseキーワードを使用します。以下にその例を示します。

elseの例

package main

import "fmt"

func main() {
score := 80

if score >= 80 {
fmt.Println("大変良くできました")
} else {
fmt.Println("もっと頑張りましょう")
}
}

上記の例では、score変数の値が80以上である場合に「大変良くできました」と表示され、そうでない場合には「もっと頑張りましょう」と表示されます。 さらに、複数の条件を評価するためにelse ifを使用することもできます。以下にその例を示します。

else ifの例
package main

import "fmt"

func main() {
score := 59

// --------------------
// 条件分岐(else if)
// --------------------
// 条件をより細かく定義したいときに利用

// 複数の条件を定義し、該当すればそこで条件分岐の処理を終了
// どれにも該当しない場合、elseの処理を実施
if score >= 80 {
fmt.Println("大変良くできました")
} else if score >= 60 {
fmt.Println("あと一息です")
} else {
fmt.Println("もっと頑張りましょう")
}
}

上記の例では、score変数の値が80以上であれば「大変良くできました」、60以上であれば「あと一息です」、それ以外の場合には「もっと頑張りましょう」と表示されます。

注意点として、値の比較は数学的のように行われます。 例えば、>(大なり)、<(小なり)、>=(以上)、<=(以下)などの演算子を使用して、数値の大小を比較することができます。

値が同一であるかどうかを比較する場合、Go言語では条件式に代入演算子=を使用することはできません。条件式には比較演算子==を使用する必要があります。以下に例を示します。

値の比較の例

package main

import "fmt"

func main() {

// 「条件に一致する場合」は、= ではなく == とする必要がある
value := 10
if value == 10 {
fmt.Println("1つ目の条件に一致します")
}

// =を条件として記載すると構文エラーになる
// if value = 10 {
// fmt.Println("条件に一致します")
// }

}

また、条件の表記において、Go言語では条件式には必ずbool型の値を使用する必要があります。 条件に合う場合true、合わない場合falseで表せる。以下に例を示します。

bool型の条件式の例

package main

import "fmt"

func main() {

// trueであれば、必ず条件に一致する
if true {
fmt.Println("1つ目の条件に一致します")
}

// falseであれば、必ず条件に一致しない
if false {
fmt.Println("2つ目の条件に一致します")
}

// bool型の変数でも表せる
var value1 bool = true
if value1 {
fmt.Println("3つ目の条件に一致します")
}

// 条件自体を変数に格納できる
var value2 bool = 10 == 10
if value2 {
fmt.Println("3つ目の条件に一致します")
}

}

複雑な条件分岐を行う場合、論理演算子を使用して複数の条件を組み合わせることができます。 論理演算子には、&&(AND)、||(OR)、および!(NOT)があります。以下に例を示します。

複雑な条件分岐の例

package main

import "fmt"

func main() {
var value int

// --------------------
// 条件分岐(複雑な条件)
// --------------------

value = 100

// かつ(And)
// &&で条件を結合すると、「両方の条件に一致する場合」となる
if value > 20 && value < 30 {
fmt.Println("AND条件に一致します")
}

// または(Or)
// ||で条件を結合すると、「いずれかの条件に一致する場合」となる
if value == 10 || value == 20 {
fmt.Println("OR条件に一致します")
}

// 否定
// ! を記載すると、条件の否定になります。
if value != 10 {
fmt.Println("否定の条件に一致します")
}

// 条件の優先順位
// if 条件1 || 条件2 && 条件3

}

switch文による条件分岐

さらに、Go言語ではswitch文を使用して条件分岐を行うこともできます。 switch文は、ある変数の値に基づいて複数のケースに分岐するために使用されます。以下に例を示します。

switch文の例

package main

import "fmt"

func main() {
value := 1

// --------------------
// 条件分岐(switch)
// --------------------

// ある変数の値の内容に応じて処理を振り分けたいときの書き方
// ifとelse ifで同様の事ができるが、より簡潔に記載が出来る
switch value {
case 1:
fmt.Println("One")
case 2:
fmt.Println("Two")
default:
fmt.Println("Other")
}

}

演習問題

演習問題1: 偶数・奇数の判定

問題文

以下の要件を満たすGoプログラムを作成してください。

  1. valueという変数を定義し、任意の整数値を代入してください。
  2. valueを2で割り切れる場合は偶数、割り切れない場合は奇数となります。
  3. 判定結果によって「偶数です」「奇数です」と表示してください。

解答例

package main

import "fmt"

func main() {
value := 11

if value%2 == 0 {
fmt.Println("偶数です")
} else {
fmt.Println("奇数です")
}

}

演習問題2: 閏年の判定

問題文

以下の要件を満たすGoプログラムを作成してください。

  1. yearという変数を定義して、判定を行ってください
  2. 4で割り切れる年が閏年うるうどしとなります
  3. 100で割り切れる場合は閏年ではありません
  4. 400で割り切れる場合は閏年となります
  5. 閏年の場合は「閏年です」、それ以外の場合は「通常の年です」と表示してください

解答例

package main

import (
"fmt"
)

func main() {
year := 2000

if (year%4 == 0 && year%100 != 0) || year%400 == 0 {
fmt.Println("閏年です")
} else {
fmt.Println("通常の年です")
}

}

演習問題3: 曜日の表示

問題文

以下の要件を満たすGoプログラムを作成してください。

  1. weekという変数を作成し、1〜7までの任意の数値を格納してください
  2. 数値が1であれば「月曜日」、2であれば「火曜日」...7であれば「日曜日」と表示してみてください
  3. 1〜7以外の数値が入力された場合、「範囲外です」と表示してください

解答例

package main

import (
"fmt"
)

func main() {
week := 1

switch week {
case 1:
fmt.Println("月曜日")
case 2:
fmt.Println("火曜日")
case 3:
fmt.Println("水曜日")
case 4:
fmt.Println("木曜日")
case 5:
fmt.Println("金曜日")
case 6:
fmt.Println("土曜日")
case 7:
fmt.Println("日曜日")
default:
fmt.Println("範囲外です")

}

}