投稿
けい kei0baisoku
連投気味になって申し訳ないですが、真面目な質問。 ユーザ定義関数(命令)で、デフォルト引数って使えないですよね? 既存の命令が普通にやってるので、てっきりあるもんだと思ってはじめの頃に色々試したのですが。
3そうだね
プレイ済み
返信[1]
親投稿
すごいですね、そこまでしますか。ゲームの隠しイベント探索のような感じでしょうか。 それをするためには、引数の省略可否やデフォルト値を指示するための構文が必要だと思います。もし、あったとしても、公開されている情報では書き方がわからないので、私には、手も足もでません。
0そうだね
プレイ済み
返信[2]
親投稿
けい kei0baisoku
難しいことをしたいというわけではなく、逆で、できるだけ楽に作りたい、という動機で探していました。 (隠しイベントやバグ技探しも好きではありますが) 用意されている命令は普通にやってるので私が見落としてるだけかなとも思ったのですが、公式で公開されてないようでしたらやっぱり無理そうですね…
0そうだね
プレイ済み
返信[3]
親投稿
関数(手続き)名の後ろにパラメータ数をつけて命名し、なんちゃって「多態性」というのはどうでしょうか。
0そうだね
プレイ済み
返信[4]
親投稿
けい kei0baisoku
やっぱそんな感じになりますかー(><) さらに型名と文字を対応させて FUNC_I( X ) FUNC_IS( X, STR$ ) のようにC++のオーバーロードの内部処理みたいにすれば、デフォルト引数も多重定義もぽい事はできるかなと考えたのですが、プチコンで名前が長くなるのは厳しい… 名前を使い分けるめんどくささよりも多態性の便利さの方が勝りだしたらやってみるかもしれません(´ω`)
1そうだね
プレイ済み
返信[5]
親投稿
ish owlis1
横から失礼します。 言語的なサポートも無さそうでJAVAでいうオーバーロードもない状況なので別名で関数のラッパーを作るか、関数の先頭で初期化が現実線と個人的には思いますが、どうでしょうか。 ラッパーに関しては引数の量が増えた場合やら、関数がやたら増えるのは考慮外ですが。 'Bのデフォルト設定ありラッパー DEF FUNC1_W A RETURN A(A,0) END DEF FUNC1 A,B RETURN A+B END
0そうだね
プレイ済み
返信[6]
親投稿
けい kei0baisoku
>ishさん ありがとうございます。悪くなさそうですね。 プチコンで名前が長くなるのと使い分けがどうしても発生するのだけネックですけど… そんなにトリッキーでもないですし、どうしても欲しくなったらコータさんの数字追加方式かishさんのラッパー別名方式(か両方をあわせたもの)でやってみようと思います。
0そうだね
プレイ済み
返信[7]
親投稿
ish owlis1
よくみたらサンプルが間違っていました。申し訳ないです。 私は私で、引数の個数を変動したくて色々弄っていた事がありましたので、参考になれば、と。
0そうだね
プレイ済み
返信[8]
親投稿
もやしもどき Pseudomoyashi
引数を配列にしてその長さによって場合分けさせる、というのはどうでしょうか? DEF HOGE(A) IF LEN(A)==0 THEN RETURN FUGA(0,1) IF LEN(A)==1 THEN RETURN FUGA(A[0],1) IF LEN(A)==2 THEN RETURN FUGA(A[0],A[1]) END いちいち配列を宣言して値を設定する手間とか、異なる型の引数を取れないとか問題は多々ありますが。
0そうだね
プレイ済み
返信[9]
親投稿
けい kei0baisoku
>ishさん 今気付きました(^0^; 意図は伝わりましたので問題ないです。
0そうだね
プレイ済み
返信[10]
親投稿
けい kei0baisoku
>もやしもどきさん ありがとうございます。 そう言えば私も、凸N角形の当たり判定関数作った時に引数を自然に配列にしてました。 関数の多重定義の代わりとして考えると不便かもしれませんが、同じ型の引数が将来増えそうと予測が付くなら、始めから引数を配列にしておけば結構しっくり来そうですね。 その状況で使えるよう、頭に留めておこうと思います。 ありがとうございます。
0そうだね
プレイ済み
返信[11]
親投稿
otta777 otta777a
かなりの力業ですが引数を文字列にして渡してしまうという手もあります。省略した引数は文字配列変数の中身が空なのでそれを判定してデフォルト値を代入すればいいのかな。
0そうだね
プレイ済み
返信[12]
親投稿
けい kei0baisoku
>otta777さん さすがにそこまでの発想はなかったですw(^O^) 執念ですねw トリッキー過ぎるので実戦では多分別の方法で何とかすると思いますが、関数に限らず使えそうですね。よっぽど柔軟な仕様にしたい所ならあるいは……… ありがとうございます。覚えておいて、機会があったら使わせて頂こうと思います(^O^)
0そうだね
プレイ済み
返信[13]
親投稿
体調不良によりリアルタイムに話しに参加する余裕がなかった…。 とりあえずは出来ないがファイナルアンサーっぽいですね。あまりトリッキーにしても本末転倒になりかねないし、実用レベルでは関数名の工夫ぐらいかなぁって感じがしますね。まあただけいさんの言うようにプチコンは横の表示桁数が少ないので長い名前がネックではあるんですよねー…
1そうだね
プレイ済み
返信[14]
親投稿
けい kei0baisoku
そうですね、あると助かりましたが、無いなら無いでほどほどに工夫してみます。 関数名に規則性のあるサフィクスか、配列にしておくか………とりあえずやり易そうなのはこの辺ですかね。 PS.おだいじにー(´ω`)/
0そうだね
プレイ済み