投稿
DEFで作成できる命令や関数のパラメータを「省略」させる事は可能でしょうか。 例えばコンソール出力系の命令を作ったとして、カラーの値を省略した場合常に15(白)を返すとか。
3そうだね
プレイ済み
返信[1]
親投稿
ish owlis1
はじめまして。 以前、けいさんと同様の事を話していました。 調べたら12/27です。(けいさんの活動から辿れます) 色々な方法論が提示されたのですが、私は関数のラッパーを提案させて頂きました。 'Bのデフォルト設定ありラッパー DEF FUNC1_W (A) RETURN FUNC1(A,0) END DEF FUNC1 (A,B) RETURN A+B END 一考に価する提案になれば幸いです。
0そうだね
プレイ済み
返信[2]
親投稿
実は関数のパラメタを省略すること自体は可能なものの、値を省略された引数に触れる術がないんですよね。 添付の画面の例ではBを表示後、3行目でType Mismatchとなります。 上の例ではAに加算や文字列結合、LEN()等を試みても全てType Mismatchとなりました。 恐らくAにはnullでも詰まってるのではと思うものの、null判定もできないし例外処理もないしでお手上げです。
1そうだね
プレイ済み
返信[3]
親投稿
けい kei0baisoku
私と全く同じ疑問を……というのと、最近少し新しいことに気付いたので………という事をコメントしようと思っていたらishさんとコア/co.aさんが既にコメントで1ミリの隙もなく網羅されていたので特に言うことがなくなりました(・ω・) ちなみにムリと分かってからは、引数は多目に作ってもはじめから全部指定するという堅い方法をたいてい取ってます。
0そうだね
プレイ済み
返信[4]
親投稿
ishさん>はじめまして。ラッパーの考えはなかったので目から鱗です。使いこなすのは相当なスキルが必要ですが。 コアさん>難しいですね・・・やはりカラー指定のような「あまり深く考えない」パラメータは外した方がいいのでしょうか。 お二方、サンプルを提示して頂きお疲れさまでございます。
0そうだね
プレイ済み
返信[5]
親投稿
けいさん>それは私も考えてましたが面倒を取るか事前にCOLOR 7などでルーチンの節約を取るか、ですよね。 私も構想中のプログラムでコンソールを多用するのでDEFで纏めてしまおうと考えてカラー情報どうしようかと悩んでおりましたので。
0そうだね
プレイ済み
返信[6]
親投稿
otta777 otta777
力業ですがパラメーターを文字列でユーザー定義命令等に渡して関数の中で解析する方法があります。スマートではないですが。
0そうだね
プレイ済み
返信[7]
親投稿
けい kei0baisoku
>みけらんジェロさん そのような用途でしたら、たぶん自分なら「あり得ない引数はデフォルト」ルールにするかなと思います。 COLOR値のような0以上の整数なら負、正の数のみの値なら0以下、文字列なら空文字列、のような感じです。制限のない整数や実数の時だけ困ります。 あと、ishさんがコメントされてる先月の私の投稿、シンプルなものからトリッキーなものまで複数の方からアドバイス頂きましたので、ご覧になると何かヒントになるものがあるかも知れません。
0そうだね
プレイ済み
返信[8]
親投稿
ottaさん>・・・あー、その手があったか。と今更ピンと来ました(文字列で扱うのではなく、nullを入れたならDEF内で15に変更するという方法ですが)。nullパラメータがあるのかどうかチェックしないと無理ですが。 それとも0を入れると15に代えてしまう方がいいのかも知れません。わざわざありがとうございます。
0そうだね
プレイ済み
返信[9]
親投稿
けいさん>なるほど。DEF内で定義する前にチェックしてエラーになる前に直してしまう、と。その方法が堅実かも知れないですね。ありがとうございます。
0そうだね
プレイ済み
返信[10]
親投稿
けい kei0baisoku
>みけらんジェロさん あ、すみません。何かのお役に立ちそうでしたら結果オーライなのですが、間違って伝わったかもと思いましたので念のため補足致します(´ω`) ~値を指定したい時~ CMDA 7 CMDB 20,15 ~デフォルト値に任せたい時~ CMDA -1 CMDB -1,-1 DEF CMDB A0, A1 IF A0<0 THEN A0=デフォルト値 IF A1<0 THEN A1=デフォルト値 :
1そうだね
プレイ済み
返信[11]
親投稿
多少趣旨からは外れますが、カラー値の例ならグローバル変数でカラー値を指定させる手もあります。 デフォルトに戻すのに再度グローバル変数を書き換える必要はありますが、一度別の色を指定したらしばらくその色を使いたいケースが多い文字色なら、むしろ便利かもしれません。 VAR FONT_COLOR% = 15 DEF CONSOLE_FUNC PARAM_A  COLOR FONT_COLOR%   : 他スロットからも関数を利用する場合はイニシャライザとgetter/setter関数も用意しておくと上手く行きます。 自分が昨日公開したライブラリでも、他スロットから利用する前提でイニシャライザとgetter/setter関数を用意しています(宣伝)。
1そうだね
プレイ済み