CodeZine(コードジン)

特集ページ一覧

Windows PowerShell 入門(8)-関数編3

フィルタ、スクリプトブロック、変数のスコープ

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/08/08 14:00

目次

プライベートスコープ

 変数のスコープの種類には、プライベートスコープもあります。下記スクリプトで説明します。

Scope3.ps1
$a = 3

function funcA
{
    Write-Host "2)$a"
    $a = "7"
    Write-Host "3)$a"
    funcB
}

function funcB
{
   Write-Host "4)$a"
}

Write-Host "1)$a"
funcA
Write-Host "5)$a"

 このスクリプトには2つの関数があり、最初にfuncAを呼び出し、funcAの中からfuncBを呼び出しています。またソース内での1)~5)は分かりやすいように実行順を示しています。

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

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

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

 

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

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

 さらに、この関数funcAfuncBを呼び出しており、funcAで作成したローカル変数$aの有効期間は青線で示した箇所、つまりfuncBまでおよびます。

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

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

 下記は「Scope3.ps1」をprivate修飾子を使用して書き換えたものです。funcAのローカル変数のスコープがfuncBに及ばないようにしています(6行目でpraivateキーワードを付加しています)。

Scope4.ps1
$a = 3

function funcA
{
    Write-Host "2)$a"
    $private:a = "7"
    Write-Host "3)$a"
    funcB
}

function funcB
{
   Write-Host "4)$a"
}

Write-Host "1)$a"
funcA
Write-Host "5)$a"

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

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

 「Scope4.ps1」でのスコープを図で見てみましょう。

 

 privateキーワードを使用したので、funcAのローカル変数$aのスコープは青線の部分となります。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Windows PowerShell 入門

もっと読む

著者プロフィール

  • HIRO(ヒロ)

    HIRO's.NETのHIROです。 とある半導体工場のSEです。 VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。 最近はBlog でPowerShellについて書いています。 2008/07/07にPowerShell from Japan!!という...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5