Thursday, May 29, 2008

今回は、スクリプトファイルと関数内における変数のスコープについて説明したいと思います。

まずは、下記スクリプトで変数のスコープについてみていきたいと思います。左側の数字は説明上付けた行番号です。

#Scope1.ps1

01 $a = 3
02
03 function Sample1
04 {
05    Write-Host "1)変数`$a=$a"
06    $a = 5
07    Write-Host "2)変数`$a=$a"
08 }
09 
10 #関数 sample1を実行
11 Sample1
12 Write-Host "3)変数`$a=$a"

このスクリプトを実行すると結果は下記のようになります。

PS C:\Work> ./Scope1.ps1
1)変数$a=3
2)変数$a=5
3)変数$a=3

この動作について図で解説したいと思います。

まず、このスクリプトの1行目で、変数$aが作成され、3が代入されます。

この変数はスクリプト内で有効です。(1行目から12行目までがこの変数のスコープとなります)

次に、11行目で関数Sample1を呼び出します。

5行目が実行されるわけですが、ここでは1行目に作成した変数$aが参照され"3"を表示します。

次に6行目で変数$aに5を代入していますが、ここでの変数$aは1行目で作成した変数とは別のものとなります。この変数は関数Sample1内でのみ有効で生存期間は6行目から7行目までとなります。これはローカル変数と呼ばれます。

最後に、12行目が実行されるわけですが、ここでの変数$aは1行目で作成した変数$aであるため、結果として"3"が表示されます。

以上のことから

・スクリプトファイル内で作成した変数は、スクリプトファイル内すべてが有効範囲である。

・関数内で作成した変数は、関数内のみが有効範囲である。

・スクリプトファイル内で有効な変数と、関数内で作成した変数が同一名の場合は関数内で作成した変数が優先されるが、スクリプトスコープを持つ変数を上書きしない

ということがわかります。

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

Theme design by Jelle Druyts

Pick a theme: