過去の桐井戸端BBS (桐ver.8)
13840 同じ名前で2種類変数宣言をしてもエラーが出ませんが使用していて支障はないのでしょうか KH 2001/11/03-23:19
 実は複数のファイルのデバッグ中に今始めて知ったのですが、
同じ名前で2種類の変数を宣言して使っていたのがわかりましたが、
このまま使用していて大丈夫ですか。
私の頭の中では当然エラーが出るものと思っていましたから、本当にうっかりミスでした。
このまま使用していて問題ないのでしょうか?
桐の仕様として問題ないのでしょうか、このことを記述した部分がマニュアルから探せません。


  
  メニュープログラム.CMDで、  変数宣言 共通,文字列{&企業名}
  
  プログラム5.CMDで、     変数宣言 固有,整数 {&企業名}


 メニュープログラムから、プログラム5に飛んで行ってもエラーは出ませんし、
デバッグでプログラム5で強制終了して、変数管理で見ると共通変数と固有変数で共存しています。
型が違えば同じ名前で変数を宣言しても大丈夫な桐の仕様でしたか?
このまま、修正しなくて問題は起こらないですか?
13845 Re:同じ名前で2種類変数宣言してエラーが出ませんが使用していて支障はない? 佐田 守弘 2001/11/04-00:46
記事番号13840へのコメント
KHさん
結論的には、「まぎらわしいので止めよう」が正論だと思いますが、
試してみたところ、次の様な現象が見られました。

●優先度
固有変数と共通変数とでは、固有変数の方に優先度がある様です。
1つの一括処理の中で共通と固有の2つの種別に同じ変数を定義した場合には、固有変数の方が使われます。

同様に、既に別の一括処理Aで共通の変数が定義されているのに、
改め一括処理Bで同じ名前の固有変数を定義した場合には、固有変数が使われます。

>  メニュープログラム.CMDで、  変数宣言 共通,文字列{&企業名}
>  プログラム5.CMDで、     変数宣言 固有,整数 {&企業名}
の場合には、メニュープログラムでは共通変数が、プログラム5では
固有変数が使われるのではないでしょうか。

●異なる一括処理で異なるデータ型で定義した場合
  A: 変数 固有,文字列{&値}
  B: 変数 固有,数値{&値}
の様に、2つの一括処理で異なるデータ型で定義し、A→Bと一括処理をチェインした場合には、
後から実行した一括処理での定義の方が有効になり、最初の一括で定義した変数は失われるみたいですね。
これは同じデータ型でも同じ様です。

●共通変数を別のデータ型で重複して定義した場合
これはエラーになりました。

つまり結論として、
@固有変数の方が共通変数に優先して使われる。
A固有変数は異なる一括処理で重複して定義しても、ローカルな変数として扱われて、定義し直される。
B共通変数は、異なるデータ型で重複定義する事はできない。

の様です。

佐田守弘(KS-00119)




13847 Re:丁寧なテスト有難うございました。 KH 2001/11/04-10:03
記事番号13845へのコメント
佐田先生いつも有難うございます。

>結論的には、「まぎらわしいので止めよう」が正論だと思いますが、


 自分でも「後から追加した一括のためのうっかりミス」からデバッグ中(桐Grepで確認)偶然の発見だったので、
投稿した後、すぐに追加した一括側の固有変数の方を別名に直しました。

テストしていただき、有難うございました。
自分自身、同名の変数名で固有で整数と固有で数値などを間違えて、エラーを返され、
頭から同名で型が違ったら受け付けてもらえないものだと思い込んでいましたが、大変勉強になりました。
有難うございます。

13850 使って構わないそうです 佐田 守弘 2001/11/04-23:49
記事番号13847へのコメント
KHさん
私も多少自信がなかったので、詳しい所に確認してみました。
結論は、次の通りです。
●変数のサーチ順序
 変数は、自動→局所→固有→共通の順に探されます。
 前回私が書いた事も含めて、全ての変数の種別について言うと
 上記の様になるそうです。
 要するにローカルなところからグローバルな方向に検索する事になります。
●同じ種別での重複宣言はエラーになる
 これも前回書いた通りで、同じ種別で重複して別のデータ型、あるいは、
 配列であれば異なる配列の個数で宣言し直すと、エラーになります。
●同一名の異なる変数の使用は差し支えない
 以上の事を充分に理解した上で(これはプログラマの常識なのでしょう)、
 異なる種別の変数に同じ名前を使う事は、一向に差し支えないそうです。
 もしこれが良くないとすると、イベントハンドラで自動的に宣言される自動変数と同じ名前の変数が
 使ってはいけない事になってしまいます。
 もちろん、使っている本人は、同じ変数名でも場所によって種別が違う事を
 しっかり認識している事が前提なのでしょうが。
 但し組込み変数と同じ変数名だけは、使用が禁止されています。

 以上がまぎらわしいと思うのであれば、やはり別の名前を使う方が良いという事になるのでしょうね。
 
佐田守弘(KS-00119)

13852 Re:使って構わないそうです(理解できました有難うございます) KH 2001/11/05-09:34
記事番号13850へのコメント
佐田先生何度も丁寧なコメントありがとうございました。

>●同一名の異なる変数の使用は差し支えない
> 以上の事を充分に理解した上で(これはプログラマの常識なのでしょう)、
> 異なる種別の変数に同じ名前を使う事は、一向に差し支えないそうです。
> もしこれが良くないとすると、イベントハンドラで自動的に宣言される
> 自動変数と同じ名前の変数が使ってはいけない事になってしまいます。
> もちろん、使っている本人は、同じ変数名でも場所によって種別が違う
> 事をしっかり認識している事が前提なのでしょうが。
> 但し組込み変数と同じ変数名だけは、使用が禁止されています。
>
> 以上がまぎらわしいと思うのであれば、やはり別の名前を使う方が良い
> という事になるのでしょうね。
> 

よく理解できました。ありがとうございました。
十分理解した上での使用を心がけるようにします。
私はプログラマーではないので、なるべく避けるようにしようと思っています。

戻る