ハンディターミナルの開発言語であるBHT-BASIC4.0についての2回目ですが、 今回はデータ型に続いて変数宣言について説明します。
一般的にプログラム言語で存在する、グローバル変数、モジュール変数、ローカル変数がBHT-BASICにもあります。 グローバル変数、モジュール変数とはユーザが宣言する関数の外で静的に存在する変数です。 ローカル変数とはユーザ関数の中で一時的に存在する変数のことです。
それでは各変数それぞれについて詳しくみていきます。
■グローバル変数
ユーザが宣言する関数の外で、PUBLIC または GLOBALの命令語(ステートメント) で変数を宣言すると、グローバル変数として宣言できます。
PUBLIC と GLOBALですがどちらで宣言してもいい様ですが、それぞれ違いがあります。 まずはPUBLIC宣言のソースの例です。 この例では「MODULE1.SRC」と「MODULE2.SRC」の2つのソースがあります。 尚、プロジェクトのプロパティでメインモジュールとして「MODULE1.SRC」を指定してあります。
これを実行すると以下の表示の様になります。
PUBLIC宣言はソースファイルのどこか一カ所で行えば、 別のソースでそれを参照する場合は、宣言なしでその変数名を使えば 参照できます。
同じ変数名で別のソースでPUBLIC宣言すると二重定義エラーがリンク時に発生します。 但し、同じ変数名でもモジュール変数として宣言すれば別の変数として扱われますので、 注意が必要です。
上記のソースで宣言した、「PDT1%」「PDT2$」を今度はGLOBALで宣言します。 今回の場合は「MODULE2.SRC」の方にも同じ宣言をしないと、リンク時に変数宣言エラーが発生します。
どちらの方法でも同じ結果になるのですが、 PUBLIC または GLOBALのどちらがいいとも言えません。
PUBLICの場合は、他のソースで宣言しなくても使えるので楽と言えば楽かもしれませんが、 変数が多くなりソースファイルの数が増えると管理が厄介です。
但し、PUBLICを宣言するところを一カ所に限定し、 変数の命名規則でPUBLICだとわかるプリフィックスを先頭に付けるのも方法かもしれません。
GLOBALはその変数を参照しているソースファイルで同じ宣言を行う必要が在ります。 この宣言を別ファイルにし、変数の宣言のみのソースとして、各ソースファイルでインクルードすることで煩雑ではなくなると思います。 以下のソースがその例です。
■モジュール変数
ユーザが宣言する関数の外で、PRIVATE または DIMのステートメント で変数を宣言すると、モジュール変数として宣言できます。
PRIVATE 、 DIMのどちらでも効果は同じなのですが、 DIMはレジスタ変数としては宣言できない様です。
以下のソースを見てください。「MODULE2.SRC」では同じ変数名でモジュール変数を宣言しています。 「MODULE2.SRC」のモジュール変数は同じ変数名ですが、「MODULE1.SRC」とは全く異なるメモリ領域に確保されます。
これを実行すると以下の表示の様になります。 「MODULE2.SRC」のTest1関数が実行される時には、「MODULE2.SRC」内のモジュール変数として 初期化されたそれぞれの内容が表示されます。
■ローカル変数
ユーザが宣言する関数の内で、PRIVATE、DIM、STATICの各ステートメント で変数を宣言すると、ローカル変数として宣言できます。
グローバル変数やモジュール変数と同じ名前でローカル変数を宣言しても、 全く別ものとして扱われます。(全く別のメモリ領域に割り当てられます)
この様に組むと、関数の中から同じ名前のモジュール変数が参照できなくなります。 そのため、通常プログラムする時にモジュール変数とローカル変数は、なるべくかぶらない様にしています。
転職を本気で考えている方向けのプログラミングスクール!【WebCampPRO】
■関連記事
⇒BHT-BASIC:DENSOのハンディターミナルの開発言語のBHT-BASIC4.0を使ってみた
⇒BHT-BASIC4.0:変数宣言の書き方その2(BHT-1300)
⇒BHT-BASIC4.0:ユーザ定義関数について(BHT-1300)
⇒BHT-BASIC4.0:演算子について(BHT-1300)
⇒BHT-BASIC4.0:画面への表示について(BHT-1300)
⇒BHT-BASIC4.0:キー入力について(BHT-1300)
⇒BHT-BASIC4.0:数値用キー入力関数(ユーザ定義関数)について(BHT-1300)
⇒BHT-BASIC4.0:ユーザ定義関数の値渡し・参照渡しについて(BHT-1300)
⇒BHT-BASIC4.0:文字列を扱うユーザ定義関数について
⇒BHT-BASIC4.0:文字列を扱うユーザ定義関数についてその2
⇒BHT-BASIC4.0:文字列を扱うユーザ定義関数についてその3
⇒BHT-BASIC4.0:TeraTermを使ってDENSOのハンディターミナルにファイル(プログラム)転送を行う方法
⇒BHT-BASIC4.0:I/OポートとWAIT、さらにTIMERについて(BHT-1300)
⇒BHT-BASIC4.0:データファイルの取り扱いについて(BHT-1300)
⇒BHT-BASIC4.0:データファイルの取り扱いについてその2(書込み・読込みの実用的な関数)
⇒BHT-BASIC4.0:データファイルの検索について(SEARCH関数)
⇒BHT-BASIC4.0:ユーザ関数の引数の仮変数に対する代入の注意点
⇒BHT-BASIC4.0:データファイルの削除等について(KILL、CLFILEのラッパ関数)
⇒BHT-BASIC4.0:ファイルの存在確認関数を作ってみました
⇒BHT-BASIC4.0:拡張関数のバイナリサーチ処理関数(BSEARCH.FN3)の使い方
⇒BHT-BASIC4.0:拡張関数のサーチ処理関数(SEARCH.FN3)の使い方
⇒BHT-BASIC4.0:簡単なメニュー表示・選択を行うユーザ関数について
⇒BHT-BASIC4.0:ファイル伝送におけるXFILE命令の使い方
⇒BHT-BASIC4.0:バーコードの読込み(バーコードスキャン)について
⇒BHT-BASIC4.0:Bluetoothデバイスアドレス取得等について
⇒VB.NET:ハンディターミナル(BHT-1300等)とのデータファイルの送受信について
一般的にプログラム言語で存在する、グローバル変数、モジュール変数、ローカル変数がBHT-BASICにもあります。 グローバル変数、モジュール変数とはユーザが宣言する関数の外で静的に存在する変数です。 ローカル変数とはユーザ関数の中で一時的に存在する変数のことです。
それでは各変数それぞれについて詳しくみていきます。
■グローバル変数
ユーザが宣言する関数の外で、PUBLIC または GLOBALの命令語(ステートメント) で変数を宣言すると、グローバル変数として宣言できます。
PUBLIC と GLOBALですがどちらで宣言してもいい様ですが、それぞれ違いがあります。 まずはPUBLIC宣言のソースの例です。 この例では「MODULE1.SRC」と「MODULE2.SRC」の2つのソースがあります。 尚、プロジェクトのプロパティでメインモジュールとして「MODULE1.SRC」を指定してあります。
これを実行すると以下の表示の様になります。
PUBLIC宣言はソースファイルのどこか一カ所で行えば、 別のソースでそれを参照する場合は、宣言なしでその変数名を使えば 参照できます。
同じ変数名で別のソースでPUBLIC宣言すると二重定義エラーがリンク時に発生します。 但し、同じ変数名でもモジュール変数として宣言すれば別の変数として扱われますので、 注意が必要です。
上記のソースで宣言した、「PDT1%」「PDT2$」を今度はGLOBALで宣言します。 今回の場合は「MODULE2.SRC」の方にも同じ宣言をしないと、リンク時に変数宣言エラーが発生します。
どちらの方法でも同じ結果になるのですが、 PUBLIC または GLOBALのどちらがいいとも言えません。
PUBLICの場合は、他のソースで宣言しなくても使えるので楽と言えば楽かもしれませんが、 変数が多くなりソースファイルの数が増えると管理が厄介です。
但し、PUBLICを宣言するところを一カ所に限定し、 変数の命名規則でPUBLICだとわかるプリフィックスを先頭に付けるのも方法かもしれません。
GLOBALはその変数を参照しているソースファイルで同じ宣言を行う必要が在ります。 この宣言を別ファイルにし、変数の宣言のみのソースとして、各ソースファイルでインクルードすることで煩雑ではなくなると思います。 以下のソースがその例です。
■モジュール変数
ユーザが宣言する関数の外で、PRIVATE または DIMのステートメント で変数を宣言すると、モジュール変数として宣言できます。
PRIVATE 、 DIMのどちらでも効果は同じなのですが、 DIMはレジスタ変数としては宣言できない様です。
以下のソースを見てください。「MODULE2.SRC」では同じ変数名でモジュール変数を宣言しています。 「MODULE2.SRC」のモジュール変数は同じ変数名ですが、「MODULE1.SRC」とは全く異なるメモリ領域に確保されます。
これを実行すると以下の表示の様になります。 「MODULE2.SRC」のTest1関数が実行される時には、「MODULE2.SRC」内のモジュール変数として 初期化されたそれぞれの内容が表示されます。
■ローカル変数
ユーザが宣言する関数の内で、PRIVATE、DIM、STATICの各ステートメント で変数を宣言すると、ローカル変数として宣言できます。
グローバル変数やモジュール変数と同じ名前でローカル変数を宣言しても、 全く別ものとして扱われます。(全く別のメモリ領域に割り当てられます)
この様に組むと、関数の中から同じ名前のモジュール変数が参照できなくなります。 そのため、通常プログラムする時にモジュール変数とローカル変数は、なるべくかぶらない様にしています。
転職を本気で考えている方向けのプログラミングスクール!【WebCampPRO】
■関連記事
⇒BHT-BASIC:DENSOのハンディターミナルの開発言語のBHT-BASIC4.0を使ってみた
⇒BHT-BASIC4.0:変数宣言の書き方その2(BHT-1300)
⇒BHT-BASIC4.0:ユーザ定義関数について(BHT-1300)
⇒BHT-BASIC4.0:演算子について(BHT-1300)
⇒BHT-BASIC4.0:画面への表示について(BHT-1300)
⇒BHT-BASIC4.0:キー入力について(BHT-1300)
⇒BHT-BASIC4.0:数値用キー入力関数(ユーザ定義関数)について(BHT-1300)
⇒BHT-BASIC4.0:ユーザ定義関数の値渡し・参照渡しについて(BHT-1300)
⇒BHT-BASIC4.0:文字列を扱うユーザ定義関数について
⇒BHT-BASIC4.0:文字列を扱うユーザ定義関数についてその2
⇒BHT-BASIC4.0:文字列を扱うユーザ定義関数についてその3
⇒BHT-BASIC4.0:TeraTermを使ってDENSOのハンディターミナルにファイル(プログラム)転送を行う方法
⇒BHT-BASIC4.0:I/OポートとWAIT、さらにTIMERについて(BHT-1300)
⇒BHT-BASIC4.0:データファイルの取り扱いについて(BHT-1300)
⇒BHT-BASIC4.0:データファイルの取り扱いについてその2(書込み・読込みの実用的な関数)
⇒BHT-BASIC4.0:データファイルの検索について(SEARCH関数)
⇒BHT-BASIC4.0:ユーザ関数の引数の仮変数に対する代入の注意点
⇒BHT-BASIC4.0:データファイルの削除等について(KILL、CLFILEのラッパ関数)
⇒BHT-BASIC4.0:ファイルの存在確認関数を作ってみました
⇒BHT-BASIC4.0:拡張関数のバイナリサーチ処理関数(BSEARCH.FN3)の使い方
⇒BHT-BASIC4.0:拡張関数のサーチ処理関数(SEARCH.FN3)の使い方
⇒BHT-BASIC4.0:簡単なメニュー表示・選択を行うユーザ関数について
⇒BHT-BASIC4.0:ファイル伝送におけるXFILE命令の使い方
⇒BHT-BASIC4.0:バーコードの読込み(バーコードスキャン)について
⇒BHT-BASIC4.0:Bluetoothデバイスアドレス取得等について
⇒VB.NET:ハンディターミナル(BHT-1300等)とのデータファイルの送受信について