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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0324
Humi/bass_clef_演算子9解決


Humi/bass_clef_

リンク

2016/3/24(Thu) 14:32:26|NO.75058

※注意
スクリプト言語に求めるのもなんか変な話なので不快に思った方はスルーしていただけると幸いです

:単項notについて:
! 演算子があるなら 単項not も実装してほしいです

単に ctype の戻り値を true か false で判定するだけなのに

if false == ctypeFunc() : // または if true == ctypeFunc() :
としないといけないという

// ! が単項notならば if !ctypeFunc() : // でいい
まぁこれは単項notでは間違える可能性もあるので 「false == 絶対」 とかでもいい気がしますけど……


あと ビット反転をさせるのに xor を使わなければいけないということが
式を読みずらくしているような気がします

// 現在 a = -1 a = a ^ -1

// ! が単項not(ビット反転)だったら a = -1 a = !a

:シフト:
右シフトが算術固定なので >>> とか3つつなげると論理シフトになるとか
左シフトが論理固定なので <<< とか3つつなげると算術シフトになるとか
2つは論理で3つは算術とか、その逆とか
片方だけできないというのはなにか不便な気がします。


:参照, 間接, ポインタ:
hspは一応ポインタも扱えるので
foo->bar で参照, *Hoge で間接演算, &piyo でvarptrの代わり
とかできるとはかどりそうです


:演算子のオーバーロード or マクロ定義:
・上記で述べたようにユーザーが変えたい場合もある
・折角マクロで hsp命令は undef できるのに 演算子はできない
という点などからできればこれも実装されたら嬉しいです。
上記の シフト とか varptr とか解決しますし
@ はできなくてもいいので……
(私は余剰は % 派なので……)


なんか雑談なのに要望みたいになってしまったw

ほかの人はどう思ってるのかきになる今日の午後



この記事に返信する


さか

リンク

2016/3/25(Fri) 00:15:03|NO.75062

元々がbasicベースなのでそもそもオブジェクト指向が後付けと言うのが
あると思いますが、C言語を使用してる個人的な意見では、他人が作った
プログラムで
if !ctypeFunc() :
は、おっしゃる通り、間違い易いので自分的には使用しないです。
複数あるAND ORの条件羅列を()で括ってNOTにされると可読性がとても低
くて最悪です。
また、リターンが1でなくて2以上でもtrue扱いになったりするので、
想定してる動きなのか単なるミスなのか判断がつかないケースがありました。

自分の基本的な要望としては、,とかで改行してもエラーにならないでほ
しいです。
例えば
ctypeFunc a,b,c,d
は1行に書かなくて
ctypeFunc a,b,
     c,d
としてもOKにしてほしいなあと思います。
あとはエディタ機能ですがVSみたいに関数なんかは畳めるようにしてほし
いです。
あまり上記のような記述ルールの要望って聞かないですよね。



Humi/bass_clef_

リンク

2016/3/25(Fri) 10:38:40|NO.75065

やはり C とかと違ってHSPは最後にセミコロン必須でないから改行してもっていうのは技術的に無理なんですかね、、、
せめて \ で、まだこの行が終わってないみたいな動作ができれば解決?できるような気がしますね
なんでマクロの構文ではできるのに普通の構文では許可されていないんでろうか……

func a, b, \ c, d r = ctypeFunc( \ a, b, \ c, d \ )
みたいな
……あれ命令はともかく関数型の命令は閉じかっこを見れば改行判定が見れそうですね(チラッ


あと
マクロとかで {} のような空間が終わりまでが1引数になると面白い気がしますね
forとかがより C 版に近づきそう

#define for(%1, %2, %3, %4) %1 :repeat :%3 :if (%2) %4 else { break } :loop for i=0, i<10, i++, { // hoge }
みたいなことができれば記述の幅が増えそうですし
より直感的にブロックの終端が分かりやすくなるですしおすし



窓月らら

リンク

2016/3/26(Sat) 07:47:45|NO.75076

横からですが
a = a ^ -1
これは
a^-1
と書いても同じ結果になります。



Humi/bass_clef_

リンク

2016/3/26(Sat) 13:02:49|NO.75079

>> 窓月らら さん
はい。HSPの演算子が = を省略してもいいのは存じております。
a ^ -1

a = a ^ -1
だったから使える式で、例えば代入先を a でなく b とかにするとまた別の行を増やしたりしないといけないと思いますし
どちらかというと別の変数に代入したりそれ自体を評価に使ったりする事の方が多いと思いますしおすし

a = -1 b = a ^ -1 // ここで b ^ -1 をしても当然 a の値は反映されてない // ! が単項not(ビット反転)だったら a = -1 b = !a



Humi/bass_clef_

リンク

2016/3/26(Sat) 13:09:47|NO.75080

なんか 単項not のことばかり書いてるから固執しているように感じますけど、
自分は上記に書いた通り、if 文は
if false == ctypeFunc() :
派なので実装されても評価に使うことはないと思います、、、たぶん。

折角、スクリプト言語なのでもう少し独自の演算子の機能があっても面白いなぁと思った次第です。

不快にしてしまったらすみません。



GENKI

リンク

2016/3/26(Sat) 21:05:48|NO.75089

> やはり C とかと違ってHSPは最後にセミコロン必須でないから改行してもっていうのは技術的に無理なんですかね、、、

VBAの場合は行末に「 _(半角スペース+アンダーバー)」を置くと改行することが出来ます。
HSPでも改行出来るとスクリプトが見やすくなることがあって便利なんですけどねー。
たまにIF文の条件式が長くなってしまってわかりにくくなることがあります。まあ条件式用に変数用意すればいいんですけどね…。



Humi/bass_clef_

リンク

2016/3/28(Mon) 00:17:51|NO.75100

if の () を C みたいに強制すれば ctypeFunc みたくいけそうですよね……

左かっこがあると右かっこが見つかるまで 改行もスペース扱いみたいな

いけそうなきがするんだけどなー(チラッ



ue_dai

リンク

2016/3/29(Tue) 21:18:12|NO.75115

ありがたいことにHSPはオープンソースなので、
自分でそういう機能を作ってしまうという手もありますよ……!

http://dev.onionsoft.net/trac/openhsp



zakki

リンク

2016/3/30(Wed) 00:41:43|NO.75117

コンパイラ改造で対応するのもいいですが手っ取り早くだとAltHSPのような手も。
何かの記号を単項notに割り当てたり、「_」に続く改行を無視するというようなのならできそう。
if()...も制限付きでならいけそうな気がします。

https://github.com/dolphilia/althsp/



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