HSP3 プログラミングの基礎U | |
(4) ユーザ定義 2
◎ユーザ定義関数
サインやコサインの値を得るsin関数、cos関数のような関数をプログラマ自身が定義(作成)することができる。これを「ユーザ定義関数」という。
命令と関数の違いは、命令は「ある働きを提供するもの」であり、関数は「ある計算をして値を返却するもの」である。
関数の名前は、自由につけることができる。ただし、重複しないこと。
#defcfunc 関数の名前 パラメータ
関数のためのプログラム
return 返却値
関数を使う前に定義する必要がある。
パラメータは省略できる。指定するパラメータのタイプには以下のものがある。ユーザ定義命令と同じように、モジュール(#module 〜 #global)にして変数名やラベル名を独立させることができる。
int 整数値 var 変数(配列なし) double 実数値 label ラベル str 文字列 local ローカル変数 array 変数(配列あり)
円の面積を求める関数func1を作成する。パラメータは実数の半径とする。
goto *start #defcfunc func1 double hankei ;関数定義 s = hankei * hankei * 3.14151 ;円の面積 return s ;返却値 *start r = 10 mm = func1(r) ;関数使用1 mes "円の面積は、" + mm + " です。" mes "円の面積は、" + func1(r*2) + " です。" ;関数使用2 stop
「円の面積は、314.151000 です。」、「円の面積は、1256.604000 です。」と2行表示される。
関数定義のプログラムでは、円の面積が返却値である。返却値はreturn命令で指定する。return命令で返却できる値はひとつだけである。
円の面積を変数sに格納しないで、「return hankei * hankei * 3.14151」と書くこともできる。
関数はsin関数などと同じように、パラメータを( )内に書く。
関数使用1では、半径r(=10)の面積を求めて変数mmに格納している。
関数使用2では、半径r*2(=20)の面積を求めてmes命令で表示している。
四角形の面積を求める関数func2を作成する。パラメータは縦と横の長さ(実数)とする。
goto *start #defcfunc func2 double tate, double yoko ;関数定義 return tate * yoko ;返却値 *start x = 11 y = 22 mm = func2(x, y) ;関数使用 mes "面積は、" + mm + "です。" mes "面積は、" + func2(1.2*x, 1.2*y) + "です。" ;関数使用 stop
「面積は、242.000000 です。」、「面積は、348.480000 です。」と2行表示される。
パラメータが複数必要な場合は、カンマ(,)で区切って書く。
金額「¥1234円」のように前後に¥と円をつけた文字列を返却する関数func3を作成する。パラメータは整数値とする。
goto *start #defcfunc func3 int yen ;関数定義 return "\\" + yen + "円" ;返却値 *start m = 12345 s = func3(m) ;関数使用 mes s mes func3(m * 2) ;関数使用 stop
「\12345円」、「\24690円」と2行で表示される。
ユーザ定義命令もユーザ定義関数も変数名やラベル名の重複による不具合が起こらないように、#module 〜 #globalでモジュール化する方が良い。 |
ここまでの3つのサンプルでは、変数名は重複していないが、定義部分をモジュール化すると次のようになる。#module 〜 #globalではさむだけである。
#module #defcfunc func1 double hankei ;関数定義 s = hankei * hankei * 3.14151 ;円の面積 return s ;返却値 #global
#module #defcfunc func2 double tate, double yoko ;関数定義 return tate * yoko ;返却値 #global
#module #defcfunc func3 int yen ;関数定義 return "\\" + yen + "円" ;返却値 #global
2006 © Hiroshi Masuda |