過去の桐井戸端BBS (桐ver.8)
15853 KEVファイル、「名札 メイン」で変数宣言した場合の自動・局所・固有・共通の意味を教えてください だるま 2002/04/29-16:45
 また悩んでいます。教えて頂けないでしょうか。

 WIN2K、桐V8sp6です。

 KEVファイルの「名札 メイン」で[変数宣言]を局所や固有等のパラメータを省略して記述した場合、
その変数は省略したパラメータの内の何になるのでしょうか?

(ヘルプでは、一括処理・手続き内=自動、その他=固有と書いてありがますが・・・。)

 何を悩んでいるかというと、KEVファイルで複数の一般手続きなどで共通の値と名前で使用出来る変数は
「局所変数」(共通・固有はもちろん)か引数として記述した変数だけと思い込んでいたのです。
 最近気付いたのですが、「名札 メイン」で変数宣言された変数が、その後の一般手続き内でも有効な様です。
 そこで、自動・局所・固有・共通の意味が全然分からなくなってしまいました。

 何とかご教授頂けないでしょうか。宜しくお願い致します。<m(__)m>
15855 Re:KEVファイル、「名札 メイン」での変数宣言 natsu 2002/04/30-10:18
記事番号15853へのコメント
桐を開いて ヘルプ→目次タブ→データと式→変数→変数の種別に各変数種別の説明があります
あとは、一括処理&イベントリファレンスの一括処理コマンドの変数宣言のところにも解説があります

さて、局所変数ですが、
"フォームウィンドウが閉じると、自動的に削除されます。
任意に削除することはできません"とありますから、
そのフォームだけでしか使いたくない(使用できない)
変数が局所変数と言ったところでしょうか

自分の場合は、一括もイベントも使うほどの処理ではないけれど
変数は使いたい、組み込み変数の&選択ファイル名や&実行リターンなどは
後で解りにくくなるのでちょっと...と言うときに使用しています

局所変数の宣言方法ですが、もちろん変数宣言コマンドで宣言してもOKですし、
フォームを(再)定義で開いているときに、
ツール→変数管理で局所のタブが出てきます
そこでも設定可能です



15856 Re:ドキュメント ウィンドウってTBLファイル? だるま 2002/04/30-14:52
記事番号15855へのコメント
 natsuさん、早速のご回答有り難う御座います。
 まだよく分からないことが有りますので、出来ましたら、お教え下さい。m(__)m

>桐を開いて ヘルプ→目次タブ→データと式→変数→変数の種別に
>各変数種別の説明があります

「ドキュメント ウィンドウ」とはTBLファイルのことなのでしょうか?

>あとは、一括処理&イベントリファレンスの一括処理コマンドの
>変数宣言のところにも解説があります

■パラメータ
 自動|局所|固有|共通
 宣言する変数の種別を指定します。このパラメータを省略した場合、
実行中の一括処理またはイベントの手続き内であれば「自動」、それ以外であれば「固有」になります。

と有りますが、KEVファイルの「名札 メイン」での変数宣言は、省略すると「固有」になるということですか?

「実行中の一括処理」の意味が今ひとつ・・・

 イベント処理や一括処理の省メモリ化を考え、「自動」と「局所」にこだわり、「名札 メイン」での変数宣言は、
省略すると「自動」だと思い込んで引数記述に苦労していました。

 またやり直し。(; ;)トホホホホ〜
15857 Re:ドキュメント ウィンドウってTBLファイル? natsu 2002/04/30-15:59
記事番号15856へのコメント
だるまさん

自動 この変数は宣言した手続き内でのみ有効です。
他の手続きから参照することはできません。
手続きから抜けると、自動的に削除されます。

局所 この変数は、ウィンドウ固有ものです。
この種別の変数は、イベント処理のメイン処理内でのみ宣言できます。
フォームウィンドウが閉じると、自動的に削除されます。任意に削除することはできません。

固有 この変数は、表またはフォームのウィンドウが開いているあいだだけ、有効です。
この種別の変数が宣言できるのは、表ウィンドウ、フォームウィンドウが開いているあいだ、
または一括処理が実行されているあいだだけ有効です。
宣言した変数は、表ウィンドウとフォームウィンドウ、一括処理がすべて閉じると、自動的に削除されます。
宣言後、ウィンドウを新たに開かない限りは、任意に削除できます。
ただし、ウィンドウが開かれる前に宣言した変数は、
すべてのウィンドウを閉じない限り、削除できません。

共通 この変数は、桐で作業しているあいだは、つねに有効です。
自動的に削除されることはありません。

15858 局所と固有 natsu 2002/04/30-16:54
記事番号15856へのコメント
間違って投稿してしまいました すいません
投稿した部分は、HTML版のリファレンスです

>KEVファイルの「名札 メイン」での変数宣言は、省略すると「固有」になると
>いうことですか?
試しに、種別を省略してイベントで変数を定義して、フォームを開いた後に変数管理ウインドをみて下さい 「固有」になっているはずです

>最近気付いたのですが、「名札 メイン」で変数宣言された変数が、その後の一
>般手続き内でも有効な様です。

変数宣言のヘルプでは、「各種別で同じ名前の変数を宣言した場合、次の順番で検索され、
最初に見つかった変数の値が参照されます。」
 自動
 局所
 固有
 共通
こうありますから、既に変数が宣言されていれば固有変数も使用されるはずです

> イベント処理や一括処理の省メモリ化を考え、「自動」と「局所」にこだわり、「名札 メイ
>ン」での変数宣言は、省略すると「自動」だと思い込んで引数記述に苦労していました。
桐の変数がどのようなメモリ管理をしているのかはわかりませんが、
(桐でなくとも、そのあたりの知識は全くありません)
局所変数が削除されたら、直後にそのメモリ領域も開放されるのでしょうか?
Win2k・Win95のdualbootでV8sp6を使用していますが
(変数の数にもよるのでしょうが)、100個ぐらいの変数でメモリが足りなくて
HDDへスワップして大変だという印象はありません

15859 ドキュメント ウィンド natsu 2002/04/30-19:26
記事番号15858へのコメント
タイトルが、局所と固有となっていましたが
これも訂正するのを忘れていました(タイトルは固有変数についてになります)
重ねて申し訳ありません

>「ドキュメント ウィンドウ」とはTBLファイルのことなのでしょうか?
固有:ドキュメント ウィンドウが開いている間、使用できる変数です。
変数操作
宣言:ドキュメント ウィンドウを開いているときのみ。
削除:別のドキュメントを開く前に宣言した変数は、すべてのドキュメントを閉じるまで削除できません。
自動削除:すべてのドキュメント ウィンドウを閉じたとき。

ヘルプの固有変数の説明中にドキュメントウィンドウとありますが
少々実験してみましょう

1.何でもいいのですが、"a.tbl"というファイルを開きましょう
2.ツールから変数管理を呼び出し"&test1"という固有変数を追加します
3."b.wfm"を開いて(ややこしくなるので、編集対象表は"a.tbl"以外のフォームで)
 "&test2"という固有変数を追加します
4.ここで固有変数には"&test1"と"&test2"が登録されているはずです
5."a.tbl"を閉じ、さらに"&test1"を削除してみます
6.そうすると 「KU0855 表を開く前に定義した変数は削除できません」がでます
7.しかし、"b.wfm"のみが開いている状況であれば"&test2"は削除できます
8."b.wfm"を閉じると自動的に全ての固有変数が削除されています

これが上記のヘルプファイル通りに操作した実験結果です
ドキュメントウィンドウは、表でもフォームでも可ということになります
15861 宣言される変数の種別(補足と解説) 佐田 守弘 2002/05/01-00:38
記事番号15853へのコメント
だるまさん
natsuさんが詳しく書かれている通りですが、補足を兼ねて概論的な解説をさせて頂きます。

●変数の種別
変数には、組み込み、共通、固有、局所、自動の種別があります。
・組み込み:桐がシステムとして定義する変数で、ユーザーが同じ名前の変数を定義する事はできません。
・共通:桐が起動している間有効な変数です。
・固有:固有変数の意味は、桐ver.5とかなり変わりました。その変数を宣言した一括処理ないし、
定義したイベントがあるフォームなどが開かれている間有効です。
そう言った意味で、固有変数がかなり共通変数に近くなりました。
・局所:局所変数はフォームの中で宣言します。具体的にはフォームの定義画面で
変数管理を使って宣言します。フォームが開かれると共に宣言されます。
固有変数や共通変数をフォームの中で使うと、フォームの定義終了時に、ある種のエラーが生じますが、
局所変数を使う事によって回避できます。
局所変数は、そのフォームが開かれている間有効だったと思います。
・自動変数:イベントハンドラ内だけで有効な変数です。イベントハンドラが
自動で制限する変数の他、ユーザーがイベントハンドラないし一般手続き内で宣言できます。

●変数の優先度
以前もこの質問がありました。
同じ変数名で、異なる種別、データ型で宣言した場合の話です。
組込み変数を除き、種別が異なると、別のデータ型でも宣言できます。
そして、優先順位は、自動>局所>固有>共通の順になります。
これは一般のプログラム言語の仕様と同じで、ローカルな程、優先順位が高い扱いになります。
つまり、仮に固有ないし共通で宣言した変数があって、同じ変数名で自動変宣言した場合には、自動変数が参照されます。

●イベントのメイン部分での変数の宣言
イベントのメイン部分に記述しているコマンドは、一括処理のコマンドと同じです。
何も指定せずに宣言した場合には、固有変数で文字列型が指定されます。

さて、ここで重要な事を述べておきます。
フォームが開かれた時に、イベントファイルが開かれ、先頭のメイン部分は自動で実行されます。
この部分はイベントとは関係無く実行されるので、
謂わば自動実行される一括処理と同じです。
フォームから別のフォームに切り換え、また元のフォームに戻るようなシステムの組み方があります。
この様な場合、元のフォームに戻ると、同じイベントファイルが開かれます。
この時に変数宣言コマンドも実行されます。変数宣言コマンドが重複して実行されると、
変数値のクリアが行われます。
呼び出した別のフォームで変数に設定しておいたはずの値がクリアされていると言ったケースは、上記の理由で発生します。

佐田守弘(KS-00119)
15862 Re:ドキュメントウィンドウについてよく分かりました。 だるま 2002/05/01-11:07
記事番号15859へのコメント
 natsuさん、再三の御回答、誠に有り難う御座います。<(_ _)>
 非常に感謝しております。m(__)m

>ドキュメントウィンドウは、表でもフォームでも可ということになります

 ドキュメントウィンドウについてよく分かりました。
 改めまして、本当に有り難う御座います。<m(__)m>

15863 Re:局所変数等について理解できました。 だるま 2002/05/01-11:18
記事番号15861へのコメント
 佐田先生、いつも有り難う御座います。<(_ _)>
 局所変数等について理解出来ました。
 特に下記ご説明

>・局所:局所変数はフォームの中で宣言します。具体的にはフォームの定義画面で
>変数管理を使って宣言します。フォームが開かれると共に宣言されます。
>固有変数や共通変数をフォームの中で使うと、フォームの定義終了時に、ある種
>のエラーが生じますが、局所変数を使う事によって回避できます。

は、非常に良く分かりました。
 改めまして、本当に有り難う御座います。<m(__)m>

戻る