投稿
スー thanks_0u0
粋で鯔背なプログラミング上級者の方々が異口同音に、「OPTION STRICT」が良いですよ、と仰るのでひとつ私も倣ってみたいと思ったのですが、少し疑問が浮かんでしまったので質問させてくださいませ。 変数の宣言は、具体的にいつするのがオススメですか?(´・ω・`) 私の今のイメージでは、まずプログラム冒頭で、使用頻度の高い変数や、途中で初期化しない変数を宣言しておき、その後、処理の区切り毎に必要な変数を宣言していく、というのが良さそうかも?と思っています。 また、こちらも序でにお聞きしたいのですが、暫く使用しなくなる配列などをメモリから解放することは出来ますでしょうか? 動けば良いとは思いつつも、少しだけ気になってしまいました。 ご意見いただけたら嬉しいです。どうぞよろしくお願いいたします。
5そうだね
プレイ済み
返信[1]
親投稿
けい kei0baisoku
おっと、これは人によってやり方が別れそうな予感。 アドバイスとかではなく、私はこうしてますという参考としてコメントしてみます。 ・変数の宣言 どこからでもアクセスできるいわゆる「グローバル変数」は、必ずプログラムの冒頭で全て宣言します。IとかJとかTMPとかの、頻度の高い一時変数もここで宣言します。 初期化は、専用のINITサブルーチン作ってその中でやってます。 関数内でしか使えない「ローカル変数」は、使いたくなった行で適宜宣言してます。 厳しく必ず冒頭に集めてる理由は、イコールそれがそのプログラムを司るパラメータ全てになり重要なので、一覧で管理したいからです。
2そうだね
プレイ済み
返信[2]
親投稿
けい kei0baisoku
・配列の解放 やったことは無いのですが、出来るとしたらPOPやSHIFTでサイズをゼロにするのかな、と思います。 ただ、状況にもよりますが、どちらかと言えば動的にメモリを確保&解放せず、シンプルなプログラムなら静的に必要最大サイズを常に持っておかせてます。 理由は、状況によって消費メモリが変動すると、稀にしか起きないリソース不足バグなどの原因になるためです。足りないなら足りないで、すぐに把握したい、という考えです。
1そうだね
プレイ済み
返信[3]
親投稿
おかっぺ Japanese_WASABI
僕のやり方は冒頭でグローバル変数をまとめて書いて、後はDEFの中で適当に定義してしまっています。僕はI,J等をグローバル宣言すると、どうしても使っていたのを忘れて上書きしてしまうので、I,Jは必ずローカル宣言ですね。 1個作ってみて、グローバル変数なことを忘れて、一生懸命、DEFに引数で渡していたりしたので、次回からはグローバル変数の変数名の先頭に_(アンダーバー)を付けるか検討中です。 色んな工夫があると思うので、色んな人の話を聞いてみたいですね。
1そうだね
プレイ済み
返信[4]
親投稿
けい kei0baisoku
グローバル変数の名前を何にするかもとても大事ですよね。私もまだ悩んでます………(´ω`) 一つ目に作ったゲームでは全部頭に「G_」って付けたのですが、書くのも見るのも想像以上にうざかったです(´Д`) 今は、とっさにローカル変数作っても被らなさそうな内容、長さにしてます。 I、Jは私も一度関数呼び出しに使っちゃうバグ出して、それからは「使う範囲短く」「その中で別のルーチン呼ばない」を徹底して回避してます。 が、おかっぺさんのコメント見てたら、その都度宣言でもいい気がしてきました(´ω`) そこは元々、宣言が面倒だからってだけの理由だったので、もう一回問題が出たら変えるかも……… (私しかコメントが付かなかったらどうしても影響が強くなるので、ホッとしました。ありがとうございます)
1そうだね
プレイ済み
返信[5]
親投稿
スー thanks_0u0
コメントありがとうございます(*´∨`*)ノ 理由も合わせて教えていただき、とても参考になります! グローバル変数は冒頭でまとめて宣言してしまうのが一般的な感じなのですね。変数名に気を付けないといけない、というお話にも感心しきりです。 バグを如何に無くすか、と考えながらお二人の意見を読むと、とても利に適っている気がします。 私の頭ではまだ自分で書いたものを保守改修することすら難しいので、皆様のお話を参考に、どうやったらわかりやすくなるのかな、っていうのを考えてみたいです。 ご意見くださる方がいらっしゃいましたら、まだまだお聞きしたいです( ´ ▽ ` )ノ
1そうだね
プレイ済み
返信[6]
親投稿
そもそもグローバル変数自体、使う必要がある場合以外は使わない方が望ましいです。 個人的にはメイン処理も関数の中に押し込んでしまう方が、本当に必要な変数だけグローバル変数にでき、グローバル変数とローカル変数の混乱もなくなるのでオススメです。 MAIN DEF MAIN : END
1そうだね
プレイ済み
返信[7]
親投稿
スー thanks_0u0
コメントありがとうございます♪( ´▽`) なるほど、変数はなるべくローカルで作った方が良いのですね!MAINまで徹底して関数にしてしまうのには驚きました。 ですが私はまだ、グローバル変数を使う必要がある場合とローカルに出来る場合、っていうのがわからなくて、全部グローバルにしてしまっています。 上級者の皆様のお話を聞くといつも、ソースの整理整頓や概念の理解は難しいな、って思うのですが、せめて自分が書いたものくらいは読めるようになりたいです…(´=ω=`)
1そうだね
プレイ済み