変数の有効範囲と有効期限

From Apache OpenOffice Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
doc OOo
Book.png

Apache OpenOffice Basic で確保される個々の変数は、プログラムのすべての領域で使用可能というわけではなく、それぞれ有効となる範囲と期限があります。変数が確保され続ける期限および利用可能なプログラム範囲は、各変数の種類と宣言された位置に依存します。

局所変数

関数や手続きの内部で宣言された変数は、局所変数と呼ばれます。

Sub Test
  Dim MyInteger As Integer
  ' ...
End Sub

このような局所変数は、該当する関数や手続きが実行されている間は確保され続けますが、実行が終了した段階で消去されます。このため関数を呼び出す際には、以前の呼び出し時に代入された値などを利用することはできません。

このような値を保持しておくには、変数を Static として定義しておく必要があります。

Sub Test
  Static MyInteger As Integer
  ' ...
End Sub
Documentation note.png VBA とは異なり、Apache OpenOffice Basic の局所変数には、モジュールヘッダにある大域変数やプライベート変数と同じ名前を付けることはできません。このため、VBA アプリケーションを Apache OpenOffice Basic に移植する際には、重複した変数名を変更する必要があります。

パブリックドメイン変数

パブリックドメイン変数は、モジュールのヘッダセクションで Dim キーワード を使って定義します。この変数は、ライブラリ内のすべてのモジュールで利用可能となります。

モジュール A:

Dim A As Integer
Sub Test
  Flip
  Flop
End Sub

Sub Flip
 A = A + 1
End Sub

モジュール B:

Sub Flop
  A = A - 1
End Sub

変数 A の値は、関数 Test では直接変更されませんが、間接的に関数 Flip で 1 増やされ、関数 Flop で 1 減らされています。この両者の関数による変更は、大域的 (グローバル) に実施されています。

パブリックドメイン変数の宣言用キーワードには、Dim の代わりに Public も使用できます。

Public A As Integer

パブリックドメイン変数は、該当するマクロが実行されている間は確保され続けますが、実行が終了した段階で消去されます。

大域変数

大域変数はパブリック変数と同等の機能を担っていますが、該当するマクロの実行終了後もその値が確保され続ける点が異なります。大域変数は、モジュールのヘッダセクションでキーワード Global を使って定義します。

Global A As Integer

プライベート変数

Private 変数は、定義されたモジュール内部でのみ有効となります。プライベート変数の定義には、キーワード Private を使用します。

Private MyInteger As Integer

複数のモジュールで同じ名前の Private 変数が使われている場合、Apache OpenOffice Basic では、これらの変数はそれぞれ個別の変数として確保されます。次のサンプルコードでは、モジュール A およびモジュール B の両方で、C という名前の Private 変数を確保します。関数 Test は、最初にモジュール APrivate 変数を設定し、次にモジュール BPrivate 変数を設定します。

モジュール A:

Private C As Integer

Sub Test
  SetModuleA      ' Sets the variable C from module A
  SetModuleB      ' Sets the variable C from module B
  ShowVarA        ' Shows the variable C from module A (= 10)
  ShowVarB        ' Shows the variable C from module B (= 20)
End Sub

Sub SetmoduleeA
  C = 10
End Sub

Sub ShowVarA
  MsgBox C        ' Shows the variable C from module A. 
End Sub

モジュール B:

 
Private C As Integer
 
Sub SetModuleB
  C = 20
End Sub

Sub ShowVarB
  MsgBox C        ' Shows the variable C from module B.
End Sub


Content on this page is licensed under the Public Documentation License (PDL).


Personal tools