Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

プログラムは、一連の文で構成されています。単純な文は変数に値を代入し、変数から値を取得します。また、if などの複雑な文やループは、プログラム・フローをサポートし、オブジェクトを使用した強力な機能を提供します。

数式文

数式文は、値を変数に代入するか、処理を行うために使用します。次に例を示します。

msg = "Hello"
result = obj.Method()
Print x

代入式は、変数、配列要素、またはオブジェクト・プロパティの値を設定します。

var = 1
array(1) = 2
obj.Property = 3
objarray(1).Property = 4

通常、文の終わりは改行されます。しかし、文と文の間にコロン (:) を入れることで、1 行に複数の文を配置することができます。

a = 1 : b = 2 : c = 3
Print a : Print " " : Print b : Print " " : Print c

呼び出し

Call 文を使用して、Basic 内で関数やメソッドを呼び出すことができます。

Call obj.Method(a,b)

Call 文で、実際の “Call” トークンは完全にオプションで、省略されることもあります。

obj.Method(a,b)

Basic ではすべての関数引数は、既定で参照によって渡されます。ByRef 指示文と ByVal 指示文を使用して、この既定を引数ごとにオーバーライドすることができます。

obj.Method(ByRef a, ByVal b)

If

If 文を使用すると、条件付きで文を実行できます。Caché Basic での If 文は、以下の形式です。

If (expression) Then
    statement()
End If

expression が True と評価されると、If 文の本文が実行されます。If 文の本文は、ThenEnd If トークン間の 1 つ、または複数の文のブロックで構成されています。

より単純な、1 行形式の If 文も使用することができます。

If (expression) Then statement()

1 行形式の文には、End If トークンはありません。 If 文の本文は If トークンの後に続き、行の最後まで継続します。文と文の間にコロン (:) を配置することで、複数の文を含むことができることに注意してください。

If (expression) Then statement1() : statement2()

If 文には、Else 節を含めることができます。

If (expression) Then
    statement1()
Else
    statement2()
End If

Else ブロック内の文は、expression が False と評価された場合に実行されます。

ElseIf

ElseIf はオプションの文で、最も近くにある If 文の一部です。ElseIf 文を使用して、If 文は一連の式を順番にテストすることができます。

If (expression) Then
    statement1()
ElseIf (expression2) Then
    statement2()
ElseIf (expression3) Then
    statement3()
Else
    statement3()
End If

文が True である最初の If、または ElseIf ブロック内の文が実行されます。True である式がない場合、Else ブロックが実行されます。

For

For 文は、文の順序を繰り返すときに使用されます。

For...Next

For...Next ループはカウンタを使用して、文のブロックを指定された回数実行します。

For i = 1 To 10
    PrintLn i
Next

この場合、i は 1 に初期化され、For...Next ループの本文は i が 10 に到達するまで実行されます。i の値は、各繰り返しの後に 1 増分されます。

Step キーワードを使用して、指定した値でカウンタ変数を増加、または減少することができます。カウンタ変数を減少させるには、負の Step 値を使用します。この場合、終了値には必ず、開始値よりも小さい値を指定しなければなりません。

For i = 10 To 1 Step -1
    PrintLn i
Next
PrintLn "Blast Off!"

必要に応じて (主に読みやすくするため)、カウンタ変数を Next トークンの後に配置することができます。

For i = 1 To 10
    PrintLn i
Next i

Next トークンの後に誤った変数を使用すると、構文エラーが発生します。

For Each...Next

For Each...Next は、コレクション内の各要素、または配列の各項目に対して、文のグループを繰り返します。For Each...Next ループは、For...Next ループと類似しています。文を特定の回数繰り返す代わりに、For Each...Next ループはオブジェクトのコレクション、または配列の各要素の各項目に対する、一連の文を繰り返します。これは、コレクション内の要素数をユーザが把握していない場合に特に便利です。

例えば、以下の例は 10 の項目の配列を作成し、次に For Each...Next ループを使用して各要素の添え字を表示します。

' Create a simple array
For i = 1 To 10
    array(i) = i * i
Next

' Now display the subscripts and contents of the array
For Each key in array
    PrintLn key & ": " & array(key)
Next

多次元配列では、これはより興味深い結果となります。

' Create a multidimensional array
For i = 1 To 5
    For j = 1 To 5
        array(i, j) = i * j
    Next j
Next i

' Now display the subscripts and contents of the array
For Each key1 in array
    For Each key2 in array(key1)
        PrintLn key1 & "," & key2 & ": " & array(key1,key2)
    Next key2
Next key1

While

While 文を使用して、文のブロックを不定回数実行することができます。

While (expression)
    statement()
Wend

文は、expression が True である限り、繰り返されます。While ブロックは、Wend トークンで終了します。

例えば、以下のコードは While ブロックを 9 回実行します。

x = 1
While (x < 10)
    PrintLn x
    x = x + 1
Wend

Do...While

Do...While 文を使用して、文のブロックを不定回数実行することができます。

Do
    statement()
Loop While (expression)

文は、expression が True である限り、繰り返されます。Do...While ブロックは、Do トークンと Loop トークン内に含まれます。

Do...While 文は、ループ式を評価するにコンテンツを実行する点で、While 文とは異なります。

Select ...Case

Select...Case 文を使用して、プログラムは式の評価を基にした複数の実行パスの中から 1 つを選択することができます。これは、長い ElseIf 文の代わりとなる、もう 1 つの便利な方法です。

Select...Case 文は、以下の形式を使用します。

Select Case testexpression
    [Case expressionlist-n
        [statements-n]] . . .
    [Case Else expressionlist-n
        [elsestatements-n]]
End Select

testexpression が評価され、その結果は、各 Case 節に関連付けられている各 expressionlist の値と比較されます。次に、最初にマッチする Case 節と関連するコード・ブロックが実行されます。マッチするものがない場合は、Case Else ブロック (存在する場合) が実行されます。

次に例を示します。

x = 2
Select Case x
    Case 1
        PrintLn "First case"
    Case 2
        PrintLn "Second case"
    Case Else
        PrintLn "Unknown"
End Select

また、インラインの式として使用される、より単純な Case の形式もあります。

Case(expr, val1:ret1, val2:ret2)

この場合、式 expr が最初に評価され、次にその値が一連の各値と比較されます (この例では val1val2)。最初に一致する値に関連する値が返されます。

次に例を示します。

x = 2
PrintLn Case(x,1:"hello",2:"goodbye")

Dim

ローカル変数を宣言するため、Caché Basic は Dim 文をサポートします。Caché Basic では変数を宣言する必要はありません。宣言は、プログラムに Option Explicit を含まない限りオプションです。

Enter

Return 文を使用して、メソッドから値を返すことができます。

Method Add(a As %Integer, b As %Integer) As %Integer [language = basic]
{
    Return a + b
}

値を返さないメソッドで Return 文を使用すると、構文エラーが発生することに注意してください。

FeedbackOpens in a new tab