HIRO's.NET

VB.NET, C#, PowerShell Tipsサイト

 VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。

 基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。

HIRO's.NET RSSHIRO's.NET RSS


PowerShellの開発でお困りのことはありませんか?
そんな悩みは当サイトで解決!!

HOME > PowerShell Tips > 関数 Tips メニュー

06.値渡しと参照渡し

 
UPDATE:2007/12/04    
 




PowerShellでは関数の引数に値渡しと参照渡しを使用することができます。
(注:ここでは値渡しと参照渡しの違いについては説明いたしません)

まずは値渡しの例です。(sample1)

まず test1を作成します。引数は$x1つとします。
test1という関数では受け取った$xを強制的に3に書き換えています。

最初に$xに1を代入します。(1)
関数 test1に$xを渡します。(2)
このとき関数内部では受け取った値を3に書き換えます
関数実行後の$xを確認します(3)
値渡しなので$xは(1)でセットした"1"を保持していいることがわかります。

しかし値渡しなので、関数を実行した後でも関数実行前の値を保持していることがわかります。

sample1

PS C:\Work> function test1 ($x)
>> {
>> $x = 3
>> }
>>
PS C:\Work2> $x = 1 ---(1)
PS C:\Work2> test1 $x ---(2)
PS C:\Work2> $x ---(3)
1

次に参照渡しの例です。(sample2)

sample1を参照渡し変更したtest2という関数を作成してみます。
参照渡しをするには、引数の前に[ref]を付けます。
また、関数内部では参照渡しで受け取った値は

$変数名.value

として使用しなければならないことに注意してください。

最初に$xに1を代入します。(1)
関数 test2に$xを渡します。(2)
このとき関数内部では受け取った値を3に書き換えます
関数実行後の$xを確認します(3)
参照渡しなので$xは(2)で書き換えられた"3"になっていることがわかります。

注意)参照渡しの関数の呼び出しは、([ref]$変数名)という形で引数を渡す必要があります。

しかし値渡しなので、関数を実行した後でも関数実行前の値を保持していることがわかります。

sample2

PS C:\Work> function test2 ([ref]$x)
>> {
>> $x.value = 3
>> }
>>
PS C:\Work2> $x = 1 ---(1)
PS C:\Work2> test2 ([ref]$x) ---(2)
PS C:\Work2> $x ---(3)
3