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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0607
backdropそういえば6解決


backdrop

リンク

2010/6/7(Mon) 22:51:14|NO.33131

HSPの記述は他のものと全然違いますね

//C++だったら int sp( int x ){//関数定義 return x*2; } int y = sp( 2 );//呼び出し
こんなスクリプトが

;HSPだと #defcfunc sp int x;関数定義 return x*2 y = sp( 2 );呼び出し
正直言って#defcfuncとかを書くのがめんどくさいし、第一型指定子を書かなくて
実行時の例外を出すっていうのよりは、型指定子にうるさくなり
コンパイラがエラーを出す方式にしたほうがよいと思う



この記事に返信する


チェ

リンク

2010/6/8(Tue) 07:26:17|NO.33134

う〜ん…
確かにこういうものは、
妥協して使っている内に不便さに気づかなくなることがよくありますね。
HSPは「命令」と「関数」に分かれていて、
なおかつ、「関数」には「戻り値」が必要なんですよね〜
ちょっとだけ不便かなと思いますけど、まぁ許容範囲内です。
マクロを使えばどうにかなりますし、僕の場合は、
自分独自の書式を、HSP形式に変換するコンパイラもどきを自作して使っています。

個人的には、「#define」が標準で複数行可能だと楽だな〜って思いますけどね。
使いどころは、たとえばこんなとき

repeat Xnum Xcnt = cnt repeat Ynum Ycnt = cnt ;ここに処理 loop loop
上記のスクリプトをマクロ化すると、

;マクロ定義 #define XYRepeat(%1,%2) Xnum = %1 : Ynum = %2 : repeat Xnum : Xcnt = cnt : repeat Ynum : Ycnt = cnt #define XYLoop loop : loop ;使用例 XYRepeat 2, 3 mes "今の座標は (" + Xcnt + "," + Ycnt + ") です。" XYLoop
このように、マップの調査や書き換えなどにとても便利なマクロになります。
これは関数や命令では不可能な部分ですよね。
しかし、「#define XYRepeat(%1,%2) Xnum = %1 : Ynum = %2 : repeat Xnum : Xcnt = cnt : repeat Ynum : Ycnt = cnt」
では、後からみたら、何のこっちゃ?ってなります。
「:」のところで改行して、やっと意味がわかると思います。

僕の書式だと、

#マクロ定義開始 XYRepeat(Xnum,Ynum) repeat Xnum Xcnt = cnt repeat Ynum Ycnt = cnt #マクロ定義終了
こんな感じで書くと、
「#define XYRepeat(%1,%2) Xnum = %1 : Ynum = %2 : repeat Xnum : Xcnt = cnt : repeat Ynum : Ycnt = cnt」
に変換してくれるんですけどね〜
オブジェクト指向も、擬似的にですが対応しているので、そこまで問題ではないし…
記述に不満を感じたら、独自にコンパイラもどき(正式な名称があるのかも)を作るといいですよ〜

とはいえ、標準実装は魅力的ですよね〜
かといって、現在バグなしで使えているのに、仕様変更でバグなんて発生したらいやですよね〜
そこんとこはジレンマですね〜
「守ることと戦うこと ジレンマは終わらない」ですよね〜(元ネタわかる人いるかにゃ?)



KA

リンク

2010/6/8(Tue) 22:34:37|NO.33141

>>HSPの記述は他のものと全然違いますね

 どんな言語も一長一短が有りますし、その捕らえ方も人によります。
 めんどうくさくても”こんなものなんだ”と割り切ってしまえば・・(むり?)

 かといって、中途半端に仕様を変えると又問題が・・・。

 拡張文法的な実装なら、良いかも知れません。



ANTARES

リンク

2010/6/9(Wed) 00:58:07|NO.33148

 こんな感じでは?

#define XYRepeat(%1,%2) Xnum = %1 : Ynum = %2:\ repeat Xnum:\ Xcnt = cnt:\ repeat Ynum:\ Ycnt = cnt



u

リンク

2010/6/9(Wed) 01:25:38|NO.33149

定義関数はよく使いますから確かに楽に定義できるとよいですね。
JS等のfunctionのような感じで定義できたらとても便利だと思います。



ANTARES

リンク

2010/6/9(Wed) 01:42:39|NO.33150

 ちょっとわかりにくいですね。
NO.33148は「標準で複数行可能だ」と言いたかったのです。



チェ

リンク

2010/6/9(Wed) 03:45:51|NO.33151

「:\」でできるのは知っていますが(改行の無効化…だっけ?)
行の追加や削除や編集をするたびに記述するのはやっぱり面倒なので、
サンドウィッチ方式がいいな〜って思っちゃったり。
ま、独自に実装すれば良いんですけどね……;



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