HSP3 プログラミングの基礎U
前へ 目次へ 次へ 

(4) ユーザ定義 2

◎ユーザ定義関数

 サインやコサインの値を得るsin関数、cos関数のような関数をプログラマ自身が定義(作成)することができる。これを「ユーザ定義関数」という。
 命令と関数の違いは、命令は「ある働きを提供するもの」であり、関数は「ある計算をして値を返却するもの」である。

#defcfunc  関数の名前 パラメータ
 関数のためのプログラム
return 返却値
 関数の名前は、自由につけることができる。ただし、重複しないこと。
 関数を使う前に定義する必要がある。
 パラメータは省略できる。指定するパラメータのタイプには以下のものがある。
int 整数値   var 変数(配列なし)
double 実数値   label ラベル
str 文字列   local ローカル変数
array 変数(配列あり)      
 ユーザ定義命令と同じように、モジュール(#module 〜 #global)にして変数名やラベル名を独立させることができる。

 

サンプル円の面積を求める関数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 

 

 

inserted by FC2 system