ポク太郎です。
コンピュータに意味を伝えるには“こう指令する”と決められた部分があります。つまり、ルール。
どんなに眉間にシワを寄せてパソコンを睨み付けても、知らん顔どころか気付いてももらえません。よく勘違いしますが、ルールを守るしか命令を聞かせられる術がないのです。
そこしっかり把握していないと意味不明なエラーで右往左往→防備録として、関数・プロシージャ・モジュールの書き方や、処理の順番と使用法をまとめて明確にしておきます。
Functionの書き方と使用法
関数FUNCTION | |
関数とは
引数を渡せて、戻り値を返せる処理の塊。ローカル変数を内部で宣言できる。
|
|
構文:
FUNCTION 関数名(引数1,引数2,…,引数n)
(色んな処理) RESULT=ほにゃらら FEND |
以下のように書いた場合、コンピュータは1~6行目を実行して終了します。2行目で関数が呼び出されていますが、処理の順番は、「2行目の実行」=「9、10行目の実行」です。
FOR i=0 TO 10
n=関数名(引数1,引数2,…,引数n)
IF n=(何か)
(色んな処理)
ENDIF
NEXT
FUNCTION 関数名(引数1,引数2,…,引数n)
(色んな処理)
RESULT=ほにゃらら
FEND
上記は1ファイルにメインと関数を書いた場合。
下記は関数部分を別ファイルにした場合。
メインプログラムの先頭でCALL “関数のあるファイル名“とすることで、関数のあるファイルを取り込んで実行。
メインプログラム.uwsは、
CALL "部品.uws"
FOR i=0 TO 10
n=関数名(引数1,引数2,…,引数n)
IF n=(何か)
(色んな処理)
ENDIF
NEXT
部品.uwsは、
FUNCTION 関数名(引数1,引数2,…,引数n)
(色んな処理)
RESULT=ほにゃらら
FEND
メインプログラムを実行すると、1行目から開始し、7行目まで実行すると終了します。
メインプログラム3行目で関数が呼び出されてますが、処理の順番は、「3行目の実行」=「部品.uws内の2、3行目の実行」です。
別フォルダの部品ファイルを指し示す方法はこちら(関数ファイルを別フォルダに置く【使い方まとめ】)をご参考に。
Procedureの書き方と使用法
プロシージャPROCEDURE | |
プロシージャとは
引数を渡せて、戻り値を返せない処理の塊。ローカル変数を内部で宣言できる。
|
|
構文:
PROCEDURE プロシージャ名(引数1,引数2,…,引数n)
(色んな処理) FEND |
関数FUNCTIONと同様です。
Moduleの書き方と使用法
モジュールMODULE | |
モジュールとは
複数のグローバル変数、関数、プロシージャを一塊にしたブロック。内部の関数、プロシージャ内では通常と同様にローカル変数を宣言できる。
|
|
構文:
MODULE モジュール名
PUBLIC 変数1 FUNCTION 関数1名(引数1,引数2,…,引数n) (色んな処理) RESULT=ほにゃらら FEND PROCEDURE プロシージャ1名(引数1,引数2,…,引数n) (色んな処理) RESULT=ほにゃらら FEND ENDMODULE |
以下のように書いた場合、コンピュータは1~6行目を実行して終了します。2行目でモジュール内の関数が呼び出されますが、処理の順番は「2行目の実行」=「9、10、13、14行目の実行」。
モジュール内の関数を呼び出す際には、2行目のように“モジュール名.関数名()”と.(ピリオド)で区切って指定。
これがモジュールを含むプログラム。
FOR i=0 TO 10
n=モジュール名.関数名(引数1,引数2,…,引数n)
IF n=(何か)
(色んな処理)
ENDIF
NEXT
MODULE モジュール名
PUBLIC pi=3.14159265359
PUBLIC et=2.71828182846
FUNCTION 関数名(引数1,引数2,…,引数n)
(色んな処理)
RESULT=ほにゃらら
FEND
ENDMODULE
上記は1ファイルにメインとモジュールを書いた場合。
下記はモジュール部分を別ファイルにした場合。
メインプログラムの先頭でCALL “モジュールのあるファイル名“とすることで、モジュールのあるファイルを取り込んで実行。
メインプログラム.uwsは、
CALL "部品.uws"
FOR i=0 TO 10
n=モジュール名.関数名(引数1,引数2,…,引数n)
IF n=(何か)
(色んな処理)
ENDIF
NEXT
部品.uwsは、
MODULE モジュール名
PUBLIC pi=3.14159265359
PUBLIC et=2.71828182846
FUNCTION 関数名(引数1,引数2,…,引数n)
(色んな処理)
RESULT=ほにゃらら
FEND
ENDMODULE
メインプログラムを実行すると、1行目から開始し、7行目まで実行すると終了します。
メインプログラム3行目でモジュール内の関数が呼び出されてますが、処理の順番は、「3行目の実行」=「部品.uws内の2、3、6、7行目の実行」です。
別フォルダの部品ファイルを指し示す方法はこちら(関数ファイルを別フォルダに置く【使い方まとめ】)をご参考に。
Moduleの使い所
ではモジュールは?
以下が例です。面積の公式を一まとめにしたモジュールです。このように似通った意味の関数群をグローバル変数付で一まとめにすることができます。
MODULE menseki
PUBLIC pi=3.14159265359
FUNCTION 4kaku(teihen,takasa)
RESULT=teihen*takasa
FEND
FUNCTION 3kaku(teihen,takasa)
RESULT=4kaku(teihen,takasa)/2
FEND
FUNCTION daikei(jotei,katei,takasa)
RESULT=3kaku(jotei+katei,takasa)
FEND
FUNCTION en(r)
RESULT=pi*r*r
FEND
ENDMODULE
プログラムが大きくなってくると、面倒なことが起きてきます。
・どの機能で使用するためのグローバル変数なのか分からなくなる
・関数が大きくなり、その関数専用の別関数を作りたくなる
など。
なので、
⇒共通の意味・目的の関数群をモジュールで一塊に。
筆者も使いこなせていませんが、構造的に作り上げるために是非活用したい機能です。
関数の引数・戻値に配列変数 |
関数の定義と呼び出し方【使い方まとめ】 | 関数とモジュールの書き方・使用法【使い方まとめ】 |
○わかりやすいプログラムを構築するために
モジュールの書き方、処理の順番と使用法
モジュールの使い所
コメント