メインコンテンツにスキップ
モジュール 2 · レッスン 1 / 5コース内の 6/50~10 min
モジュールのレッスン (1/5)

if、else、および init ステートメント

Go では、if 構文が古典的な構文ですが、2 つの重要な違いがあります。 C/Java と比較: 条件を囲む括弧はありません。 if で一時変数を直接宣言する機能 (init ステートメント)。

基本的な構文

Go
if temperatura > 30 {
    fmt.Println("caldo")
} else if temperatura > 20 {
    fmt.Println("mite")
} else {
    fmt.Println("fresco")
}

単一行ブロックの場合でも中括弧は必須です。の 条件は bool タイプである必要があります。Python や JS のような「真実性」はありません。

Go
n := 0
// if n { ... }   // ERRORE: int non è bool
if n != 0 { ... }  // ok

Init ステートメント: スコープは if に限定されます

if/else 内でのみ有効な変数を宣言できます。 ; を使用して条件から分離します。

Go
if v, err := call(); err == nil {
    fmt.Println("ok", v)
} else {
    fmt.Println("ko", err)
}
// qui v ed err NON esistono più

これは、外側のスコープを汚さずにエラーを処理するための慣用的なパターンです。

if スコープでのシャドウイング

外部変数が init によって 「シャドウ化」 された場合、内部では ローカルバージョンが勝った場合。その直後、外側のものが再び現れます。

Go
x := 10
if x := 3; x > 5 {
    fmt.Println("dentro:", x)  // mai stampato (3 < 5)
} else {
    fmt.Println("else:", x)    // 3
}
fmt.Println("dopo:", x)         // 10 — quella esterna

三項演算子はありません

Go には cond ? a : b がありません。条件付き割り当ての場合は、if/else が必要です。 3 ~ 4 行で表示します。これは読みやすさを重視した設計上の選択です。

Go
var label string
if age >= 18 {
    label = "adulto"
} else {
    label = "minore"
}

試してみてください

運動#go.m2.l1.e1
試行回数: 0読み込み中…

n の値に応じて、「positivo」、「zero」、または「negativo」を出力します。

エディターを読み込み中…
ヒントを表示

記号上の条件を含む `if / else if / else` チェーン。

3 回の試行後に解決策が利用可能になります

運動#go.m2.l1.e2
試行回数: 0読み込み中…

init ステートメントを使用して if で v := 42 を宣言し、v >= 18 の場合にのみそれを出力します。

エディターを読み込み中…
ヒントを表示

構文: `if init;条件 { ... }`。

3 回の試行後に解決策が利用可能になります

Quiz#go.m2.l1.e3
準備完了

このプログラムは何を出力しますか?

Go
x := 10
if x := 3; x > 5 {
    fmt.Println("dentro:", x)
} else {
    fmt.Println("else:", x)
}
fmt.Println("dopo:", x)
回答の選択肢

要約

  • 括弧のない条件。中括弧は常に必須です。
  • 条件は bool でなければなりません: 暗黙の真実性はありません。
  • Init if v, err := f(); err == nil { ... } は、v および err の範囲を制限します。
  • init でのシャドウイング: 外部変数をシャドウしないように注意してください。
  • 3 項なし: 拡張された if/else を記述します。