- ベストアンサー
サブルーチンについての質問デス
サブルーチンについての質問です。 サブルーチンの中で設定した変数が、そのサブルーチンを呼び出す度に初期化されてしまいます。 (例えば初めてサブルーチンを呼び出し、そのサブルーチンを抜ける時にはx=10と記憶されているのに、また次にそのサブルーチンが呼び出される時には、x=0となっている。) これをx=10のまま記憶させておき、引き続きサブルーチンの中でこの値を使う事は不可能なのでしょうか? 乱文で申し訳ありませんが、よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
基本的な事を言うと、PUBLICやSTATICを使うのは、極力避けるべきです。 例えばPUBLICの場合は、プロジェクト全体で使えるので、どこでその変数の値を操作されているのかが解りにくくなります。 上位の変数を引数として参照渡しにするなどで対応されてはどうですか?
その他の回答 (3)
- AKARI0418
- ベストアンサー率67% (112/166)
Staticと用途は異なりますが、Public宣言(プロジェクトレベル)やPrivate宣言(モジュールレベル)にすることで保持することもできます。 Public宣言であれば宣言したプロジェクトが動作中であれば変数の初期化が行われません。 Private宣言であれば宣言したモジュール内であれば、変数を使いまわすことができます。 VB.NETであれば、アプリケーションの設定を追加しプロパティを作成して使うことで、プログラムを終了しても保持することができます。 VB6.0以前のバージョンであればiniファイルを作成し、API関数GetPrivateProfileString関数を使用しiniファイルの情報を使用するというのが一般的ではないでしょうか。プログラムの設定値をテキストファイルの変更だけで行えるので、なかなか便利だと思います。
お礼
詳しい説明ありがとうございました。 この様な解決法もあるとは…奥が深いです。。 とても参考になりました。
- ya-cha
- ベストアンサー率38% (27/70)
一番簡単なのは、記憶させておきたい変数の宣言をstaticにしておく事です。 staticを付加することで、処理中ずっと値を保持します。 僕も今月勉強を始めたばかりです。頑張りましょう!
お礼
回答ありがとうございます。 僕もついこの間から独学で勉強を始めており、色々と苦しんでいます。 心強いお言葉ありがとうございました。 ぜひ共に頑張りましょう!
- FEX2053
- ベストアンサー率37% (7991/21373)
変数の寿命をちゃんと考慮してますか? http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard8.htm クラスレベルの宣言にするとか、Staticで宣言するとか、方法はいくつか あります。
お礼
分かり易いサイトの紹介、どうもありがとうございます。 変数のレベルを変えたり、引数として引っ張ってきたりなど色々と方法はあるのですね。 非常に参考になりました。ありがとうございます。
お礼
簡潔で非常に分かり易い答えをありがとうございます。 変数レベルを変えるよりは、引数として参照渡しをした方が複雑にならずに済みそうですね。 ありがとうございました。