投稿
多分不具合だと思うのですが、関数でINCで文字連結すると呼び出しもとに影響がでてしまいます。 前からでしたっけ?
1そうだね
プレイ済み
返信[1]
親投稿
文字列は配列的に処理されているので呼び出し元(参照)に対しての操作になって呼び出し元に影響を与えてしまうという動作原理なのはなんとなくわかるんですが、そもとも前からそうだったのかなぁ?というのが疑問です。 またA$=A$+"D"なら呼び出し元に影響が出ないので仕様だとしてもわかりにくくて危険だなぁ、とも思ってます。
0そうだね
プレイ済み
返信[2]
親投稿
>うえこうさん 処理的に早いならメリットがあるとも言えますがわかりにくいですよね〜…。INCは遅いという話もあるし、だとしたらメリットどころかデメリットだらけになってる気が…
0そうだね
プレイ済み
返信[3]
親投稿
oo2 meidoin20021
多分だけど(間違えてたらすみません) TEST(A$) のA$のところが同じでそれを五回繰り返しているからでは…? 例えば TEST(A$) TEST(B$) TEST(C$) TEST(D$) TEST(E$) とかだとどうなりますか?
0そうだね
プレイ済み
返信[4]
親投稿
MIKI ifconfig
3.1.0 では同じ結果になりました。
0そうだね
プレイ済み
返信[5]
親投稿
Godot orz_127
それは多分3.1.0でのINCの内部仕様の変更によるものと思われます。 3.0.2迄はそれで大丈夫でした。 以前は引数を別にコピーしてから連結処理されていた感じがあって大丈夫でした。実際はどうか知りませんが^^; 3.1.0でそこら辺の処理が変更していたため、前に作っていた最後に128バイト程度の文字列を作ってKEY登録するツールが一瞬でメモリを食い潰して落ちるようになりましたw 当時INCを多用していたのであちこち修正する羽目に orz
2そうだね
プレイ済み
返信[6]
親投稿
oo2 meidoin20021
…と思ったら A$=A$+"D" なら大丈夫なのね。 なんかすみません。
0そうだね
プレイ済み
返信[7]
親投稿
みなさんの意見を元にすると3.1.0からなんですね〜。 そんなに多くはないですが僕のツールはINCを利用している可能性があるんで注意ですね…。 内部仕様とはいえ、A$=A$+"D"とINC A$,"D"で呼び出し元に影響が出る可能性があるのは言語的にOKなのかわからないですが、スマイルブームさんの見解はどうなってるんでしょうね? 意識して気をつければ大丈夫だし逆に利用すれば呼び出し元を変更出来る事になるのでお得(?)なのかもしれませんが、ちょっと気になる感じでした。
0そうだね
プレイ済み
返信[8]
親投稿
MIKI ifconfig
b$=a$ a$[0]="z" でb$に副作用があるのも well known なバグだか仕様だかですよね。 var x[n],y[n] y=x x[0]=1 で y[0] が 1 になるのも同様です。
0そうだね
プレイ済み
返信[9]
親投稿
>みき★さん そうですね〜。文字列を配列で扱うのは公式的に認められてるかわからないのですが、なんにしても使える以上まぎわらしくはあるのでちょっと困りますね。 まあでも全てがコピーで処理速度に影響が出るのも困るし、ルール化するか、せめて一般的な使用方法では混乱しないようになってくれると良いなと思います。
1そうだね
プレイ済み
返信[10]
親投稿
Godot orz_127
みき★さんのコメントにある後半の 配列どおしの代入については、日経ソフトウェアの4(5?)月号にテクニック18選と言う特集があり、テクニックの7に参照値の代入になる。別にしたい場合はCOPYせよ。的なことが書いてあります。多分監修が入っていると思うので公式仕様かと。 文字列については、SHIFT()なども含めて配列と同等の操作が有効な様に、内部的には文字列自体既に文字型(CHAR??)の一次元配列ではないかと推測。 で、数値の出し入れをCHR$()、ASCで扱えば2バイトの数値データの配列としてつかえるぞ、SAVEのときデータのファイルサイズが半分に、と思ったら、落とし穴が2つ。 その1、CHR$(13)は、SAVEしてLODEするとCHR$(10)に変わりますw その2、TXT形式のファイルはUTF-8で格納されます。1バイト文字だけならさらに減りますが、他は逆に増えたりw
1そうだね
プレイ済み
返信[11]
親投稿
>Godotさん なるほど〜。公式テクニックとして言われているなら完全な仕様みたいですね〜。INCも仕様と判断した方がいいのかなぁ…。バグだったら社長がコメントくれそうですしね。 >うえこうさん どんどんメリットが無くなっていってINCの立場が厳しいですね(^^; 変数名が長い加算に関しては文字数が少なく出来るんでちょっとだけ多用していた面もあるんですが、今後はどんどん出番がなくなりそうです〜。
0そうだね
プレイ済み
返信[12]
親投稿
ギリギリまでチューンされている場合はあり得るかもしれないですね〜。 いずれINC禁止令が発令されたりして…
0そうだね
プレイ済み
返信[13]
親投稿
MIKI ifconfig
dex x,y イコール inc x,-y なんで、もともと存在価値が薄いのよね。
0そうだね
プレイ済み
返信[14]
親投稿
Godot orz_127
すみません、訂正です。 上の記事の話は 『日経ソフトウェア 2015年4月号』の特集2 「プチコン3号 スーパーテクニック18選」p88~99のp91小技05でした。 文字変数の配列A$[3]、B$[3]を使った説明になっています。
0そうだね
プレイ済み
返信[15]
親投稿
DECだけにデクの棒…(^^; プチコンはBASICなのになにげにC言語っぽいところ(参照など)がありますからねぇ…。その日経ソフトウェアの特集みたいなのがガイドブックにあったら嬉しかったなぁ。
1そうだね
プレイ済み