|
変数が違う、似たような処理を多数行うスクリプトを作ろうとしております。 何となくFunctionを使って簡略化できそうな気がするのですが、頭が硬いのかどうにも上手い方法を見つけられません。何かヒントでも頂ければ幸いです。
///////////////////////////////////////// // main.UWS ////////////////////////////////////////
// 外部スクリプトの読み込み Call sub.UWS
// 変数の初期化 Public a=0; Public b=0; Public c=0; Public d=0
// ここには画像をchkimgで認識して、画像がある場合は ax = G_IMG_X, ay = G_IMG_Y, bx = // として変数に座標を代入しておくスクリプトがあります。
・ ・ ・
// 処理開始 // ax,bx,cx,dxのどれか一つでも0ではない場合、test関数を実行 ifb ax <> 0 OR bx <> 0 OR cx <> 0 dx <> 0 test() endif ・ ・ ・ // mainここまで ///////////////////////////
///////////////////////////////////////// // sub.UWS ////////////////////////////////////////
// test関数 Procedure test() IFB ax<>0 and bx<>0 and cx<>0 and dx<>0 BTN(LEFT, CLICK, ax+30, a+40) Sleep(1) BTN(LEFT, CLICK, bx+30, by+40) Sleep(1) BTN(LEFT, CLICK, cx+30, cy+40) Sleep(1) BTN(LEFT, CLICK, dx+30, dy+40) Sleep(1) Elseif elseif ax<>0 and bx<>0 and cx<>0 and dx=0 BTN(LEFT, CLICK, ax+30, ay+40) Sleep(1) BTN(LEFT, CLICK, bx+30, by+40) Sleep(1) BTN(LEFT, CLICK, cx+30, cy+40) Sleep(1) ・ ・ ・ elseif ax<>0 and bx<>0 and cx=0 and dx=0 BTN(LEFT, CLICK, ax+30, ay+40) Sleep(1) BTN(LEFT, CLICK, bx+30, by+40) Sleep(1) FEnd ・ ・ ・ // subここまで ///////////////////////////
上記のsub.UWSのtest()が、変数を変えてtest2()、test3()...とこれも沢山あります。 この沢山あるtest()達をもっと簡単にまとめるにはどのように記述したら宜しいでしょうか。
|
No.247 2014/10/10(Fri) 16:00:41
|
☆ Re: ユーザー定義関数について / しかも |
|
|
追記です。
上部、Public a=0; Public b=0; Public c=0; Public d=0は ax,bx,cx,dxと読み替えて下さい。 また、elseifが続いていたりしますが誤植です。 申し訳ございません。
|
No.248 2014/10/10(Fri) 16:03:27
|
|
☆ Re: ユーザー定義関数について / stuncloud |
|
|
変数が違う、がどう違うのかわかりませんが… 異なる部分は引数で渡すというのが常套手段ですね test2やtest3がどうなるのかいまいちイメージできないので、以下は具体策ではありません …が、何かしらのヒントにはなると思います
// 異なる条件を与えて実行する test(ax, bx, cx, dx) test(ay, by, cy, dy)
Procedure test(変数1, 変数2, 変数3, 変数4) if 変数1 <> 0 and 変数2 <> 0 and 変数3 <> 0 and 変数4 <> 0 then // 略 endif fend
|
No.250 2014/10/10(Fri) 16:30:32
|
|
☆ Re: ユーザー定義関数について / しかも |
|
|
stuncloud 様
拙く分かり辛い質問に的確なアドバイスありがとうございました!! 目が覚めました! お陰様でいくつも羅列していたものを簡略化できました。 本当にありがとうございます。
|
No.251 2014/10/10(Fri) 16:44:25
|
|
☆ Re: ユーザー定義関数について / stuncloud |
|
|
なんか全然説明になってない気がしてきたのでもう少し書きます
もともとのイメージはこんな感じです
もともと.uws ---------------------------------- public a = "a", b = "b", c = "c"
test1() test2() test3()
// ほとんど同じ、変数が違う関数がいくつかある procedure test1() msgbox(a) fend procedure test2() msgbox(b) fend procedure test3() msgbox(c) fend ----------------------------------
これをすっきりさせるには 「変数が違う」部分を引数でまとめてしまいます そして、関数実行時にその「変数が違う」部分を引数として渡します
すっきり.uws ---------------------------------- dim a = "a", b = "b", c = "c"
test(a) test(b) test(c)
procedure test(msg) msgbox(msg) fend ----------------------------------
これで、結果は同じですが関数は1つで済ませられました
|
No.252 2014/10/10(Fri) 16:48:47
|
|
☆ Re: ユーザー定義関数について / stuncloud |
|
No.253 2014/10/10(Fri) 16:49:49
|
|
☆ Re: ユーザー定義関数について / しかも |
|
|
stuncloud 様
具体的かつ完璧なサンプルまで頂戴してありがとうございます! 今現在作業中の書き方が間違って無いという保証を頂きました。 本当にありがとうございます!
|
No.261 2014/10/11(Sat) 14:37:36
|
|