続いて、(7)でボタンのアクションとして指定しているオペレーション、同様の概念である関数について見ていこう。

関数

JavaFXでは、クラスに所属しない「関数」と「オペレーション」をサポートしている。Javaでは、メソッドは必ずどこかのクラスに所属しなければならないが、ここがJavaとは異なる点だ。

まずは関数の宣言方法だ。関数の宣言は、キーワード「function」を用いて行う。関数宣言の正式な方法は以下の通りだ。

function 関数名(仮引数名:仮引数型...):戻り値型 {
   // 関数本体...
}

仮引数の型と戻り値の型は省略可能だが、そうすると関数本体における型チェックが厳密でなくなるためあまりお奨めはできない。

関数本体には、非常に限定された要素しか含むことができない。具体的には、変数の宣言と初期化、return文、関数やオペレーションの宣言といったものだ。条件分岐や繰り返しといった手続きを定義するには、すぐ後に述べるオペレーションを使用する。

関数についてまとめると以下のようになる。

// 仮引数の型、戻り値の型を全て記述した形
function add(a:Integer, b:Integer) : Integer {
   return a + b;
}

// 可能な限り型宣言を省略
function subtract(a, b) {
   return a - b;
}

// if文などが含まれているのでエラーになる
function error(a, b) {
   if (true) {
      System.out.println("この関数定義はエラー");
   }
   return a - b;
}

オペレーション

オペレーションは、関数と違い本体にどんな文でも記述できるのが特徴だ。そのため、関数よりも汎用的な用途に幅広く利用できる。 オペレーションの宣言方法はキーワード「operation」を用いて行う。オペレーションの宣言方法は以下のようになる。仮引数の型、戻り値の型が省略できるのは関数と同様だ。

operation オペレーション名(仮引数名:仮引数型...):戻り値型 {
   // オペレーション本体...
}

例を一つだけ挙げよう。

// 仮引数の型・戻り値の型を全て記述したオペレーション
operation addOrSub(a:Integer, b:Integer, add:Boolean):Integer { 
   // if文など、本体に記述できる文に制限がない
   if (add) {
      return a + b;
   } else {
      return a - b;
   }
}

このサンプルのまとめ

非常に単純なサンプルであったが、さまざまな要素を紹介した。ここで説明した要素は、あらゆるJavaFXアプリケーションで頻繁に使用するものばかりである。しっかりと理解しておきたい。