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

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

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

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

スポンサーリンク

背景

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

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

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

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

論理演算子(Logical operators)

論理演算子は真偽値に適用され、オペランドと同じ型の結果を生成する。左オペランドが評価され、条件が必要とする場合にのみ右オペランドが評価される。

&&    条件付きAND    p && q  は  「p ならば q、さもなくば false」
||    条件付きOR     p || q  は  「p ならば true、さもなくば q」
!     NOT            !p      は  「p の否定」

解説

論理演算子の基本

論理演算子は bool 型の値を組み合わせて、新しい bool 値を作ります。

true && true    // true
true && false   // false
false || true   // true
false || false  // false
!true           // false
!false          // true

短絡評価(ショートサーキット)

原文の「条件が必要とする場合にのみ右オペランドが評価される」という部分がとても重要です。これは**短絡評価(short-circuit evaluation)**と呼ばれる仕組みです。

&&(AND)の場合: 左が false なら、右は評価されない。

// 左が false → 結果は必ず false → 右は見る必要がない
false && expensiveFunction()  // expensiveFunction は呼ばれない

||(OR)の場合: 左が true なら、右は評価されない。

// 左が true → 結果は必ず true → 右は見る必要がない
true || expensiveFunction()   // expensiveFunction は呼ばれない

これは単なる最適化ではなく、プログラムの正しさに関わる仕様です。

短絡評価を活用したイディオム

Go のコードでは、短絡評価を前提としたパターンが日常的に使われています。

nilチェックとアクセスを1行で書く

if p != nil && p.Name == "Alice" {
    // p が nil でないことを確認してから p.Name にアクセス
    // 短絡評価のおかげで、p が nil のとき p.Name は評価されない
}

もし短絡評価がなかったら、pnil のときに p.Name でパニックしてしまいます。左の条件が false なら右は評価されない、という保証があるからこそ安全に書けるわけです。

デフォルト値のパターン

if name == "" || !isValid(name) {
    name = "default"
}
// name が空文字列なら isValid は呼ばれない

スライスの範囲チェック

if i < len(s) && s[i] == target {
    // i が範囲内であることを先に確認
    // 範囲外なら s[i] は評価されないのでパニックしない
}

!(NOT)演算子

! は真偽値を反転させる単項演算子です。

done := false
if !done {
    fmt.Println("まだ終わっていない")
}

条件を否定するときに使いますが、複雑な否定はコードを読みにくくするので注意が必要です。

// 読みにくい
if !(a && !b || c) { ... }

// 条件を整理して名前をつけると読みやすい
isReady := a && !b || c
if !isReady { ... }

論理演算子と比較演算子の組み合わせ

前回学んだ優先順位を思い出しましょう。比較演算子(優先順位3)は &&(優先順位2)や ||(優先順位1)より先に評価されます。

x > 0 && y > 0
// (x > 0) && (y > 0) と解釈される。括弧は不要だがつけてもOK

a == 1 || b == 2 && c == 3
// a == 1 || (b == 2 && c == 3) と解釈される
// && が || より優先されるので注意!

&&|| より優先順位が高いことは、算数の「掛け算が足し算より先」と同じ感覚で覚えられます。AND は「かつ」で条件を絞り込む(掛け算的)、OR は「または」で条件を広げる(足し算的)というイメージですね。

おわりに 

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

よっしー
よっしー

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

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

コメント

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