[UWSC]関数の定義と呼び出し方[使い方まとめ]

UWSCという開発ソフトを使って作り上げる作業を実際にやってみるカテゴリ。準備した自作関数や使い方、トラブルを記事にしていきます。得るものがあれば幸いです。
関数を定義し呼び出すための手順をまとめました。関数を別ファイルに置くことも可能です。

記事の内容
○わかりやすいプログラムを構築するために

関数とプロシージャなどの各部品
関数やモジュールなどの部品ファイルを取り込む方法

ポク太郎です。

このブログで散々自作関数を作成しているのですが、定義の仕方や呼び出し方などをまとめて、記事にしておきます。(記事にしておかないといけないと思いつつ失念しておりました。)

関数とモジュール、その他

プログラムを組み上げる際に重要なのは、色んな場面で使い回し可能な“一部品”を作成し、それを組み立てて処理を実現するように努めます。こうすることで、修正の際にその“一部品”を修正するのみで済む、また、プログラムを見やすくできます。

このように“一部品”ごとを作り上げ、膨大なソースコードの可読性を上げるよう作り上げたプログラムが良いプログラム。

現在の開発環境は、上記のことをしやすくするための機能を大抵は標準装備しています。以下にUWSCで装備されているものをよく使う順に抜粋します。

関数FUNCTION
関数とは

引数を渡せて、戻り値を返せる処理の塊。ローカル変数を内部で宣言できる。
構文:

FUNCTION 関数名(引数1,引数2,…,引数n)
                (色んな処理)
                RESULT=ほにゃらら
FEND
プロシージャPROCEDURE(筆者は使用せず)
プロシージャとは

引数を渡せて、戻り値を返せない処理の塊。ローカル変数を内部で宣言できる。


※筆者は使用せず。すべて“関数”で作成し、RESULTでダミーの変数(0とか1とか)を返しておく。特にUWSCの場合は、呼び出し側で
n=関数名(引数) とするところを、 関数名(引数) と書くと、戻り値を無視してくれるため意識する必要がないので。
構文:

PROCEDURE プロシージャ名(引数1,引数2,…,引数n)
                (色んな処理)
FEND
モジュールMODULE
モジュールとは

複数のグローバル変数、関数、プロシージャを一塊にしたブロック。内部の関数、プロシージャ内では通常と同様にローカル変数を宣言できる。
構文:

MODULE モジュール名
                PUBLIC 変数1


   FUNCTION 関数1名(引数1,引数2,…,引数n)
                (色んな処理)
                RESULT=ほにゃらら
   FEND


   PROCEDURE プロシージャ1名(引数1,引数2,…,引数n)
                (色んな処理)
   FEND
ENDMODULE
クラスCLASS
クラスとは

他の環境ではクラスというのは、クラスからパラメータ値などの異なるインスタンス(実体)を生み出すことのできる元。UWSCのクラスは異なるとの情報があり、まだよくわからず。
構文:

CLASS クラス名
                PUBLIC 変数1


   FUNCTION 関数1名(引数1,引数2,…,引数n)
                (色んな処理)
                RESULT=ほにゃらら
   FEND


   PROCEDURE プロシージャ1名(引数1,引数2,…,引数n)
                (色んな処理)
   FEND
ENDCLASS

上記を使って各“一部品”を作っていきます。

CALLで関数のあるファイルを取り込む

見やすくするための“一部品”なので、1つのテキストファイル内に納めないといけないものではありません。

例えば、

ファイルA … 文字列の検索や切り出しなど、文字列を扱う関数
ファイルB … 画像認識に関連する関数
ファイルC … 別の人が作った関数

このようにまとめてもOK。わかりやすければいいんです。

関数やモジュールなどを集めた“部品ファイル.uws”が以下だったとします。

部品ファイル.uws
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FUNCTION 関数名(引数1,引数2,…,引数n)
            (色々な処理)
            RESULT=ほにゃらら
FEND
PROCEDURE 関数名(引数1,引数2,…,引数n)
            (色々な処理)
FEND
MODULE モジュール名
   PUBLIC 変数

   FUNCTION 関数2(引数1,引数2,…,引数n)
            (色々な処理)
            RESULT=1
   FEND
ENDMODULE

メインプログラム.uws”の先頭で、使用したい関数のある“部品ファイル.uws”をCALLします。

メインプログラム.uws
1
2
3
//部品を使用したいプログラムのソースファイル

CALL 部品ファイル.uws      //部品呼び出し

こうすることで、“メインプログラム.uws”を実行した際に、“部品ファイル.uws”中の関数が取り込まれるようになります。

上記は、“メインプログラム.uws”と“部品ファイル.uws”が同じフォルダ内にある場合です。次の項では、フォルダ構成も整理してわかりやすい管理を目指します。

関数ファイルを別フォルダに置く

CALL文後ろのファイル指定は相対パスも使用できるので、以下のようなフォルダ構成にすることも可能です。

表でフォルダ構成を、黄色がフォルダのつもり。

部品ファイル.uws”が各関数の置かれたファイル。CALL文を書くのは“メインプログラム.uws”上。

ですので、“メインプログラム.uws”から見てどこ?という指定をします。その指定の記述方法が青色

部品ファイルの指定の仕方
・メインプログラムと同じ位置に置く
CALL 部品ファイル.uws
UWSC
フォルダ
プログラムフォルダメインプログラム.uws
部品ファイル.uws
・メインプログラムと同じ位置のフォルダ内に置く
CALL 部品フォルダ/部品ファイル.uws
UWSC
フォルダ
部品フォルダ部品ファイル.uws

メインプログラム.uws
・メインプログラムのあるフォルダと部品のあるフォルダを並べて置く
CALL ../部品フォルダ/部品ファイル.uws
※「../」←一つ上位のディレクトリを指定する記述方法です。
UWSC
フォルダ
部品フォルダ部品ファイル.uws
プログラムフォルダメインプログラム.uws

記事の内容は伝わりましたでしょうか。
○わかりやすいプログラムを構築するために

関数とプロシージャなどの各部品
関数やモジュールなどの部品ファイルを取り込む方法

コメント

タイトルとURLをコピーしました