私はいわゆるサンデープログラマでして、画像が絡む自動化は「UWSC」を使うことしか知りません。
今日も画像に関する処理を調べていたら、定型処理を別ファイルで管理できることを知りました。
例えば、画像が表示されるまで待機するコードは3行くらいあります。
それを別ファイルで管理すると、たった1行でOK。
画像が表示されるまで待つ処理が増えれば増えるほど、効果があります。
とても勉強になったので、その内容をまとめてみました。
UWSCで定型処理を別ファイルで管理するメリットは?
- コードが見やすくなる
- メンテナンスが楽
ひとつ目の「コードが見やすくなる」は前述の通り。複雑な定型処理を別ファイルで管理すれば、コードの記述量が減ります。
ふたつ目の「メンテナンスが楽」は、定型処理の仕様が変わったとき、別ファイルだけ修正すれば良いので、手間が大幅に省けます。
どうやって別ファイルで管理するの?
いわゆるクラス化をします。
具体的には「Class ~ EndClass」を使って、別ファイルに定型処理を記述します。
step
1定型処理を記述する「.uws」のファイルを作る
通常のuwsファイルと同じように新規作成をし、先頭と末尾を「Class ~ EndClass」で囲います。
仮にファイル名を「Routine.uws」とし、そこに記述するコードは次の通り。
Class クラス名
Function ファンクション名()
定型処理するコード
Result = 戻り値を指定
Fend
Procedure プロシージャー名()
定型処理するコード
Fend
EndClass
戻り値が要るなら「Function ~ Fend」、要らないなら「Procedure ~ Fend」と、使い分けます。
step
2クラス化した定型処理を呼び出す記述をする
例えば、「Test.uws」で、クラス化したファイル「Routine.uws」の処理を呼び出す場合は、次のように書きます。
Call Routine.uws
クラス名.ファンクション名()
クラス名.プロシージャー名()
ポイントは3つ。
- 先頭で「Call」を使って、クラス化したファイル名を指定すること。
- 処理は「クラス名.ファンクション名()」と、ファイル名ではなくクラス名を付けて呼び出すこと。
- クラス化したファイルと呼び出し元のファイルは、同一フォルダ内に保存すること。
クラス化したファンクションから、複数の戻り値を取得したい場合は?
戻り値を格納した配列に対して、Slice関数を使うとできます。
クラス化したファイルに記述した「Result =」の1行を次のように書き換えます。
Dim 戻り値配列[] = 戻り値1つ目,戻り値2つ目
Result = Slice(戻り値配列,0,Length(戻り値配列)-1)
そうすると、呼び出し元のファイルで戻り値が配列で取得できるようになります。
Call Routine.uws
Dim a = クラス名.ファンクション名()
Print a[0]
Print a[1]
まとめ
UWSCでも「Class ~ EndClass」を使って、いわゆるクラス化ができることが分かりました。
これから、コードすっきり、メンテナンス楽ちんのプログラミングが楽しめそうです。