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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
0827
Y_repeatHSPの仕様:HSPの&&はビット演算です0解決


Y_repeat

リンク

2019/8/27(Tue) 23:39:03|NO.88225

Android9上でのif文が正常に機能しない
http://hsp.tv/play/pforum.php?mode=all&num=88182
を受けて
HSPで&&を論理演算子として使おうとすると
たまに意図通りに動きません
たぶんAndroidでもWindowsでも
意図通りに動かないと思います

引用スレはAndroidだと意図通り動かないことがあるという
報告でしたので
&&の気をつける点としての資料として
ググってひっかかるように
スレを立て直してみました

具体的にどういう点かというと

if 2 && 1{ mes "OK }
はOKと表示しません
ビット演算だからです
しかし、

if 2 { if 1 { mes "OK" } }
はOKと表示します
if ブレースはビット演算ではないからです
問題はネストが深くなってわかりにくくなることと
elseをどこにつければいいかよくわかんないことです

ちなみに僕がHSP初心者の頃は
条件式を正しく書けているかわかんなくなって
if ブレースを論理&&っぽく使ってました
たぶん数年前、ビット演算なので
上手く動かなかったんだと気付いたのですが
自分は理解したからいいかなと
特にアウトプットしませんでした
そういう意味でちょっと自省を込めて書いております
僕だけじゃなく、知っている人も多かったでしょうに
陰険ですなw

ちなみに-1はtrueなので

s="z" ss="abc" if instr(ss,0,s){ mes "OK" }
はOKと表示されます
エラー値がifに渡される場面も結構ありそうなんすけどね
0がnullならそれと違うnilが欲しかったりもします

論理orはビットが違っても大丈夫なので

if 1 || 2 { mes "OK" }
はOKと表示されます

HSP3は後方交換性が魅力なので
今更、&はビット演算、&&は論理演算とかにすると
動かなくなるプログラムも多々ありそうであり
主に色々サイトに載ってるサンプルスクリプトとか
なので&&&を論理ANDにするとかどうでしょうか

仕様とか報告する場とかどっかにあるといいんですけどね
各サイトに散らばってても把握しにくいでしょうし
こうやって公式BBSに書くのはいいかもしれませんね
公式BBSってググったらいっぱいひっかかりますし



この記事に返信する


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