Functionの引数と配列への代入。

ActiveBasic製ソフトウェア、またはABサイドのソフトウェアを開発された方は、こちらへご紹介ください。関連Webサイトの紹介などもこちへ。
返信する
メッセージ
作成者
uhsp

Functionの引数と配列への代入。

#1 投稿記事 by uhsp »

 最近ABを学習し始めたばかりですが何点かお願いがあります。

1.Functionの引数の省略は()()で出来るのですが値の初期値を設定できません
 文字列の場合はポインタの値で判別できるものの数値の場合0なのか
 省略なのか判別が出来ないので 変数名=n AS LONG などと記述できると
 助かります。
 なお省略型もVBの option が使用できるとありがたいです。

2.宣言時以外に連続した配列に値を代入する方法があるとありがたいです。
 X[0]=1,2,3 X[0]={1,2,3} X[0]=[1,2,3]
 X[0,0]=1,2,3 X[1,0]={1,2,3} X[1,1]=[1,2,3] など

 できればご検討いただければ幸いです。
 (マニュアルの見落としなどで見当ハズレでしたらすみません。)
tak
記事: 162
登録日時: 2005年5月31日(火) 07:49

Re: Functionの引数と配列への代入。

#2 投稿記事 by tak »

> 1.Functionの引数の省略は()()で出来るのですが値の初期値を設定できません
>  文字列の場合はポインタの値で判別できるものの数値の場合0なのか
>  省略なのか判別が出来ないので 変数名=n AS LONG などと記述できると
>  助かります。
>  なお省略型もVBの option が使用できるとありがたいです。

そもそも省略可能引数という概念自体が邪道的ですし、マニュアルにも詳細が述べられていないことからも、あまり使わない方がよいのではないでしょうか。
「邪道」はすこし言い過ぎかもしれませんが、少なくとも「正当」ではないとおもいます。
勿論、初期値代入も含めて、ABに正式導入されればそれはそれで歓迎です。


> 2.宣言時以外に連続した配列に値を代入する方法があるとありがたいです。

配列の各要素はメモリ上に連続的に配置されるので、うまくやればmemcpy()などを使って配列への同時代入が可能になります。
要は、表記を簡略化したいということでしたらこの方法でルーチンを作ればよいと思います。
コードの読み易さは大切です。多少のオーバーヘッドが生じたとしても導入する価値はあるのではないでしょうか。
ただし、配列に関する深い知識がなければ難しいことです。
ゲスト

Re: Functionの引数と配列への代入。

#3 投稿記事 by ゲスト »

 ご回答ありがとうございます。

> 「邪道」はすこし言い過ぎかもしれませんが、少なくとも「正当」ではないとおもいます。
> 勿論、初期値代入も含めて、ABに正式導入されればそれはそれで歓迎です。

 邪道でしたか。
 適当にラップして使いかってを向上させたいと思い関数化すると引数を
 省略したい場面が多くて...能力不足は否めませんが。

> 配列の各要素はメモリ上に連続的に配置されるので、うまくやればmemcpy()などを使って配列への同時代入が可能になります。

 配列の要素数を取得する Ubound みたいな関数ってあるんですかね?。
(どうもAB学習しているのかC・APIの学習しているのか混乱する言語です)
tak
記事: 162
登録日時: 2005年5月31日(火) 07:49

Re: Functionの引数と配列への代入。

#4 投稿記事 by tak »

>  適当にラップして使いかってを向上させたいと思い関数化すると引数を
>  省略したい場面が多くて...能力不足は否めませんが。

引数が省略されたとき、それを確実に知る方法が回りくどいのです。
初期値代入で判定するにしても、実際に渡される値が初期値に等しい場合はお手上げです。
VB6では、Variant型にエラー値が代入されるのでIsMissing()で確実に知ることができる(最新のVBはどうだか知りません)のですが、ABだとこの手法は仕様上無理ですので、引数をポインタ渡しすることになります。
ポインタがNULL値なら、省略されたと見なす方法です。
ただ、このとき問題なのがポインタ型を省略可能引数にできないこと。
ポインタ派生は一次元までだからです。


> > 配列の各要素はメモリ上に連続的に配置されるので、うまくやればmemcpy()などを使って配列への同時代入が可能になります。
>
>  配列の要素数を取得する Ubound みたいな関数ってあるんですかね?。

ないです。配列の範囲のあたりに関しては結構ルーズです。
範囲チェックがないことを利用したデバッグの講座もあるぐらいですから(爆)


> (どうもAB学習しているのかC・APIの学習しているのか混乱する言語です)

山本さんがC言語好きだから、でしょうね。
しかし、APIに関して知識を深めることは決して損ではありません。
かなりC言語に近い感覚でプログラミングできるのも、悪いことではないはずです。
なんたって、非常に柔軟な言語構造ですから、Cってやつは。
僕なんて時に柔軟すぎるせいで困惑することが・・・
返信する