Go言語の条件分岐if文、どう書けばいいか迷っていませんか?
プログラミングをしていると、「もし~だったらこうする、そうでなければこうする」みたいに、状況によって動きを変えたい時ってありますよね。Go言語では、そんな時に大活躍するのがif
文なんです!
この記事では、Go言語のif
文の基本的な書き方から、ちょっと応用的な使い方、そして「あちゃー!」ってなりがちな注意点まで、まるっと解説していきます。
この記事で学べること
- Go言語のif文の役割と基本
- if文の正しい書き方、Goならではのルール
- 複数の条件を扱う else if と else の使い方
- 条件を作るための演算子の種類
- 見てわかる!if文を使ったサンプルコード集 * Go言語のちょっと便利な if の書き方
さあ、この記事を読んで、Go言語のif
文と友達になっちゃいましょう! 条件分岐を使いこなせれば、あなたのプログラムはもっと賢くなりますよ!
Go言語の条件分岐「if文」とは?
まず、「条件分岐」って何?っていうところからいきましょう。
プログラムは基本的に上から下へ順番に実行されますが、いつも一本道じゃつまらないですよね。「もし雨が降っていたら傘を持っていく、降っていなければ持っていかない」みたいに、ある条件によってやることを変えたい場面がたくさんあります。これが条件分岐です。
Go言語でこの条件分岐を実現するのがif
文の主な役割です。
if
文を使うと、「もしこの条件が成り立ったら(true
だったら)この処理をしてね」と、コンピューターにお願いできるようになります。プログラムの流れを自由にコントロールするための、基本的な道具の一つと考えてくださいね。
Go言語「if文」の基本的な書き方
それでは、Go言語でのif
文の書き方を見ていきましょう。基本形はとってもシンプル!
if 条件式 { // 条件式がtrueの時に実行される処理 }
ポイントはいくつかあります。
if
の後に条件式を書きます。この条件式が成り立つかどうか(true
かfalse
か)をコンピューターが判断します。- 他のプログラミング言語と違って、条件式を
()
で囲む必要はありません。スッキリ! - 実行したい処理は
{}
(波カッコ、中カッコ、ブレースなどと呼ばれます)で囲みます。 {
は、if
と同じ行に書く必要があります。改行して次の行に書くと、Goコンパイラさんに「ルール違反!」って怒られちゃいます(エラーになります)。
例えば、「もし変数score
の値が60以上だったら、"合格!"と表示する」という処理は、こんな風に書けます。
package main import "fmt" func main() { score := 75 if score >= 60 { fmt.Println("合格!") } }
この例だと、score
は75で60以上なので、条件式score >= 60
はtrue
となり、{}
の中のfmt.Println("合格!")
が実行されます。
条件式で使える比較演算子・論理演算子
if
文の条件式では、「〇〇は△△と等しい?」「〇〇は△△より大きい?」といった比較や、「〇〇かつ△△」「〇〇または△△」のような組み合わせを使います。そのために使うのが演算子です。
よく使う演算子をリストアップしてみましょう。
比較演算子(二つの値を比べる)
==
: 等しい (例:a == b
)!=
: 等しくない (例:a != b
)<
: より小さい (例:a < b
)>
: より大きい (例:a > b
)<=
: 以下 (例:a <= b
)>=
: 以上 (例:a >= b
)
論理演算子(複数の条件を組み合わせる)
&&
: AND (かつ) - 両方の条件がtrue
ならtrue
(例:a > 10 && b < 5
)||
: OR (または) - どちらか一方の条件がtrue
ならtrue
(例:a == 0 || b == 0
)!
: NOT (ではない) - 条件の結果を反転させる (例:!isFinished
)
これらの演算子を使いこなせば、複雑な条件も表現できるようになりますよ。
Go言語「if文」で複数の条件を扱う(else if と else)
「もし〇〇だったらA、そうでなくもし△△だったらB、どちらでもなければC」のように、複数の選択肢の中から条件に合った処理を実行したい場合もありますよね。
そんな時に使うのがelse if
とelse
です。
if
文は、こんな風に拡張できます。
if 条件式1 { // 条件式1がtrueの時の処理 } else if 条件式2 { // 条件式1がfalseで、条件式2がtrueの時の処理 } else { // 上のどの条件式もfalseだった時の処理 }
処理の流れはこうです。
- まず、
if
の条件式1をチェックします。 - もし条件式1が
true
なら、その中の処理を実行して、if
文全体を抜けます。 - もし条件式1が
false
なら、次のelse if
の条件式2をチェックします。 - もし条件式2が
true
なら、その中の処理を実行して、if
文全体を抜けます。 - (
else if
がもっとあれば、それが続く) - もし全ての
if
とelse if
の条件式がfalse
だったら、最後のelse
の中の処理を実行します。
上から順番に条件をチェックしていき、最初にtrue
になったところの処理だけが実行される、という流れを覚えておきましょう!
else if の使い方
else if
は、「最初のifの条件には当てはまらなかったけど、こっちの条件ならどう?」と、追加の条件をチェックしたい時に使います。
else if
は、必要なだけいくつでも繋げることができます。例えば、点数によって評価を細かく分けたい時なんかに便利です。
package main import "fmt" func main() { score := 85 if score >= 90 { fmt.Println("素晴らしい!S評価です!") } else if score >= 80 { fmt.Println("すごい!A評価です!") // scoreが85なので、ここが実行される } else if score >= 70 { fmt.Println("良い調子!B評価です!") } else { fmt.Println("もう少し頑張ろう!C評価です。") } }
このコードでは、score
が85なので、最初のif score >= 90
はfalse
になります。次にelse if score >= 80
がチェックされ、これはtrue
なので、"すごい!A評価です!"
が表示され、それ以降のelse if
やelse
はチェックされずに終わります。
else の使い方
else
は、「これまでのどの条件にも当てはまらなかった場合、最終的にこれをやってね」という役割を持っています。
else
には条件式は書きません。if
やelse if
の全ての条件がfalse
だった場合に、必ず実行される処理を書く場所です。
else
は、if
文の構造の中で一番最後に、一つだけ書くことができます。書かなくても問題ありませんが、どの条件にも当てはまらない場合の処理を決めておきたい時に使います。
package main import "fmt" func main() { age := 18 if age >= 20 { fmt.Println("成人です。お酒が飲めますね。") } else { // ageが20未満の場合、こちらが実行される fmt.Println("未成年です。お酒はまだダメですよ。") } }
この例では、age
が18なのでif age >= 20
はfalse
です。他にelse if
もないので、最後のelse
ブロックの中の処理が実行されます。
Go言語「if文」の実践的な使い方
理屈はわかったけど、実際にどう使うの?という声が聞こえてきそうですね。
いくつか具体的なサンプルコードを見て、if
文の使い方に慣れていきましょう。コードを読んで、実行結果を予想してから、実際に動かしてみるのがオススメです!
基本的なif文(数値比較)
まずは超シンプルな例から。
与えられた数値がプラスかマイナスかゼロかを判定してみましょう。
package main import "fmt" func main() { num := -5 if num > 0 { fmt.Println("numはプラスの数です。") } else if num < 0 { fmt.Println("numはマイナスの数です。") // numが-5なので、ここが実行される } else { fmt.Println("numはゼロです。") } num = 10 // numの値を変更してもう一度試す if num > 0 { fmt.Println("numはプラスの数です。") // 今度はここが実行される } else if num < 0 { fmt.Println("numはマイナスの数です。") } else { fmt.Println("numはゼロです。") } }
ソースコードの表示結果
numはマイナスの数です。 numはプラスの数です。
コード解説
最初のif
文では、変数num
に-5が入っています。
1. if num > 0
(-5 > 0) は false
なので次へ。
2. else if num < 0
(-5 < 0) は true
なので、"numはマイナスの数です。"
と表示してif
文を抜けます。
次に、num
の値を10に変更して同じif
文を実行します。
1. if num > 0
(10 > 0) は true
なので、"numはプラスの数です。"
と表示してif
文を抜けます。
if-else if-else文(成績評価)
次は、先ほどelse if
の説明でも少し触れた、点数による成績評価です。
複数のelse if
を使って、条件を細かく分けてみましょう。
package main import "fmt" func main() { score := 78 var grade string // 成績を入れるための変数を用意 if score >= 90 { grade = "秀" } else if score >= 80 { grade = "優" } else if score >= 70 { grade = "良" // scoreが78なので、ここがtrueになる } else if score >= 60 { grade = "可" } else { grade = "不可" } // 最後にまとめて結果を表示 fmt.Printf("あなたの点数は%d点、評価は「%s」です。\n", score, grade) }
ソースコードの表示結果
あなたの点数は78点、評価は「良」です。
コード解説
変数score
に78が入っています。if
文で上から順に条件がチェックされます。
1. score >= 90
(78 >= 90) は false
。
2. else if score >= 80
(78 >= 80) は false
。
3. else if score >= 70
(78 >= 70) は true
! なので、変数grade
に"良"
が代入され、このif
文の処理は終わります。
4. 最後にfmt.Printf
で、点数と決定された評価を表示しています。Printf
を使うと、文字列の中に変数の値を埋め込めて便利ですね。
Go言語「if文」の便利な機能:初期化ステートメント付きif
Go言語のif
文には、ちょっと面白い書き方があります。
それは、条件式の前に、簡単な処理(変数の宣言と初期化など)を書けるというものです。「初期化ステートメント付きif」なんて呼ばれたりします。
書き方はこうです。
if 初期化ステートメント; 条件式 { // 初期化ステートメントで宣言した変数は、このifブロック(と、else if, elseブロック)の中だけで使える // 条件式がtrueの時の処理 } else { // ここでも初期化ステートメントで宣言した変数が使える } // if文を抜けると、初期化ステートメントで宣言した変数は使えなくなる
何が嬉しいかというと、if
文の中でしか使わない変数を、そのif
文のスコープ(有効範囲)内に閉じ込めることができる点です。これにより、変数の影響範囲が限定され、コードが読みやすく、そして安全になります。
例えば、関数を呼び出してその結果とエラーをチェックする、という場面でよく使われます。
package main import ( "fmt" "strconv" // 文字列を数値に変換するパッケージ ) func main() { // "123"という文字列を数値に変換しようとする // strconv.Atoiは、成功すると数値とnil(エラーなし)、失敗すると0とエラー情報を返す if num, err := strconv.Atoi("123"); err == nil { // エラーがなかった(errがnilだった)場合のみ、変換後の数値numを使える fmt.Printf("変換成功!数値は %d です。\n", num) // ここで変数numとerrが使える } else { // エラーがあった場合 fmt.Printf("変換失敗… エラー内容: %v\n", err) // ここでも変数numとerrが使える(numは通常0が入る) } // fmt.Println(num) // ここでnumを使おうとするとエラーになる(スコープ外) }
この例では、strconv.Atoi("123")
を実行して、その結果をnum
に、エラー情報をerr
に代入する、という初期化ステートメントをif
の前に書いています。そして、条件式err == nil
でエラーがなかったかどうかをチェックしています。
変数num
とerr
は、このif-else
ブロックの中でしか使えません。ブロックの外で使おうとするとコンパイルエラーになり、「おっと、ここで使う変数じゃなかった」と気づけるわけです。便利でしょう?
Go言語「if文」を使う上での注意点
最後に、Go言語のif
文を使う上で、初心者が「あれ?」となりやすいポイントや、気をつけてほしい点をいくつか挙げておきますね。転ばぬ先の杖ってやつです!
-
条件式を
()
で囲まない
他の言語(C言語やJavaなど)の癖で、ついif (条件式) { ... }
と書きたくなるかもしれませんが、Goでは()
は不要です。書いても動く場合もありますが、Goの標準的な書き方ではないので、書かないようにしましょう。// これはGoのスタイルではない (書いても動くけど…) // if (score >= 60) { ... } // これがGoのスタイル! if score >= 60 { ... }
-
{
はif
やelse
と同じ行に書く
これもGoの重要なルールです。if
やelse if
、else
の直後の{
を次の行に書くと、コンパイラに怒られます。// これはエラーになる! if score >= 60 { // ← ダメ! ifと同じ行に書くこと! fmt.Println("合格") } // 正しくはこう if score >= 60 { // ← OK! fmt.Println("合格") }
-
代入
=
と比較==
を間違えない
これはどの言語でもありがちなミスですが、if
の条件式の中で、比較するつもりがうっかり代入=
を書いてしまうことがあります。Goでは、if
の条件式の結果は必ずbool
型(true
かfalse
)でないといけないので、多くの場合コンパイルエラーになって気づけますが、注意しましょう。// これはエラーになる (代入の結果はboolではない) // if score = 100 { ... } // 正しくは比較演算子を使う if score == 100 { ... }
-
条件式は
bool
型である必要がある
他の言語では、数値の0をfalse
、それ以外をtrue
とみなすことがありますが、Goではそのような暗黙の型変換は行われません。if
の条件式には、必ずtrue
かfalse
になる式を書く必要があります。// これはエラーになる (数値はboolではない) // num := 1 // if num { ... } // 正しくは比較などを使ってbool値にする num := 1 if num != 0 { // numが0でないかどうかを明示的に比較する fmt.Println("numはゼロではありません。") }
これらの点に気をつければ、Goのif
文でハマることは少なくなるはずです!
【まとめ】Go言語の「if文」で条件分岐を自在に操ろう
この記事では、Go言語の条件分岐の主役、if
文について、基本的な書き方からelse if
、else
を使った複数の条件分岐、Goならではの初期化ステートメント付きif
、そして注意点まで、ガッツリ解説してきました。
もう一度ポイントをおさらいしましょう。
if
文は条件によって処理の流れを変える時に使う。- 基本形は
if 条件式 { 処理 }
。()
は不要、{
は同じ行に。 else if
で追加の条件、else
でそれ以外の条件に対応できる。- 比較演算子
==
,!=
,<
,>
,<=
,>=
や論理演算子&&
,||
,!
で条件を作る。 if 初期化; 条件式 { ... }
で、変数のスコープを限定できる。- 条件式は必ず
bool
型(true
かfalse
)になるように書く。
if
文は、プログラミングの基本的な要素ですが、本当に奥が深くて、これを使いこなせるかどうかでプログラムの賢さが大きく変わってきます。
この記事を通して、Go言語のif
文の書き方や考え方がしっかり身についていれば嬉しいです!
さあ、学んだことを活かして、次はループ処理(for
文)など、Go言語の他の機能もどんどん学んでいきましょう! あなたのGo言語ライフが、もっともっと楽しくなることを応援しています!
【関連記事】 Go言語とは?特徴・できること・将来性
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。