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つと限定される訳ではありません。

例えば、下でもOK。わかりやすければいいんです。

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

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

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の先頭は、

//部品を使用したいプログラムのソースファイル

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

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

CALL文を複数行書けば複数ファイルCALL可能。

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

関数を別フォルダに置く場合のCALL文パス指定

ここは関数群を記述したファイルの置き場所と指定方法の話。

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

部品ファイル.uws”が各関数を書いたファイル。

メインプログラム.uws”上に書くCALL文のファイル指定は“メインプログラム.uws”から見てどこ?という書き方です。

以下例でのCALL文記述方法は青色黄色がフォルダのつもり。UWSCフォルダ中にプログラムフォルダ部品フォルダがそれぞれ入った様子を表記したつもりでいます。

メインプログラムと同じ位置に置く

メインプログラムと同じ位置に置く
メインプログラム.uwsへの記述方法)CALL 部品ファイル.uws
UWSC
フォルダ
プログラムフォルダ メインプログラム.uws
部品ファイル.uws
部品フォルダ

メインと同じ位置のフォルダ内に置く

メインと同じ位置のフォルダ内に置く
メインプログラム.uwsへの記述方法)CALL 部品フォルダ/部品ファイル.uws
UWSC
フォルダ
メインプログラム.uws
プログラムフォルダ
部品フォルダ 部品ファイル.uws

メインと部品のあるフォルダを並べて置く

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

UWSCの便利な記述方法の話題
配列を関数の引数・戻値に使用【使い方まとめ】 関数の定義と呼び出し方【使い方まとめ】 関数とモジュールの書き方・使用法【使い方まとめ】
本記事の内容は以下でした。
○わかりやすいプログラムを構築するために

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

コメント

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