今回はgolangにおけるif文を用いた条件分岐について解説していきます。
if文とは
golangに限らずif文とは条件によって処理を分岐する時に使用する記法です。
if 条件式A {
処理A
}
上記コードの条件式Aの結果がtrueの場合はブロック{}の処理Aが実行されます。
逆に条件式Aの結果がfalseの場合はブロック{}の処理Aが実行されません。
func main() {
a := 4
if a%2 == 0 {
fmt.Println(a)
}
}
例えば、上記のコードにおいてa%2の結果(a割る2の余り)が0であれば、ブロック{}のPrintln()関数が実行されます。出力結果は4です。
if-elseの分岐処理
ifの条件がtrueでなかった場合の挙動も記すことができます。その際に使うのがelseです。
if 条件式A {
処理A
} else {
処理B
}
条件式Aの結果がfalseであった場合にブロック{}処理Bを動かすようにしてくれます。
func main() {
a := 3
if a%2 == 0 {
fmt.Println(a)
} else {
fmt.Println("else")
}
}
実際のコードで見てみましょう。a%2の結果(a割る2の余り)が0であればを出力し、0でなければ文字列のelseを出力します。
今回はaの値は3です。3を2で割っても余りは1のため、今回は条件式の結果はfalseとなり、elseの処理に入ります。よって今回の実行結果は文字列のelseとなります。
else-ifの分岐処理
if文の条件式を複数書きたい場合はelse-ifを使います。
if 条件式A {
処理A
} else if 条件式B{
処理B
} else {
処理C
}
条件式Aがtureであれば処理Aを実行、条件式Bがtrueであれば処理Bを実行、どちらの条件式もfalseであった場合に処理Cを実行します。
func main() {
a := 3
if a%2 == 0 {
fmt.Println("A")
} else if a%3 == 0 {
fmt.Println("B")
} else {
fmt.Println("C")
}
}
実際のコードで見てみましょう。
今回はaの値は3が入っています。aを2で割った余りが0であれば文字列Aを出力、aを3で割った余りが0であれば文字列Bを出力、どちらにも当てはまらない場合は文字列Cを出力します。
3を2で割っても余りは1、3を3で割った余りは0。よって今回の実行結果は文字列Bとなります。
ifと論理演算子
if文では&&や||などの論理演算子を使うことで比較を複数繋げることができます。
&& AND かつ
まずは&&を用いたAND条件から
a, b := 5, 6
if a == 5 && b == 5 {
fmt.Println("A")
} else {
fmt.Println("B")
}
今回aは5、bは6です。
&&と使うことでaが5かつbも5であれば文字列のAを出力します。それ以外はelseに入り文字列Bを出力します。
もちろんbは5ではなく6のため文字列Bが出力されます。
a, b := 5, 5
if a == 5 && b == 5 {
fmt.Println("A")
} else {
fmt.Println("B")
}
bに5を入れてあげると文字列Aが出力されます。
|| OR または
続いて||を用いたOR条件です。
func main() {
a, b := 5, 6
if a == 5 || b == 5 {
fmt.Println("A")
} else {
fmt.Println("B")
}
}
aが5、またはbが5の場合に文字列Aを出力します。
今回はaには5、bには6が入っているためa == 5の条件を満たしています。このように||の場合はどちらか一方の式を満たしていればifの条件式に合致します。
func main() {
a, b := 7, 6
if a == 5 || b == 5 {
fmt.Println("A")
} else {
fmt.Println("B")
}
}
aには7、bには6を入れた場合はどちらでも5ではないため、elseに入って、文字列Bが出力されます。
! NOT 否定
最後に紹介するのが!を用いたNOT条件についてです。
条件式に!を付けることで条件式の否定が当てはまるかをチェックすることができます。実際のコードを見てみましょう。
func main() {
a := 6
if a != 5 {
fmt.Println("A")
} else {
fmt.Println("B")
}
}
このように書くことで、aの値が5以外であれば文字列Aを出力し、逆にaの値が5であれば文字列Bを出力するような挙動になります。
今回はaが6のため5ではありません。よって文字列Aが出力されます。
if文の注意点
それでは次にif文を使ううえで気を付けておきたいことを紹介していきます。
条件に合致した場合、他のステートメントに入らない
例えばこちらのコード
aは6です。ifの条件式であるa%2 == 0とelse ifの条件式であるa%3 ==0両方とも合致します。
func main() {
a := 6
if a%2 == 0 {
fmt.Println("A")
} else if a%3 == 0 {
fmt.Println("B")
} else {
fmt.Println("C")
}
}
この場合の実行結果は文字列Aとなります。
if文は上から条件式をチェックしていき、当てはまり次第処理に入ります。そして処理終了後は他のelse ifやelseなどのステートメントには入らず処理を抜けていきます。
この点はif文を使ううえで気を付けましょう。
if文の中の変数は外では使えない
if文の中で定義した変数はそのif文の中でしか使用することができません。
func main() {
a := 6
if a == 6 {
result := "ok"
}
fmt.Println(result)
}
このようにif文の処理の中でresultという変数に文字列のokを入れていますが、この変数resultはif文の中でしか使用することができません。そのためエラーとなります。
if文の中で変数に入れてあげたい場合は下記のようにif文の前で一度変数を定義してあげる必要があります。
func main() {
a := 6
var result string
if a == 6 {
result = "ok"
}
fmt.Println(result)
}
golangをもっと詳しくなりたい方に
golang学習のために筆者が実際に受講したUdemy教材をまとめています。
golang学習のために筆者が実際に読んでおすすめしたい本をまとめています。