演習 1.6: 条件ステートメント
条件ステートメントを使用すると、ロジック・パーツで、所定の条件に応じて、1 つのアクションと複数のアクションのいずれかが選択されるようにすることができます。他のプロシージャー型プログラミング言語に精通しているユーザーは、おそらく、EGL で利用できる以下の条件ステートメントの使用方法について理解されているものと思われます。
if
if 文は EGL で最も単純な条件ステートメントです。if 文では、論理式の評価が行われ、その式が true である場合は、if 文内のコードが実行されます。その他の場合、if 文内のコードは実行されません。以下に、if 文の例を示します。
if (myVariable1 == myVariable2)
//This code executes only if myVariable1 is equal to myVariable2
myVariable1 = 5;
myVariable3 = 10;
end
if else
状況に応じて、if 文に else 文を追加することもできます。else 文内のコードは、if 文内の論理式が false の場合にのみ実行されます。以下に、else 文を含む if 文の例を示します。
if (myVariable1 == myVariable2)
//This code executes only if myVariable1 is equal to myVariable2
myVariable1 = 5;
myVariable3 = 10;
else
//This code executes only if myVariable1 is not equal to myVariable2
myFunction();
myVariable2 = 20;
end
if 文は、任意のレベルにネストすることができます。if 文をネストすると、以下の例のような、より複雑なロジックを実行することができます。
if (myVariable1 > myVariable2)
myMessage = "myVariable1 is greater than myVariable2";
else
if (myVariable1 < myVariable3)
myMessage = "myVariable1 is less than myVariable2";
else
myMessage = "myVariable1 and myVariable2 are equal";
end
end
case
1 つの if else 文で選択肢として使用できる EGL コードは 2 つだけです。1 つは論理式が true である場合に選択され、もう 1 つは論理式が false である場合に選択されます。コードにおける選択肢を増やすための 1 つの方法として、case 文を使用することが挙げられます。case 文は、式の評価を行い、選択可能な一連の値から一致するものを探します。以下に、case 文の例を示します。
case (myCharVariable)
when ("A")
myMessage2 = "myCharVariable equals A";
when ("B")
myMessage2 = "myCharVariable equals B";
otherwise
myMessage2 = "myCharVariable is not A or B";
end
条件ステートメントについて詳しくは、ヘルプ・トピック「if else 」および「case」を参照してください。
論理演算子と式
条件ステートメントの論理式を作成するには、2 つの変数を比較したり、条件ステートメントの条件を設定したりする論理演算子が必要になります。EGL で利用できる一般的な演算子の一部を以下に示します。
- ==
- 等号 演算子は、2 つのオペランドを比較して、それらが等しい場合は true を戻します。
- >
- 大なり 演算子は、2 つのオペランドを比較して、左辺のオペランドが右辺のオペランドよりも大きい場合は true を戻します。
- >=
- 大なりイコール 演算子は、2 つのオペランドを比較して、左辺のオペランドが右辺のオペランドよりも大きいかまたは等しい場合に true を戻します。
-
- <
- 小なり 演算子は、2 つのオペランドを比較して、左辺のオペランドが右辺のオペランドよりも小さい場合に true を戻します。
- <=
- 小なりイコール 演算子は、2 つのオペランドを比較して、左辺のオペランドが右辺のオペランドよりも小さいかまたは等しい場合に true を戻します。
- !=
- 非等号 演算子は、2 つのオペランドを比較して、それらが等しくない場合は true を戻します。
- &&
- and 演算子は、2 つの式を結合して、それらの式が両方とも true である場合に true を戻します。
- ||
- or 演算子は、2 つの式を結合して、それらの式のいずれかまたは両方が true である場合に true を戻します。
- !
- not 演算子は、直前の式が false である場合にのみ、true を戻します。not 演算子は括弧内の式の前に記述する必要があります。
これらの演算子およびその使用方法について詳しくは、ヘルプ・トピック「論理式」を参照してください。このトピックには論理式の例も紹介されています。
Web ページでの条件ステートメントの利用
以下のステップでは、条件ステートメントを使用してユーザー入力に応答する Web ページを作成します。
- プロジェクト・エクスプローラー・ビューで、「EGLWeb」プロジェクトをクリックして選択する。
- メニュー・バーから「ファイル」>「新規」>「Faces JSP ファイル」をクリックする。新規 Faces JSP ファイル・ウィザードが開きます。
- 「名前」フィールドに次のファイル名を入力する。
IfTest
- 「ページ・テンプレートから作成」チェック・ボックスを選択する。
- 「次へ」をクリックする。
- 「ページ・テンプレート・タイプ」の下で、「ユーザー定義ページ・テンプレート」をクリックする。
- 「サムネール」の下で「A_gray.htpl」テンプレートをクリックする。
- 「終了」をクリックする。新規ファイルがプロジェクトに追加され、そのファイルがエディターで開きます。
- 新規ファイルで、デフォルト・テキストの「Place your page content here.」を削除する。
- 削除したテキストの代わりに、Testing conditional statements と入力して、Enter キーを押す。
- ページを右クリックして、「ページ・コードの編集」をクリックする。ページ・コード・ファイルが開きます。
- ページ・コード・ファイル内のすべてのコードを削除して、代わりに以下のコードを入力する。
package pagehandlers;
PageHandler IfTest
{view="IfTest.jsp", onPageLoadFunction=onPageLoad}
//Variables
a int {value=10};
b int {value=20};
c int {value=30};
msg char(50);
Function onPageLoad()
end
Function testSimpleIf()
if (a > b)
msg = "a > b";
else
if (b > a)
msg = "b > a";
else
msg = "b = a";
end
end
end
Function compoundAnd()
if ((a > b) && (a > c))
msg = "a is highest value";
else
if ((b > a) && (b > c))
msg = "b is highest value";
else
if ((c > a) && (c > b))
msg = "c is highest value";
else
msg = "Two or three values are equal.";
end
end
end
end
Function compoundOr()
if ((a > b) || (a > c))
msg = "a > b or a > c";
else
if ((b > a) || (b > c))
msg = "b > a, or b > c";
else
if ((c > a) && (c > b))
msg = "c is highest (a and b are equal)";
else
msg = "All values are equal";
end
end
end
end
Function testNotEqual()
if (a != b)
msg = "a is not equal to b";
else
msg = "a equals b";
end
end
end
以下は、ここで追加したコードに関する技術面での注釈です。
- この PageHandler は、ページ上のフィールドにバインドされる 3 つの int 変数を作成します。これらの 3 つの変数は、4 つの関数に基づいて異なる方法で比較されます。
- msg char 変数は、比較の結果を示すメッセージを保持します。
- この PageHandler に追加された 4 つの関数は、3 つの変数を異なる方法で比較し、msg 変数にメッセージを書き込みます。
- ファイルを保存して閉じる。
- IfTest.jsp ページに戻る。
- ページ・データ・ビューで 4 つの変数をすべて選択して、ページ内のテキスト、「Testing conditional statements」の下へドラッグする。「挿入のコントロール」ウィンドウが開きます。
- 「既存レコードの更新」をクリックする。
- msg 変数について、「コントロール・タイプ」の下で「出力フィールド (Output field)」を選択する。その他の変数は「入力フィールド (Input field)」のままにします。
「挿入のコントロール」ウィンドウは次のようになります。

- 「オプション」をクリックする。
- 「オプション」ウィンドウで、「実行ボタン」チェック・ボックスと「削除ボタン」チェック・ボックスをクリアする。
- 「OK」をクリックする。
- 「終了」をクリックする。3 つの int 変数に対応する入力フィールドと 1 つの char 変数に対応する出力フィールドがページ上に表示されます。
- 新規フィールドの下をクリックして Enter キーを押し、ブランク行を追加する。
ボタンの追加と関数へのバインド
このページには、PageHandler 内の 4 つの関数のそれぞれにバインドする 4 つのボタンが必要です。
- パレット・ビューの「HTML タグ」ドロワーから、「表 (Table)」をページの入力フィールドおよび出力フィールドの下へドラッグする。「表の挿入」ウィンドウが開きます。
- 「表の挿入」ウィンドウで、「行数 (Rows)」フィールドおよび「列数 (Columns)」フィールドに、数値 2 を入力する。
- 「OK」をクリックする。
新規の表がページ上に作成されます。この表は、最初は非常に小さいものですが、ボタンに合わせて大きくなります。
- パレット・ビューの「Faces コンポーネント」ドロワーから、4 つの「コマンド - ボタン (Command - buttons)」をページの表内のそれぞれのセルへドラッグする。
- それぞれのボタンを選択し、プロパティー・ビューの「表示オプション」タブを使用して、以下の名前に変更する。
- Simple If (a compared to b)
- Compound And (a, b, and c)
- Compond Or (a, b, and c)
- If Not Equal (a compared to b)
- ページ・データ・ビューから、それぞれの関数を対応するボタンにドラッグして、PageHandler 内の 4 つの関数をページ上の 4 つのボタンにバインドする。
- testSimpleIf() 関数を「Simple If (a compared to b)」ボタンへドラッグする。
- compoundAnd() 関数を「Compound And (a, b, and c)」ボタンへドラッグする。
- compoundOr() 関数を「Compound Or (a, b, and c)」ボタンへドラッグする。
- testNotEqual() 関数を「If Not Equal (a compared to b)」ボタンへドラッグする。
ページは次のようになります。

- ページを保管する。
- ページをサーバーでテストする。値を入力フィールドに入力し、ボタンをクリックして、4 つの関数を使用してみる。
これで、「演習 1.7: ループ」を開始する準備ができました。