HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0329
こいる変数の使いどころ?に悩んでます(より多くの方の意見が欲しいです)6解決


こいる

リンク

2020/3/29(Sun) 15:12:37|NO.89854

変数の使い方に悩んでいます。


自分は少ししか使わない変数は極力減らす主義で、
複数のウィンドウのサイズと座標をファイルに出力して読み込むときは、

ウィンドウを初期化する前ごとに、一回一回同じ変数にサイズと座標を読み込ませています。

// こんな感じに、ウィンドウ初期化前ごとに読み込ませる // (ほんとにファイルから読み込ませるとコードが長くなるので、代入してあるだけです) ;ファイルから、座標とサイズを読み込む sizex = 640 sizey = 480 posx = ginfo_dispx/2- sizex/2 posy = ginfo_dispy/2- sizey/2 screen 0, sizex, sizey, 0, posx, posy; 読み込んだ座標とサイズを指定 title "0" ;ファイルから、座標とサイズを読み込む sizex = 640 sizey = 480 posx = ginfo_dispx/2- sizex/2-50 posy = ginfo_dispy/2- sizey/2+50 screen 1, sizex, sizey, 0, posx, posy; 読み込んだ座標とサイズを指定 title "1"

しかし、これだと、コードが無駄に増えて管理もしづらいです。


なので、ウィンドウごとに変数を用意して最初に全て読み込ませてみました。

; ファイルから、全ての座標とサイズを読み込む dim sizex,2 dim sizey,2 dim posx,2 dim posy,2 sizex(0) = 640 sizey(0) = 480 posx(0) = ginfo_dispx/2- sizex/2 posy(0) = ginfo_dispy/2- sizey/2 sizex(1) = 640 sizey(1) = 480 posx(1) = ginfo_dispx/2- sizex/2 -50 posy(1) = ginfo_dispy/2- sizey/2 +50 screen 0, sizex(0), sizey(0), 0, posx(0), posy(0) title "0" screen 1, sizex(1), sizey(1), 0, posx(1), posy(1) title "0"

読み込み部分と、初期化部分が分かれてすごくみやすくなって管理もしやすくなったのですが、

サイズと座標を指定するだけの変数は、自分からしたらとても無駄な変数で、
メモリがもったいないと思ってしまいます。

たかが数十バイトなのですが、気になってしまいます。


こういう考えは普通でしょうか?

皆さんはどうするのでしょうか?

ウィンドウごとに変数を使った方がいいのでしょうか?


より多くの方の意見をお聞きしたいです。




この記事に返信する


こいる

リンク

2020/3/29(Sun) 15:14:21|NO.89855

後半修正
--------

なので、ウィンドウごとに変数を用意して最初に全て読み込ませてみました。


; ファイルから、全ての座標とサイズを読み込む dim sizex,2 dim sizey,2 dim posx,2 dim posy,2 sizex(0) = 640 sizey(0) = 480 posx(0) = ginfo_dispx/2- sizex/2 posy(0) = ginfo_dispy/2- sizey/2 sizex(1) = 640 sizey(1) = 480 posx(1) = ginfo_dispx/2- sizex/2 -50 posy(1) = ginfo_dispy/2- sizey/2 +50 screen 0, sizex(0), sizey(0), 0, posx(0), posy(0) title "0" screen 1, sizex(1), sizey(1), 0, posx(1), posy(1) title "0"

読み込み部分と、初期化部分が分かれてすごくみやすくなって管理もしやすくなったのですが、

サイズと座標を指定するだけの変数は、自分からしたらとても無駄な変数で、
メモリがもったいないと思ってしまいます。

たかが数十バイトなのですが、気になってしまいます。


こういう考えは普通でしょうか?

皆さんはどうするのでしょうか?

ウィンドウごとに変数を使った方がいいのでしょうか?


より多くの方の意見をお聞きしたいです。



とあるプログラマ

リンク

2020/3/29(Sun) 21:30:59|NO.89858

自分もメモリ消費量を控えようとしています。

HSP3ならdimで配列を指定しなければ初期化できるので、一連の処理の後にdimやsdimで初期化してあげればいいと思います。



; ファイルから、全ての座標とサイズを読み込む dim sizex,6400000 // 試しにとんでもない配列数にしてみる dim sizey,6400000 dim posx,6400000 dim posy,6400000 sizex(0) = 640 sizey(0) = 480 posx(0) = ginfo_dispx/2- sizex/2 posy(0) = ginfo_dispy/2- sizey/2 sizex(1) = 640 sizey(1) = 480 posx(1) = ginfo_dispx/2- sizex/2 -50 posy(1) = ginfo_dispy/2- sizey/2 +50 screen 0, sizex(0), sizey(0), 0, posx(0), posy(0) title "0" screen 1, sizex(1), sizey(1), 0, posx(1), posy(1) title "1" // ←1の間違い? mes "assertで停止中。デバッグウィンドウの[実行]で続行" assert 0 dim sizex dim sizey dim posx dim posy mes "メモリ解放"

また、sizex, sizeyではなくsizeという一つの変数で管理すればさらに小さくできると思います。
(もうここまでだとやってもやらなくても変わらないが…)

#enum x = 0 #enum y ; ファイルから、全ての座標とサイズを読み込む dim size, 2, 6400000 // 試しにとんでもない配列数にしてみる dim posi, 2, 6400000 size.x.0 = 640 size.y.0 = 480 posi.x.0 = ginfo_dispx/2- sizex/2 posi.y.0 = ginfo_dispy/2- sizey/2 size.x.1 = 640 size.y.1 = 480 posi.x.1 = ginfo_dispx/2- sizex/2 -50 posi.y.1 = ginfo_dispy/2- sizey/2 +50 screen 0, size.x.0, size.y.0, 0, posi.x.0, posi.y.0 title "0" screen 1, size.x.1, size.y.1, 0, posi.x.1, posi.y.1 title "1" // ←1の間違い? mes "assertで停止中。デバッグウィンドウの[実行]で続行" assert 0 dim size dim posi mes "メモリ解放"



通りすがり

リンク

2020/3/30(Mon) 02:50:44|NO.89859

そのあたりは趣味が分かれますよね。
私なら基本的にメンテナンス性の方に比重を置きます。
つまりコードの判りやすさを重視です。程度問題ではありますが。
作ったアプリは何度もバージョンアップしますので。

ただ、この部分はもう完成、手を加えることはないだろうと判断できた部分については、
バックアップした上で、圧縮したようなコードに書き換えることもあります。
ありますというか、なくはない……といった頻度ですが。



こいる

リンク

2020/3/30(Mon) 20:22:54|NO.89864

>とあるプログラマさん
なるほど、全て配列変数にまとめてしまって、使用後に初期化して解放すればいいのですか。

一つの配列変数に全てまとめてしまえばさらに節約ですね。
まあまとめすぎると、なんの変数か分かりづらくなるのが難点ですが。

変数の完全な破棄(確保したバッファの全解放)とかできれば便利そうですけどね。


>通りすがりさん
わかりやすいようにしようとすると、変数が増え気味になってしまうのが悩みどころです;;



とあるプログラマ

リンク

2020/3/30(Mon) 22:42:06|NO.89865

>>まあまとめすぎると、なんの変数か分かりづらくなるのが難点ですが。
>>わかりやすいようにしようとすると、変数が増え気味になってしまうのが悩みどころです;;

変数の数を増やすと視認性は良くなりますが変数の数が増えてしまうという問題がありますね。
それに変数が増えるとちょっとした綴りミスなどからバグも生まれてしまします…
(こちらに関してはAtomやVisualStudio Codeなどの入力候補でかなり防げたりします)


対策の一例としては上の自分のスクリプトのように#enumや#defineを使う方法です。
例えば

Rect.0 = 0 Rect.1 = 0 Rect.2 = ginfo_winx Rect.3 = ginfo_winy
とすると各配列が何を意味しているか分かりにくいですが、

#enum left = 0 #enum top #enum right #enum bottom // 〜 Rect.left = 0 Rect.top = 0 Rect.right = ginfo_winx Rect.bottom = ginfo_winy
とすれば分かりやすくなります。
バグ対策やメンテナンス性からもマジックナンバーは避けるべきです。
またデバッグウィンドウからも配列の方が一つの選択で全値を見れるので見やすさは向上します。

ただし配列数が多い場合(特に2次元配列で1次元の要素の塊を増やした場合等)は逆に視認性は落ちてしまいます。


とにもかくにも、変数の使用状況やプログラムの内容等に合わせて臨機応変に変えていくのが無難だと思います…



こいる

リンク

2020/3/31(Tue) 17:34:58|NO.89874

なるほど。
おかげで頭がすっきりしました。

ありがとうございました。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.89854への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2018(c) All rights reserved.