式の要素:変数,項目参照,関数,演算子など
式を構成する要素である項目参照,変数参照,演算子などについて解説します。
- 目次
- 定数
- 変数
- 項目参照
- オブジェクト参照
- 関数呼出し
- 演算子
- データ型に応じた各式の一次子として,それぞれのデータ型の定数を書くことができます。定数は,それぞれ定めれた形式で記述します。データ型と定数
- 定数に記述できる形式は,編集ウィンドウでセルに入力できる形式と必ずしも一致しません。データ型に応じた項目値の入力
DBProには,いろいろな場面での値の保存場所として,次のような変数が用意されています。
-
通常の変数は,DPLプログラムの中で必要になったときにいつでも代入ステートメントの左辺に書いて値を設定し,同じDPLプログラム中でその変数の値を参照することができます。あらかじめ変数の有効範囲を宣言して使うこともできます。また,DPLプログラム中でなくとも,<式リスト> を書ける場面において,代入式の左辺に書いて値を設定し,その値を同じ <式リスト> 中で参照することができます。
- 変数名
- 変数名は,ドル記号 $ の後に <通常識別子> を付けて命名します。<通常識別子> は英字,仮名,漢字,下線,数字で構成される名前で,先頭が数字であってはいけません。
- 例:
- $Variable
- $回数
- 変数の型
- DBProでは,変数は特定の型をもちません。一つの同じ変数にどんな型の値でも代入することができます。変数の型は,そのつど,代入される右辺の値と同じ型になります。式や関数の引数に変数を使用する場合は,そのとき変数に設定されている型が有効になり,式や引数の型に適していない場合はエラーとなります。
- 例:
- 同じ変数に,異なる型の内容を記憶します。
$X := 'ABC' | ← 変数 $X に文字列を記憶している。 |
$X := 10.5 | ← その後,同じ変数に数値を記憶することができる。このとき,直前までの文字列 'ABC' は捨てられます。 |
- 他の変数に,異なる型の内容を記憶します。
$X := 'ABC' |
$Y := DATE '93.12.1' |
$Y := $X | ← 変数 $Yは,文字列型として扱われる。 |
- ローカル変数とグローバル変数
- DBProの変数は特に宣言しなくても必要になった時点でいつでも利用できますが,DPLプログラム中で利用する変数はあらかじめ変数宣言ステートメントで宣言してから利用することもできます。
ローカル変数
| LOCALステートメントにより宣言するか,または宣言されずに使用された変数は,ローカル変数になります。ローカル変数は,それを宣言する位置により有効範囲が異なります。
- 構造ステートメントや手続き宣言ステートメントのブロックの外で宣言した場合,および宣言せずに使った場合は,宣言した位置または最初に使った位置以降からそのDPLプログラムが終了するまで有効です。
- 構造ステートメントや手続き宣言ステートメントのブロックの内側で宣言した場合,その変数は宣言したブロック内でのみ有効です。
|
グローバル変数
| GLOBALステートメントにより宣言された変数は,グローバル変数になります。グローバル変数は,最初に宣言されたときから DBPro を終了するまで有効で,他の DPLプログラムから変数の値を参照したり変更することができます。他の DPLプログラムで同じ変数を参照したり変更する場合は,その DPLプログラムでも同じ変数名を GLOBALステートメントで宣言します。
|
システム変数は,DPLステートメントを実行したときなどに DBProシステムが値を設定する変数です。DPL 中でシステム変数の内容を参照したり,システム変数の内容を変更することができます。システム変数の内容を変更した場合も,その変数に関連する処理が行なわれると,システム変数の値はその処理に応じてシステムにより再設定されます。
- システム変数名
- システム変数名は,ドル記号二つ $$ で始まります。利用者が新しい変数を宣言したり,名前を変更することはできません。
- システム変数の種類
- システム変数には以下があります。
$$CMDSTATE | コマンドステートメントが正常に実行できたかどうかの結果が整数値で設定されます。正常に終了した場合はゼロが保証されます。ゼロ以外はなんらかのエラーが起こったことを示します。コマンドステートメントごとにどのようなエラーが起こり得るかが決まっています。詳細は $$CMDSTATE 一覧を参照してください。 |
$$OLDSTATE | コマンドステートメント実行直前のいろいろな状態が設定されます。設定される内容はコマンドステートメントごとに異なります。この値をパラメータにして同じコマンドステートメントを実行すると元の状態に戻すことができます。 |
$$RETURN | 手続き中の RETURNステートメントのパラメータに書かれた式の値が設定されます。RETURN ステートメントに式が書かれていない場合はナルになります。 |
$$CNTALL | 最新の項目集計ステートメントの結果の総件数の値が設定されます。常に数値型です。 |
$$CNT | 最新の項目集計ステートメントの結果の有効件数の値が設定されます。常に数値型です。 |
$$TOTAL | 最新の項目集計ステートメントの結果の合計の値が設定されます。 |
$$MEAN | 最新の項目集計ステートメントの結果の平均の値が設定されます。 |
$$MAX | 最新の項目集計ステートメントの結果の最大の値が設定されます。 |
$$MIN | 最新の項目集計ステートメントの結果の最小の値が設定されます。 |
$$STDEV | 最新の項目集計ステートメントの結果の標準偏差の値が設定されます。常に実数型です。 |
$$BUTTON | ダイアログステートメントで表示された各種ダイアログで,[OK],[キャンセル] など,どのボタンが押されたかが次の整数値で設定されます。
- 1
- [OK]ボタンが押されました
- 2
- [キャンセル]ボタンが押されました
- 3
- [はい]ボタンが押されました
- 4
- [いいえ]ボタンが押されました
- 5
- [継続]ボタンが押されました
- 6
- [中止]ボタンが押されました
|
$$INPUTSTR | 種別が「入力」または「パスワード」であるダイアログステートメントの実行時に,入力された文字列が設定されます。 |
$$CHECK | 種別が「チェック」であるダイアログステートメントの実行時に,チェックボックスのオン/オフ状態が整数値で設定されます。 |
$$OPTION | 種別が「オプション」であるダイアログステートメントの実行時に,選ばれたオプションボタンの番号が整数値で設定されます。 |
$$FILENAME | 種別が「ファイル」であるダイアログステートメントの実行時に,入力されたファイル名文字列が設定されます。また,オープンステートメントなどのファイルを操作するステートメントを実行したときに,対象となったファイル名が設定されます。いずれの場合もファイル名は絶対パス名で設定されます。 |
$$OBJECT | カード手続きの ONブロックに制御が移ったとき,その対象となったオブジェクト名が設定されます。また,カードのボタンオブジェクトから実行されたDPLでは,実行開始時にそのボタンオブジェクト名が設定されています。 |
- 通常の変数とシステム変数とは,式の中で値を引用したり,代入ステートメントや代入式で値を設定したりできます。
- 変数の値を引用したり,変数に値を代入する場合は,その場所にその変数名を書きます。引用や代入のために式中に書かれた変数名を <変数参照> と呼びます。
DPL中での「カーソル」とは,特定のファイルや編集ウィンドウ,そしてその中の特定のレコードを指し示す特殊なデータのことです。カーソル変数は,カーソルの値を保持し,DPLステートメントの処理対象となるファイル,ウィンドウ,レコードを指定するために利用されます。
- カーソル変数の変数名は,単価記号 @ の後に <通常識別子> を付けて命名します。<通常識別子> は英字,仮名,漢字,下線,数字で構成される名前で,先頭が数字であってはいけません。
- 例:
- @MasterTable
- @結果表示
- カーソル変数も通常の変数と同様に,宣言しないで用いることもできますし,ローカル/グローバルの宣言をして用いることもできます。GLOBAL/LOCALステートメント
- カーソルについての詳しいことは,「DPLの機能:データベース操作機能」を参照してください。
DBPro V4 から表ファイルの中にレコードや項目とは独立した値を保存しておくことができるようになりました。詳しくは,「表:ファイル内変数」を参照してください。
式の中でレコードの特定の項目の値を参照するときは,その項目名を書きます。式が評価されるときに対象レコードのその項目の値が演算の対象になります。
ファイル内変数を参照するときも項目参照とまったく同じ形式で,そのファイル内変数名を書きます。
形式
-
<項目参照> | ::= | [ [ <表修飾子> ] . ] <項目名> |
| | | <カーソル名> . <項目名> |
| | | [ [ <表修飾子> ] . ] <ファイル内変数名> |
| | | <カーソル名> . <ファイル内変数名> |
<表修飾子> | ::= | <表名> |
| | | " <表名> " | ' <表名> ' | ` <表名> ` |
<表名> | ::= | (表ファイル名の拡張子を除いた部分) |
<項目名> | ::= | <通常識別子> | <区切り識別子> |
<ファイル内変数名> | ::= | <通常識別子> | <区切り識別子> |
<通常識別子> | ::= | (英字,仮名,漢字,下線で始まる英仮名漢字下線数字列) |
<区切り識別子> | ::= | [ <角括弧を除く文字列> ] |
| | | " <二重引用符および角括弧を除く文字列> " |
<カーソル名> | ::= | @ <通常識別子> |
| | | @@ |
例
-
[項目名] |
A | (英字や仮名漢字だけであって,DBProのキーワードでもない場合は角括弧でくくらなくてもよいが,くくった方が安全) |
[100] | (数字で始まる項目名) |
[A-1] | (特殊文字を含む項目名) |
マスタ表.[商品名] | (<表修飾子> 付きの項目参照) |
項目名の区切り
- 通常,安全および見やすさのために項目名は角括弧でくくってください。
- 原則としては,英字,平仮名,片仮名,漢字,下線で始まり,これらに加えて数字だけしか含まない項目名の場合は,角括弧や二重引用符で区切る必要はありません。ただし,DBProでキーワードとして用いられ特別の意味をもつ単語を項目名として使うときは,角括弧か二重引用符でくくらなければなりません。そして,現在は項目名として正しく認識されている識別子も,将来,キーワードが増えた場合に,そのキーワードと項目名とが重複してしまうと誤りになります。このような理由で,角括弧や二重引用符を省略できる場合でも,角括弧でくくることを強くお勧めします。
- DPL ステートメント中の二重引用符で区切られた項目名は,文法チェックオプションの「項目名,ファイル内変数に [] 必須」が指定されている場合は構文エラーになります。
<表修飾子> 付き項目名
- 表のファイル内変数は,表ファイルに保存される変数または定数として利用するために用意されています。DPL中や式中に自由に書ける通常の変数とはまったく異なるものです。むしろ,ファイル内変数は,「すべてのレコードで同じ値をもつ項目」として考えてください。表:ファイル内変数
- ファイル内変数を参照するときは,項目を参照するときとまったく同じ形で参照します。ファイル内変数名に使える文字(識別子)も項目名の場合と同じです。上記の「項目名の区切り」や「<表修飾子> 付き項目名」についても,「項目名」と記述されているところを「ファイル内変数名」と置き換えてお読みください。
- ファイル内変数名は,一つの表の中では項目名も含めてユニークでなければなりません。すなわち,いずれのファイル内変数名も,他のファイル内変数名および項目名と同じであってはなりません。
- DPL中でファイル内変数を参照するときは,どの表の変数であるかを指定するために <カーソル名> で修飾します(省略したときはカレントカーソル)。そのカーソルがどのレコードを指していてもファイル内変数としては同じものが識別されます。
オブジェクト参照は,DPL中の式でカードの式オブジェクトやデータオブジェクトの値を引用したり,値を設定したりするために書くオブジェクト名のことです。カードの式オブジェクトで他の式オブジェクトやデータオブジェクトを参照するためにも用います。カード:オブジェクト
- 形式
<オブジェクト参照> | ::= | <オブジェクト名> |
| | | <カーソル名> . <オブジェクト名> |
- オブジェクト参照は,<カーソル名> が示すカードの <オブジェクト名> が示すオブジェクトの値を参照したり設定したりします。<カーソル名> を省略したときは,DPL中の式のときはカレントカーソルが指すカードのオブジェクト,カード中の式ならば同じカード中のオブジェクトを参照します。
式では,あらかじめ用意された組込み関数による値を利用できます。組込み関数は,関数呼出しの引数として書くいくつかの値に対して,複雑な計算,特殊な計算,あるいは普通には利用者から見られない情報を取り出して一つの関数値を返します。
- 形式
<関数呼出し> | ::= | #<関数名> [ ( <実引数リスト> ) ] |
<実引数リスト> | ::= | [ <実引数> ] | <実引数リスト> , <実引数> |
<実引数> | ::= | <式> |
- 例
#四捨五入([平均点]) | -- [平均点] 項目値を四捨五入した値を返します |
#合計([金額]) | -- 集計で [金額] の合計値を返します |
#連番 | -- 置換で 1 から順に番号を返します |
#IF([参加],[料金]*[人数],[キャンセル料]) | -- [参加] の項目値がナルやゼロでなければ [料金]×[人数] の値を,そうでなければ [キャンセル料] の値を返します。 |
- 関数名には,先頭に必ず番号記号 # が付きます。
- 関数が返す値のデータ型は,関数ごとに決められています。<実引数> の個数やデータ型も,関数ごとに決められています。関数によっては特定の場所でだけ使えるものがあります。
- DBPro で用意されている組込み関数については組込み関数一覧を参照してください。
演算子には次の種類があります。これらは,それぞれのデータ型に対する演算を指定します。
- 代入演算子
-
代入式
- 文字列演算子
-
連結演算子 | + || | 左右の文字列を連結する。 |
差分演算子 | − | 左辺から右辺の文字列を取り除く。 |
文字列式
- 算術演算子
-
加法演算子 | + | 加算を行なう。 |
| − | 減算を行なう。 |
乗法演算子 | * × | 乗算を行なう (乗算演算子)。 |
| / ÷ | 除算を行なう (除算演算子)。 |
| MOD | 左辺を右辺で割った余りを計算する (剰余演算子)。 |
単項演算子 | + | 何もしない。 |
| − | 正負の符号を反転する。 |
時間隔演算子 | − | 二つの日付,時刻の間隔を求める。 |
算術式,日付式,時刻式,年月間隔式,日時間隔式
- 大小比較演算子
-
等号演算子 | = | 左右が等しければ真,異なれば偽。 |
不等号演算子 | <> >< ≠ | 不等号 左右が異なれば真,等しければ偽。 |
未満演算子 | < | 左辺が小さいとき真,そうでなければ偽。 |
超演算子 | > | 左辺が大きいとき真,そうでなければ偽。 |
以下演算子 | <= =< ≦ | 左辺が小さいか等しいとき真,そうでなければ偽。 |
以上演算子 | >= => ≧ | 左辺が大きいか等しいとき真,そうでなければ偽。 |
比較式
- 辞書順比較演算子
-
正順演算子 | << | 左辺が前のときに真,そうでなければ偽。 |
逆順演算子 | >> | 左辺が後のときに真,そうでなければ偽。 |
以前演算子 | <<= =<< ≦≦ | 左辺が前か等しいときに真,そうでなければ偽。 |
以後演算子 | >>= =>> ≧≧ | 左辺が後か等しいときに真,そうでなければ偽。 |
比較式
- 基本つづり比較演算子
-
類似演算子 | <=> ≒ | 基本つづりが等しいとき真,そうでなければ偽。 |
比較式
- 論理演算子
-
論理和 | OR | 左が真なら真,そうでなくて右が真なら真,そうでなければ偽。 |
論理積 | AND | 左が偽なら偽,そうでなくて右が偽なら偽,そうでなければ真。 |
論理否定 | NOT | 値が真なら偽,偽なら真。 |
論理式