# ユーザ定義関数

マニュアル > 画面作成ガイド > スクリプト > スクリプトの構文 > # ユーザ定義関数 |

ユーザ定義関数

ユーザー定義関数とは、開発者が独自に作成することができる関数のことです。

ユーザー定義関数はオブジェクト毎に記述することができます。オブジェクトに記述した関数は、メソッドやプロパティと同じように他のオブジェクトから絶対パス参照 又は 相対パス参照によって呼び出して実行する事ができます。

ユーザー定義関数はfunctionキーワードの後に関数名を書き、「( )」の中に引数を「,」（カンマ）区切りで定義します。関数名や引数名は自由に名前が付けられます。そして、「return」キーワードで関数を終了させて、返値を返すことができます。

以下は、ユーザー定義関数の記述例です。

    function Total(a, b)
    {
     return a + b;
    }

この例の場合、関数名は「Total」です。aとbという2つの引数を渡すと、｢a+b｣の計算結果を返値として返します。

ユーザ定義関数の構文

ユーザー定義関数の構文は以下のとおりです。

function FunctionName(<パラメータ1>, <パラメータ2>, …<パラメータn>) { <スクリプト> return <返値>; }

1)パラメータは必要な数だけ指定する事ができます。

2)パラメータが必要ないときは省略可能ですが、関数名の後の「()」は付ける必要があります（「function FunctionName()」などとします）。

3)returnキーワードは関数を終了させて、呼び出し元に対して返値をかえす事ができます。

4)returnの返値は省略することも可能です。返値を省略した場合、関数は「return」の位置で終了します。

5)returnキーワードはスクリプト中、何個でも書くことができます。また、return自体を書かないこともできます。そのような場合、関数は最後までスクリプトを実行した時点で終了します。
例）returnが無い場合

    function SampleFunction()
    {
     //<スクリプト>
    }

例）returnが1つある場合

    function Total(a, b)
    {
        return a + b;
    }

例）returnが複数ある場合

    function ErrMessage(a)
    {
     switch (a)
     {
      case 1: return "Error1";
      case 2: return "Error2";
      case 3: return "Errro3";
      }
      return "Not Found Error code";
    }

6)パラメータの先頭に「&」を付けて記述することにより、パラメータを介して値を返すことができます（参照渡し）。
例）引数に値を返す

    function SampleFunction()
    {
     var Param;
     GetParam(Param);      //Paramには100が返る。
    }

    function GetParam(&vParam)
    {
     vParam = 100;         //引数で渡された変数に値を代入。
    }

| ユーザー関数の再帰呼び出しには対応しておりません。

| 関数名や変数名の一番先頭には数字は使用できません。また、スクリプトで予約されているforやif、オペレータで使用している「+-*/&|=<>!(),」などの文字も使用できません。

ユーザ定義関数の作成例

それでは、実際にボタンコントロールにユーザー定義関数を定義してみます。作成手順は以下のとおりです。

1.フォームにボタンコントロールを貼り付けた後、スクリプトエディタを開いて下記のOnMouseUpイベントを追加してください。

2.OnMouseUpイベントのブランケットの外にユーザー定義関数を記述してください。ここでは、以下の「Total」という関数名とします（記述する場所はOnMouseUpイベントの下あたりでOKです。関数を書く位置はどこでもかまいません）。

    function Total(a, b)
    {
    	return a + b;
    }

3.OnMouseUpイベントに、Total関数を呼びだす様に記述してください（以下の例は、OpenMsg汎用関数でTotal関数の結果を画面に表示します）。Panel Browserで実行してボタンを押すと、引数で渡した2つの数値の合計がメッセージ表示されればOKです。

    event OnMouseUp(button)
    {
    	::OpenMsg(Total(2,5));
    }

汎用ユーザー定義関数の作成例

ルートオブジェクトに定義したユーザー定義関数のことを、汎用ユーザー定義関数と呼びます。

汎用ユーザー定義関数はシステム全体から利用できる関数です。ルートメソッドと同じように、頭に「::」を付加することにより、どのオブジェクトからも呼び出すことができます。

例として、前述にて作成した「Total」関数をルートオブジェクトにコピーし、以下のように記述します。

    //rootのスクリプトに関数を定義
    function Total(a, b)
    {
    	return a + b;
    }

すると、すべてのスクリプトから以下の要領で呼び出すことが可能となります。

    event OnMouseUp(button)
    {
    	::OpenMsg( ::Total(2,5) );	//Total左横の「::」はルートのユーザー定義関数であることを示す
    }

| ルートに定義したユーザー定義関数はどのフォームやコントロールからも呼び出すことができるため、システム全体で共有したいユーザー定義関数はルートに定義すると良いでしょう。尚、既にルートメソッドとしてあらかじめ定義されている名前と同名のユーザー定義関数をルートに作成した場合、作成したユーザー定義関数の方が優先的に呼び出されるようになります。

| ルートのスクリプトを編集したい場合は、ルートオブジェクトを選択後、スクリプトエディタを開きます。 ルートオブジェクトを選択状態にするには、プロパティページのコンボボックスの右にある、以下の矢印アイコンをクリックします。 尚、すでにスクリプトエディタを開いている場合は、上記アイコンでルートを選択するだけでルートのスクリプトに切り替わります。