LoginSignup
4
3

More than 5 years have passed since last update.

プチコン3号での変数スコープ

Posted at

公式ツールのソースの一部を抜き出そうとして、挙動が不明だったので調べてみた。

V1=1    'グローバル変数
? "V1=" + STR$(V1)  'V1=1

DEF F1  '関数定義より前に変数定義
 ? "F1.V1=" + STR$(V1)
 V1=10
 ? "F1.V1=" + STR$(V1)
END

DEF F2  '関数定義より前に変数定義がないのでローカル変数確定?
 ? "F2.V2=" + STR$(V2)
 V2=20
 ? "F2.V2=" + STR$(V2)
END

V2=2    'グローバル変数
? "V2=" + STR$(V2)  'V2=2

F1
? "V1=" + STR$(V1)  'V1=1

F2
? "V2=" + STR$(V2)  'V2=2

F3  '変数定義前に呼び出してみる グローバル変数として動作?
    '関数定義は後でも良い!
? "V3=" + STR$(V3)  'V3=30
V3=3    'グローバル変数
? "V3=" + STR$(V3)

F3  'グローバル変数として動作!

'関数定義は後ろでも良いが、この挙動がややこしい
DEF F3
 ? "F3.V3=" + STR$(V3)
 V3=30
 ? "F3.V3=" + STR$(V3)
END

こんな感じで、関数定義の位置と、グローバルな変数の定義位置を変えて実行してみた。

V1=1
V2=2
F1.V1=1     'グローバル
F1.V1=10
V1=10
F2.V2=0     'ローカル!
F2.V2=20
V2=2
F3.V3=0     'グローバル?
F3.V3=30
V3=30       'グローバル動作だった模様
V3=3
F3.V3=3     'グローバル
F3.V3=30
V3=30

関数の定義時点(呼び出し時点ではない)での同名のグローバル変数の有無で挙動が変わっている模様。
関数定義自体は呼び出しより後にもかけるのでややこしい。

取り急ぎ、メモまで。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3