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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
1029
Pauceコンストラクタとデストラクタ11未解決


Pauce

リンク

2015/10/29(Thu) 06:16:55|NO.72595

つい先日HSPをダウンロードしたばかりで、よく分かってませんのでよろしくお願いします。
制御構造やデータ管理の方法、HSPの慣習など全く分からずに書いています。



モジュール(?)を作り、
newmod Variable, ClassName, Argument
とすることでnewのようなことが出来ることまで分かりました。
しかしこれだと、そのInstanceがVariableのどこにあるのかがよく分かりません。
これだと、例えばMethodに個別なAccessorを用意する場合など困ることになります。

そこで、newmodした直後に
it = length(Variable) - 1
を試してみたのですが、一応意図した通りには管理できるようです。
Accessor Variable(it), Accessor

(ただし話がそれますが、これはこれで煩わしいのでなんとかしたいと感じています。
Variable(it)->Accessor->(Argument);
の記法ならまだなんとかマシなのですが…)

しかし試してませんが、マニュアルにてdelmodした際、
>削除された要素は、これ以降使用できなくなり、新たにnewmod命令が実行 された時に再利用されます。
との記述がありました。
これでは it と length の信用性が失われます。
これはどのように解決するのが慣習なのでしょうか?
(元々の書き方が間違ってるんでしょうねきっと)


色々なことを色々な角度から丁寧に教えていただけると幸いです。



この記事に返信する


toto

リンク

2015/10/29(Thu) 08:01:59|NO.72596

モジュール変数は一個一個個別に使うよりもforeachでまとめて使うのを想定されているようで
公式にはそういった方法は用意されていません。
ですがHSPの内部構造にアクセスする方法で可能です。
たぶん何やってるか分からないと思いますが以下でできます。
	
#module test a #defcfunc getnum var p1//配列変数の添字番号を返す mref id,1 return id #modinit return getnum(thismod) #global newmod m,test mes stat //作成された配列番号 newmod m,test mes stat newmod m,test mes stat delmod m.1 newmod m,test mes stat

>ただし話がそれますが、これはこれで煩わしいのでなんとかしたいと感じています
HSPはもともと昔のBASICをベースにした言語で基本的に文法とかは洗練されてないです。
この辺を期待するとHSPを使うのはきついです。



Pauce

リンク

2015/10/29(Thu) 08:42:21|NO.72597

ありがとうございます
>たぶん何やってるか分からないと思いますが以下でできます。
たしかに何をやってるか分かりませんでしたが、番号が得られているようです。


ついでに質問しておこがましいのですが、
foreachする際の順序をしたい場合はどのようにするでしょうか?
例えばですが、InstanceをSortできれば楽だと思います。
(※依然としてHSPが良く分からないまま適当に書いてますので色々根本的に間違ってると思います)


仮に、モジュール内部でインスタンスを管理しているものとします。(やり方はよく分からないのですが。さらにおこがましいのですが一般的なやりかた教えてください)。
その識別子として、newには引数にインスタンスの名称を与えることにします。

newmod Variable, ClassName, Instance_Name_A, 10
newmod Variable, ClassName, Instance_Name_B, 5
newmod Variable, ClassName, Instance_Name_C, 18
newmod Variable, ClassName, Instance_Name_D, 12


この時、Sortメソッドを作り、
Variable = SortMethod Variable ;;イメージ図。おそらくコンパイルエラー

のようなことをして、Variableの順序は数値が若い順に
Instance_Name_B, Instance_Name_A, Instance_Name_D, Instance_Name_C
として並び替えられていると助かります。


その後にforeachすると正しい順番で処理できます。
と言うようなことをやりたいです。



Pauce

リンク

2015/10/29(Thu) 08:55:08|NO.72598

すみません、書いた後に気づいたのですがVariableをSortすると、
得られた番号が使い物にならなくなります。

識別子名指定でInstance_Name_Bを指定させる方法など、一般的で使いやすい慣習お願いします。

(どうもマニュアルを読んでも、超簡略一言メモみたいにしか書いてなくて、
私のレベルではよく分からない次第なのです)。



toto

リンク

2015/10/29(Thu) 09:46:42|NO.72599

何が聞きたいのかいまいちわからないんですが。
普通に検索すればいいだけですよね。
以下は単純検索です

#module test num,name #defcfunc getnum var p1//配列変数の添字番号を返す mref id,1 return id #modinit str _name name=_name num=getnum(thismod) return num #modcfunc getname return name #defcfunc searchname array p1,str p2 i=-1 foreach p1 if getname(p1.cnt)==p2:i=cnt:break loop return i #global newmod m,test,"a" //"a"が識別子 newmod m,test,"b" newmod m,test,"c" mes searchname(m,"b") //識別子探索。配列番号を返す



レノス

リンク

2015/10/29(Thu) 10:23:43|NO.72600

インスタンスを変数の外に移動・コピーする手段は今のところないので、
ソートする場合はインデックスソートにします。

// v: モジュール変数配列とする // vi: v の順列 dim vi repeat N : vi(cnt) = cnt : vi // vi を適当な順番に並び替える repeat N // v(vi(cnt)) を使う loop

> 識別子名指定でInstance_Name_Bを指定させる方法
#define か #enum を使います



Pauce

リンク

2015/10/29(Thu) 11:22:34|NO.72601

>>NO.72599
なるほど分かりました。ありがとうございます。
そうゆうふうに書くのが一般的な方法の一つなのですね。
HSPの雰囲気が分かってきました。

ただ、それだと一回変数を指定するごとに検索してるような…
例えばハッシュテーブルに相当する物を自分で作る必要がある、と言うことなのかな?
まだ微妙によく分かってないのですが、
HSPは通常のプログラミングの前に、まず言語設計やデータ管理設計、dllなどの作成から始めるのがほぼ必須なのでしょうか?


>>NO.72600
ありがとうございます。
なんとなくですが分かりました。

>#define か #enum を使います
私の頭が悪いのか、マニュアルを読んでもいまいち意味が分かりませんでした。(何を書いてあるのか分かりませんでした)。


>インスタンスを変数の外に移動・コピーする手段は今のところない
オブジェクトが自身が生成したインスタンスを記憶する場合はどのように書くのでしょうか?
例えば、今まで生成したインスタンスを聞いてみたり、
Instance_Bが宣言されている場合はそれを返せ、と言って見たり。




ちなみに、インスタンスの中にインスタンス名が置かれるのはあまり私の感覚に一致しないのですが、
HSPの場合はこの方法が慣習的なのでしょうか?



toto

リンク

2015/10/29(Thu) 12:43:41|NO.72602

>ただ、それだと一回変数を指定するごとに検索してるような…
対象が単純なインデックスでないなら、どんな言語でも内部では毎回検索してるでしょう。
それを高速化する方法はそれぞれでしょうが。

>オブジェクトが自身が生成したインスタンスを記憶する場合はどのように書くのでしょうか?
ない機能は自分で工夫して作るだけです。

>ちなみに、インスタンスの中にインスタンス名が置かれるのはあまり私の感覚に一致しないのですが
モジュール変数をオブジェクト指向のインスタンスみたいに考えてるのなら誤解です。
ちょっとそれっぽいだけで全然違うものです



Pauce

リンク

2015/10/29(Thu) 13:35:25|NO.72603

オブジェクト指向に拘ってるわけではなく、どうもHSPのDesignPatternと必要前提がよく分かりません。
相応の慣習化された良い方法があるのならそれでも構いません。(むしろまず、そういった物を知りたいです)。
すんなり処理とデータの構造が書けないので、HSPの記法に私の書き方(DesignPattern)が即していないんだろうと思います。
また、(プログラム前の)事前段階の抽象化などに際して別の言語もほぼ必須なのでしょうか?


先ほども申し上げましたが、先日HSPをダウンロードしたばかりなので、よろしくお願い申し上げます。
あと、どうもマニュアルが分からないことが多いので、また何度か質問させて頂くことがあると思いますがよろしくお願いします。



mjhd

リンク

2015/10/29(Thu) 16:58:46|NO.72607

HSPはもっと気楽に書くものだと思います.

抽象化もあまりしないです.データ構造も多次元配列を使ったものです.
データと処理をまとめることもあまりしないです.

それと,もう少し何がしたいのかを具体的に書いていただけると,質問者さんの疑問も早く解決するのではないかと思います.

> すんなり処理とデータの構造が書けないので
どういった処理とデータ構造でしょうか?



toto

リンク

2015/10/29(Thu) 17:57:39|NO.72608

いまいちあなたが何がわからなくて、何を必要としているのかがわからないです
とりあえずモジュール変数は忘れてください。
どうもこれに幻想みたいなものを抱いている気がするのですが、ややこしいうえに
あまり使い勝手もよくないので無理に使わなくていいです。
データ管理は数値や文字列の単純な配列だけでやり、データと手続きは分けて考える
のが基本だと思ってください。
あとは地道にマニュアルやサンプル読むところから始めてください。
検索すればたくさんの初心者用情報も得られますのでそれを読むのもよいと思います。



n

リンク

2015/10/29(Thu) 19:04:39|NO.72609

HSP自体プログラミング初心者が簡単なGUIツールやゲームを作るものだと思うので
そもそもデータ管理などの処理系をあまりやらない前提で作られているような気もします。
Windows batのような書き方だと思ってください。
上から下に GUIオブジェクトを設置して GOTO文で ちょっと処理するかんじ
ぎりぎり関数(のようなもの)が使える程度です。



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