○わかりやすいプログラムを構築するために
モジュールの書き方、処理の順番と使用法
モジュールの使い所
ポク太郎です。
コンピュータに意味を伝えるために“こう指令します”と決められた部分があります。つまり、ルール。
そこをしっかり把握していないと、意味不明なエラーで右往左往。ですので防備録として、関数・プロシージャ・モジュールの書き方や、処理の順番と使用法などをまとめて明確にしておきたいと思います。
Functionの書き方と使用法
関数FUNCTION | |
関数とは 引数を渡せて、戻り値を返せる処理の塊。ローカル変数を内部で宣言できる。 | |
構文: FUNCTION 関数名(引数1,引数2,…,引数n) (色んな処理) RESULT=ほにゃらら FEND |
以下のように書いた場合、コンピュータは1~6行目を実行して終了します。2行目で関数が呼び出されていますが、処理の順番は、「2行目の実行」=「9、10行目の実行」です。
1 2 3 4 5 6 7 8 9 10 11 | FOR i=0 TO 10 n=関数名(引数1,引数2,…,引数n) IF n=(何か) (色んな処理) ENDIF NEXT FUNCTION 関数名(引数1,引数2,…,引数n) |
関数部分を別ファイルにするには、以下のようにします。
メインプログラムの先頭でCALL “関数のあるファイル名“とすることで、関数のあるファイルを取り込んで実行します。メインプログラムを実行すると、1行目から開始し、7行目まで実行すると終了します。メインプログラム3行目で関数が呼び出されてますが、処理の順番は、「3行目の実行」=「部品.uws内の2、3行目の実行」です。
1 2 3 4 5 6 7 | CALL “部品.uws“ FOR i=0 TO 10 n=関数名(引数1,引数2,…,引数n) IF n=(何か) (色んな処理) ENDIF NEXT |
1 2 3 4 | FUNCTION 関数名(引数1,引数2,…,引数n) (色んな処理) RESULT=ほにゃらら FEND |
別フォルダの部品ファイルを指定する方法はこちらの記事([UWSC]関数の定義と呼び出し方[使い方まとめ])をご参考に。
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行目のように“モジュール名.関数名()”と.(ピリオド)で区切って指定します。(ただし、モジュール内の関数から同一モジュール内の関数を呼び出す場合は、“関数名()”のみで指定)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | FOR i=0 TO 10 n=モジュール名.関数名(引数1,引数2,…,引数n) IF n=(何か) (色んな処理) ENDIF NEXT MODULE モジュール名 FUNCTION 関数名(引数1,引数2,…,引数n) |
モジュール部分を別ファイルにするには、以下のようにします。
メインプログラムの先頭でCALL “モジュールのあるファイル名“とすることで、モジュールのあるファイルを取り込んで実行します。メインプログラムを実行すると、1行目から開始し、7行目まで実行すると終了します。メインプログラム3行目でモジュール内の関数が呼び出されてますが、処理の順番は、「3行目の実行」=「部品.uws内の2、3、6、7行目の実行」です。
1 2 3 4 5 6 7 | CALL “部品.uws“ FOR i=0 TO 10 n=モジュール名.関数名(引数1,引数2,…,引数n) IF n=(何か) (色んな処理) ENDIF NEXT |
1 2 3 4 5 6 7 8 9 | MODULE モジュール名 PUBLIC pi=3.14159265359 PUBLIC et=2.71828182846 FUNCTION 関数名(引数1,引数2,…,引数n) |
別フォルダの部品ファイルを指定する方法はこちらの記事([UWSC]関数の定義と呼び出し方[使い方まとめ])をご参考に。
Moduleの使い所
ではモジュールは?
以下が例です。面積の公式を一まとめにしたモジュールです。このように似通った意味の関数群をグローバル変数付で一まとめにすることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 |
プログラムが大きくなってくると、面倒なことが起きてきます。
・どの機能で使用するためのグローバル変数なのか分からなくなる
・関数が大きくなり、その関数専用の別関数を作りたくなる
など。
なので、
⇒共通の意味・目的の関数群をモジュールで一塊に。
筆者も使いこなせていませんが、構造的に作り上げるために是非活用したい機能です。
○わかりやすいプログラムを構築するために
モジュールの書き方、処理の順番と使用法
モジュールの使い所
コメント