Thursday, May 29, 2008

今回はprivateスコープについて説明したいと思います。

#Scope3.ps1
01 $a = 3
02 
03 function funcA
04 {
05     Write-Host "2)$a"
06     $a = "7"
07     Write-Host "3)$a"
08     funcB
09 }
10
11 function funcB
12 {
13    Write-Host "4)$a"
14 }
15
16 Write-Host "1)$a"
17 funcA
18 Write-Host "5)$a"

まずは、上記のスクリプトですが、最初にfuncAが呼び出され、funcAの中からfuncBを呼び出すように記述してあります。

このスクリプトの実行結果は下記の通りです。

PS C:\Work> ./Scope3.ps1
1)3
2)3
3)7
4)7
5)3

このスクリプトの動作について図で説明したいと思います。

1行目の変数$aはスクリプトスコープを持つ変数となるので、有効期間は赤線の通りでスクリプトファイルの最後までとなります。

次に6行目の変数$aですが、この変数はローカル変数となりfuncAが有効期間となります。

しかし、funcAからfuncBを呼び出しているため、funcAで作成したローカル変数$aの有効期間は青線で示した箇所となってしますので注意が必要です。

では、funcA内だけで有効なローカル変数を作成した場合にはどうすれば良いでしょうか?

これを実現するにはprivate修飾子を使用します。

下記はScope3.ps1をprivate修飾子を使用したものに書き換えたものです。6行目だけが変更になっています。

#Scope4.ps1
01 $a = 3
02 
03 function funcA
04 {
05     Write-Host "2)$a"
06     $script:a = "7"
07     Write-Host "3)$a"
08     funcB
09 }
10
11 function funcB
12 {
13    Write-Host "4)$a"
14 }
15
16 Write-Host "1)$a"
17 funcA
18 Write-Host "5)$a"

このスクリプトの実行結果は下記の通りです。

PS C:\Work> ./Scope4.ps1
1)3
2)3
3)7
4)3
5)3

下図はScope4.ps1での変数のスコープを表したものです。

private修飾子を使用することで、funcBへは影響を与えなくなることがわかりますね。

Thursday, May 29, 2008 11:29:03 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Comments are closed.

Theme design by Jelle Druyts

Pick a theme: