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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0709
NOiA配列変数のカッコ内に・・・1未解決


NOiA

リンク

2022/7/9(Sat) 21:58:31|NO.96770

コンパイルのみ行ってエラーが出てない事は確認しているんですが、
念のため質問したいと思います。

※以下の数値や変数名は質問用のサンプルです


foreach tan don(tan(cnt)\7)+ loop
という風に、
「配列変数のカッコ内に別の(配列)変数と式を直接導入する場合」と、


foreach tan hako=tan(cnt)\7 don(hako)+ loop
という風に、
「代入変数(上記の場合hako)でワンクッション入れた場合」で、
プログラムの処理やエラーの起きやすさに差異はありますか?



この記事に返信する


雪月夜

リンク

2022/7/11(Mon) 22:26:15|NO.96785

プログラムの処理面ではどちらも差はありません。
見た目は違ってもコンパイルすればどちらも同じ意味になるからです。
強いて言えば、起こりうるヒューマンエラーに差異があるくらいですね。

まず上の方は『括弧の過不足によるエラー』に注意する必要があります。

don(0+atan(sqrt(1.0-powf((a+b)/c,2)*powf((a+b)/(d+e),2),(a)))++
上のプログラムは括弧が一か所足りていませんが、
どこが足りていないのか見つけるのは容易ではないでしょう。
複数の計算式を一行に書くと可読性が下がり、修正するのに余計な労力が掛かります。

下の方は『意図しない変数の書き換えによるエラー』が起きる可能性があります。

hako="mikan" mes""+hako gosub *method mes""+hako stop *method hako=0 don(hako)++ return
HSPではモジュール内の変数以外はグローバル変数になっていて、いつでもどこでも書き換えることが出来ます。
上記の例では文字列型変数として定義していたのに、
呼び出した関数内で数値を入れたがために、数値型変数に書き変わっています。
こういうのを意図せずやってしまうと、予期しない動作を起こしてしまって大変です。
またコード量が多くなるとどこで書き換えているのか探すのにも手間取ります。

個人的には下の方の書き方が良いと思います。
文字や行数は増えますが、コードが読みやすくなります。
ただし、変数名には注意が必要です。
繰り返し文や関数の中でしか使わないなら、その中でしか使っていないと分かるような変数名を付けましょう。



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