`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には引き続きアクセスできますが、yはifおよびelseブロック内にのみ存在していたため、もはや利用できません。画面には次のように表示されます:
x is still: 10これは、if文における変数のシャドウイング(variable shadowing)がどのように機能するかを示しています。変数 y は、それが宣言された条件ブロック内でのみアクセス可能です。
チャレンジ
初心者このチャレンジでは、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)
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
6制御フロー:条件分岐
`if` 文`else` キーワード`else if` キーワード`if` における変数のシャドウイング変数の初期化`switch` 文式を伴う `switch`式を伴わない `switch``fallthrough` キーワードまとめ:条件分岐