1
0

Go言語でのシャドーイングの理解

Posted at

実装

func main() {

	x := 10
	fmt.Println("outter block", x)//10

	if x > 5 {
		fmt.Println("inner block", x)//10
		x := 5
		fmt.Println("inner block", x)//5
	}
	fmt.Println("outter block", x)//10

上記のxで変数宣言したものは条件分岐より外では、10になります。ブロック内で再宣言すると値が隠蔽され、5になります。そして、ブロック外では最初に宣言した値にアクセスでき、再び10になります。この性質をシャドーイングと言います。

func main() {
    var x int = 10
    fmt.Println("Outside block:", x) // 10
    
    {
        var x int = 20 // ここで新しい変数を宣言しようとすると、エラーが発生します。
        fmt.Println("Inside block:", x)
    }
    
    fmt.Println("Outside block again:", x)
}

上記のようにvarで変数宣言をすると、ブロック内での再宣言でエラーが発生します。シャドーイングを避けることができます。

まとめ

  • := を使用した短い変数宣言は、新しい変数を作成し、シャドーイングを引き起こす可能性があります。
  • var を使用した宣言は、既存の変数と同じ名前で再宣言しようとするとエラーが発生するため、シャドーイングを避けることができます。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0