スカラー変数を明示に宣言する

変数宣言では、識別子を作成してそのスコープと存続期間を決めます。次に、その変数が参照するメモリの位置に格納できるデータの型を指定すると、LotusScript® がその位置へ初期値を書き込みます。変数は明示的に宣言することをお勧めします。Dim ステートメントやそのバリエーションの 1 つを使用して、スカラー変数を明示的に宣言します。使用するバリエーションは、変数を宣言するアプリケーション領域、および変数に与えるスコープと存続期間によって異なります。

注: LotusScript に、明示的宣言になっているかを必ずチェックさせるには、OPTION DECLARE を指定します。明示的に宣言されていない変数があると、コンパイルエラーが発生します。アプリケーションをリリースする前に、明示的宣言をチェックすることをお勧めします。

次の図は、1 つのスカラー変数 (この例では String 型の変数) を宣言する構文をまとめたものです。

Single scalar variable syntax

スカラー変数の宣言に使用する構文の要素は、次の表に示すとおりです。

要素

説明

Dim

Private スコープを持つ変数を宣言します。

Public、Private

Public は Public スコープを持つ変数を宣言します。Private は Private スコープを持つ変数を宣言します。

Static

プロシージャ内で宣言された変数だけに適用されます。Static 変数は、プロシージャが定義されたモジュールがロードされている間、プロシージャへの呼び出し間で値が (消滅するのではなく) 保持されます。

varName

変数の名前です。モジュールレベルで、またはプロシージャ内で、LotusScript で認識されるデータ型接尾辞のどれでも付けられます。 これによって、変数が保持できるデータの型が決まります。宣言時に変数名にデータ型の接尾辞を付けることができるのは、宣言に As dataType 節を含めない場合だけです。

As dataType

変数が保持できるデータの型を指定します。この節を含める場合、varName にはデータ型の接尾辞を付けることはできません。この節は、ユーザー定義のデータ型またはクラスの定義内で変数を宣言する場合に必要ですが、モジュールレベルまたはプロシージャ内の変数の宣言では、省略できます。

初期デフォルト値

変数を明示的に宣言する場合、LotusScript はその変数に既定の初期値を代入します。

変数の型

初期値

数値
(Boolean、Byte、Integer、Long、Single、Double、Currency)

0

可変長 String 型

"" (空の文字列)

固定長 String 型

Chr(0) (NULL 文字) で埋められた、指定の長さの文字列

注: LotusScript では初期値が変数に代入されるので、初期値が必要とするものと異なる場合や、変数名のスペルが間違っているために新しい変数として扱われた場合には、予期せぬエラーが発生する場合があります。

宣言時に変数名の後ろにデータ型の接尾辞を付けたかどうかに関係なく、明示的に宣言されたスカラー変数を参照できます。

以下に例を示します。

Public firstName$
Public lastName As String
Dim age%
Dim money As Currency

firstName$ = "Roman"
lastName$ = "Minsky"
age% = 12
money@ = 150.75
Print firstName & " " & lastName & ", " & age &", $" & money
' Output: Roman Minsky, 12, $150.75
Print firstName$ & " " & lastName$ & ", " & age% &", $" & money
' Output: Roman Minsky, 12, $150.75

String 型変数

String 型の変数には、Unicode 文字セットの一連の文字が含まれます。Unicode は、文字セット中の各文字を 2 バイトを使用して表す文字エンコードシステムです。LotusScript では、アプリケーションをコンパイルする前に、入力データが Unicode 形式に変換されます。

String 型の変数は可変長の場合も固定長の場合もあります。可変長の String 型変数を宣言する構文は、前述の図に示されています。固定長の String 型変数を宣言する構文は、次のとおりです。

Fixed-length string variable syntax

charNum 引数は、varNamecharNum で指定された文字数で構成される固定長の String 型変数であることを指定しています。

文字列を固定長の String 型変数に代入する場合、宣言された長さに合うように、必要に応じて文字列は切り捨てられたり、後続の空白で埋められます。

以下に例を示します。

Dim myName$
Dim myTown As String
' myName and myTown are variable-length string variables. 
Dim myState As String * 2
' myState is a 2-character fixed-length String variable.
Dim myZIP As String * 5
' myZIP$ is a 5-character fixed-length String variable.
' If myZIP$ is assigned a value of more than 5 characters,
' that value will be truncated to its first 5 characters.
myName$ = "Mark"
myTown$ = "Centerville"
myState$ = "MA"
myZIP$ = "02100-9999"
Print myName$
' Output: Mark
Print myTown$ & ", " & myState$ & " " & myZIP$
' Output: Centerville, MA 02100

一度に複数の変数を宣言する

Dim ステートメントとそのバリエーションを使用して、モジュールレベルまたはプロシージャ内で一度に複数の変数を宣言できます。モジュールレベルでは、構文は次のとおりです。

{ Dim|Public| Private}varName1[ As dataType ], varName2 [ As dataType], ...

プロシージャ内では、構文は次のとおりです。

{ Dim | Static } varName1 [ As dataType ], varName2 [ As dataType ], ...

すべての変数を明示的に宣言することが重要です。以下に例を示します。

DIM X, Y AS INTEGER

この結果、Y のデータ型は INTEGER になりますが、X は Variant になります。正しい構文は次のとおりです。

DIM X AS INTEGER, Y AS INTEGER

As dataType 節を使用しない場合にデータ型の接尾辞を変数名の後ろに付ける (および As dataType 節を使用する場合にはデータ型の接尾辞を付けない) という規則は、単一のスカラー変数の宣言と同じです。

以下に例を示します。

Dim aString$, anInt%, aDouble As Double, aCurrency@
aString$ = "Hello"
Print TypeName(aString$) & ": " & aString$
' Output: STRING: Hello
anInt% = 123
Print TypeName(anInt%) & ": " & anInt%
' Output: INTEGER: 123
aDouble# = 123.45
Print TypeName(aDouble) & ": " & aDouble#
' Output: DOUBLE: 123.45
aCurrency@ = 456.78
Print TypeName(aCurrency@) & ": " & aCurrency@
' Output: CURRENCY: 456.78

Sub MySub
  Dim aString As String * 2, anotherString$, anInt%
  Static aDouble#, anotherDouble#
    
  aString$ = "Hi"
  Print TypeName(astring$) & ": " & aString$
  anotherString$ = "World"
  Print TypeName(anotherstring$) & ": " & anotherString$
  anInt% = 234
  Print TypeName(anInt%) & ": " & anInt%
  aDouble# = aDouble# + 1
  anotherDouble# = aDouble# * 2
  Print TypeName(anotherDouble#) & ": " & anotherDouble#
End Sub
Call MySub
' Output: 
' STRING: Hi
' STRING: World
' INTEGER: 234
' DOUBLE: 2
Call MySub
' Output:
' STRING: Hi
' STRING: World
' INTEGER: 234
' DOUBLE: 4