Menu
Coddy logo textTech

`if` における変数のシャドウイング

CoddyのGOジャーニー「基礎」セクションの一部 — レッスン 37/109。

if 文における変数のシャドーイングについて学びましょう。これにより、if ブロックとその関連する else ブロック内でのみ存在する変数を作成することができます。

まず、条件文の外側に変数を作成しましょう:

x := 10
fmt.Println("Original x value:", x)

このコードを実行すると、プログラム全体で使用できる値10を持つ変数xが用意されます。

それでは、if ステートメント内で変数のシャドウイングを使用して、そのブロック内でのみ存在する新しい変数を作成してみましょう。

if y := x * 2; y > 15 {
    fmt.Println("y is greater than 15:", y)
    // y はこのブロック内でのみ存在します
} else {
    fmt.Println("y is not greater than 15:", y)
    // y は else ブロック内でも利用可能です
}

このコードを実行した後、Goはyを20(x * 2)として計算し、それが15より大きいかどうかをチェックし、それから最初のブロックを実行します。出力は画面に次のように表示されます:

y is greater than 15: 20

最後に、if文の後に変数にアクセスしてみましょう:

// fmt.Println(y) はエラーになります - yはここでは存在しません
fmt.Println("x is still:", x)

このコードを実行した後、xには引き続きアクセスできますが、yifおよびelseブロック内にのみ存在していたため、もはや利用できません。画面には次のように表示されます:

x is still: 10

これは、if文における変数のシャドウイング(variable shadowing)がどのように機能するかを示しています。変数 y は、それが宣言された条件ブロック内でのみアクセス可能です。

challenge icon

チャレンジ

初心者

このチャレンジでは、if ステートメント内での変数のシャドウイングを練習します。if ブロック内で宣言された変数が、外部スコープの変数と同じ名前を持ちながら、異なる値を持つ仕組みを確認します。

コードには外部スコープに message という変数があります。あなたのタスクは、if ブロック内に同じ名前のシャドウイングされた変数を作成し、両方の変数を表示してシャドウイングの効果を確認することです。

チートシート

if ステートメントにおける変数のシャドウイングを使用すると、条件付きブロックとその関連する else ブロック内でのみ存在する変数を作成できます。

if ステートメントにおける変数のシャドウイングの構文は以下の通りです:

if variable := expression; condition {
    // variable はこのブロック内でのみ存在します
} else {
    // variable は else ブロック内でも利用可能です
}

例:

x := 10
if y := x * 2; y > 15 {
    fmt.Println("y is greater than 15:", y)
} else {
    fmt.Println("y is not greater than 15:", y)
}
// y はここではもうアクセスできません
fmt.Println("x is still:", x)

シャドウイングされた変数は、それが宣言された if および else ブロック内でのみアクセス可能であり、それらの外側からはアクセスできません。

自分で試してみよう

package main

import "fmt"

func main() {
	// 外側のスコープの変数
	message := "Hello from outer scope"
	
	isLoggedIn := true
	
	if isLoggedIn {
		// TODO: "Hello from inner scope" という値を持つ 'message' という名前の新しい変数を作成します
		
		// 内側のスコープのメッセージを出力します
		fmt.Println(message)
	}
	
	// 外側のスコープのメッセージを出力します
	fmt.Println(message)
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン