Go言語入門:言語仕様 -Vol.109-

スポンサーリンク
Go言語入門:言語仕様 -Vol.109- 用語解説
Go言語入門:言語仕様 -Vol.109-
この記事は約4分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

本日は、Go言語の言語仕様について解説しています。

スポンサーリンク

背景

Go言語を学び始めて、公式の「The Go Programming Language Specification(言語仕様書)」を開いてみたものの、「英語で書かれていて読むのが大変…」「専門用語ばかりで何を言っているのかわからない…」と感じたことはありませんか? 実は、多くのGo初心者が同じ壁にぶつかっています。

言語仕様書は、Go言語の「正式な取扱説明書」のような存在です。プログラミング言語がどのように動くのか、どんなルールで書くべきなのかが詳しく書かれていますが、その分、初めて読む人には難しく感じられるのも事実です。

そこでこの記事では、言語仕様書の導入部分を丁寧な日本語訳とともに、初心者の方でも理解しやすい補足説明を加えてお届けします。「強く型付けされている」「ガベージコレクション」「並行プログラミング」といった専門用語も、具体例を交えながらわかりやすく解説していきます。

言語仕様書は難しそうに見えますが、一つひとつの概念を丁寧に読み解いていけば、必ず理解できます。一緒に、Go言語の基礎をしっかり学んでいきましょう!

switch文(Switch statements)

switch 文は多方向の実行を提供する。式または型が switch 内の「ケース」と比較され、どの分岐を実行するかが決定される。

SwitchStmt = ExprSwitchStmt | TypeSwitchStmt .

2つの形式がある。式switch と 型switch である。式switch では、ケースにはswitch式の値と比較される式が含まれる。型switch では、ケースには特別に注釈されたswitch式の型と比較される型が含まれる。switch式は switch 文において正確に一度だけ評価される。


解説

switch文ってなに?

switch 文は、値や型に応じて処理を分岐させる制御構文です。if-else if-else の連鎖をよりすっきり書けます。

// if-else if で書くと長い
if x == 1 {
    fmt.Println("one")
} else if x == 2 {
    fmt.Println("two")
} else if x == 3 {
    fmt.Println("three")
} else {
    fmt.Println("other")
}

// switch で書くとすっきり
switch x {
case 1:
    fmt.Println("one")
case 2:
    fmt.Println("two")
case 3:
    fmt.Println("three")
default:
    fmt.Println("other")
}

2つの形式

Go の switch には2種類あります。この節はその導入で、詳細は後続の節で説明されます。

1. 式switch(Expression switch)

値を比較して分岐します。最も一般的な使い方です。

switch day {
case "Monday":
    fmt.Println("週の始まり")
case "Friday":
    fmt.Println("もうすぐ週末")
default:
    fmt.Println("普通の日")
}

2. 型switch(Type switch)

インターフェースの中身の型を判定して分岐します。

switch v := x.(type) {
case int:
    fmt.Println("整数:", v)
case string:
    fmt.Println("文字列:", v)
default:
    fmt.Println("その他の型")
}

「正確に一度だけ評価される」の意味

switch式(switch の後に書く式)は一度だけ評価されます。各 case と比較するたびに評価されるわけではありません。

switch expensiveFunction() {  // 1回だけ呼ばれる
case 1:
    // ...
case 2:
    // ...
case 3:
    // ...
}

もし毎回評価されたら、関数が3回呼ばれてしまいますが、実際には1回だけです。副作用のある関数を使うときにこの点は重要になります。

Go の switch は C と違う

後続の節で詳しく説明されますが、Go の switch には C 言語との大きな違いがあります。

  • break が不要:各 case の終わりで自動的に停止する(C では break を書き忘れると次のケースに落ちる)
  • case に複数の値を書けるcase 1, 2, 3: のように
  • 条件なし switch が書けるswitch { case x > 0: ... } のように if-else の代わりとして使える

これらの詳細は、次の「式switch」と「型switch」の節で順番に見ていきます。

おわりに 

本日は、Go言語の言語仕様について解説しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました