コード
次の例では、CFScript の次の機能を使用しています。
- 変数への代入
- 関数呼び出し
- For ループ
- If-else ステートメント
- WriteOutput 関数
- Switch ステートメント
この例では、cfscript 以外の ColdFusion タグをまったく使用せずに、CFScript のみを使用しています。ここでは、コースの受験者の構造体を作成します。この構造体には、合格した学生と不合格の学生の 2 つの配列が含まれています。また、不合格の学生の一部(全員ではない)について、その不合格理由を保持する構造体も作成します。そして、合格した受験者を表示した後に、不合格の学生とその不合格理由を表示します。
<head>
<title>CFScript Example</title>
</head>
<body>
<cfscript>
// 変数を設定
acceptedApplicants[1] = "Cora Cardozo";
acceptedApplicants[2] = "Betty Bethone";
acceptedApplicants[3] = "Albert Albertson";
rejectedApplicants[1] = "Erma Erp";
rejectedApplicants[2] = "David Dalhousie";
rejectedApplicants[3] = "Franny Farkle";
applicants.accepted=acceptedApplicants;
applicants.rejected=rejectedApplicants;
rejectCode=StructNew();
rejectCode["David Dalhousie"] = "score";
rejectCode["Franny Farkle"] = "too late";
// 合格した受験者をソートして表示
ArraySort(applicants.accepted,"text","asc");
WriteOutput("The following applicants were accepted:<hr>");
for (j=1;j lte ArrayLen(applicants.accepted);j=j+1) {
WriteOutput(applicants.accepted[j] & "<br>");
}
WriteOutput("<br>");
// 不合格の受験者をソートし、理由の情報を付けて表示
ArraySort(applicants.rejected,"text","asc");
WriteOutput("The following applicants were rejected:<hr>");
for (j=1;j lte ArrayLen(applicants.rejected);j=j+1) {
applicant=applicants.rejected[j];
WriteOutput(applicant & "<br>");
if (StructKeyExists(rejectCode,applicant)) {
switch(rejectCode[applicant]) {
case "score":
WriteOutput("Reject reason: Score was too low.<br>");
break;
case "late":
WriteOutput("Reject reason: Application was late.<br>");
break;
default:
WriteOutput("Rejected with invalid reason code.<br>");
} // switch ステートメントの終わり
} // if ステートメントの終わり
else {
WriteOutput("Reject reason was not defined.<br>");
} // else ステートメントの終わり
WriteOutput("<br>");
} // for ステートメントの終わり
</cfscript>
コードの説明
このコードについて、次の表で説明します。
|
|
説明 |
|---|---|
|
// 変数を設定 |
合格した受験者と不合格の受験者の 2 つの 1 次元配列を作成します。各配列のエントリは順不同になっています。構造体を作成し、構造体の要素に各配列を代入します。不合格の受験者の不合格コードを保持する構造体を作成します。rejectedCode 構造体には、すべての不合格者は含まれていません。また、あるエントリで規定外の不合格コードを代入しています。この構造体のキーにはスペースが含まれているので、連想配列表記法を使用して構造体の要素を参照しています。 |
|
WriteOutput("The following applicants were accepted:<hr>"); |
合格した受験者をアルファベット順にソートします。見出しを表示します。合格した受験者を反復処理して、氏名を出力します。単一ステートメントのループなので中括弧は不要ですが、読みやすくするために付けています。合格した受験者リストの末尾に改行を付け加えます。 |
|
WriteOutput("The following applicants were rejected:<hr>"); |
rejectedApplicants 配列をアルファベット順にソートし、見出しを出力します。 |
|
applicant=applicants.rejected[j]; |
不合格の受験者を反復処理します。applicant 変数に受験者名を代入します。これによって、コードが読みやすくなり、このブロックの後にある rejectCode 配列で簡単に参照できるようになります。受験者名を出力します。 |
|
switch(rejectCode[applicant]) { |
rejectCode 構造体をチェックして、その受験者に不合格コードが設定されているか確認します。コードが設定されている場合は、switch ステートメントで不合格コードの値を調べます。規定されたコードのいずれかに不合格コードの値が一致する場合は、不合格理由の説明を表示します。それ以外の場合(default の場合)は、不合格コードが有効でないことを示すメッセージを表示します。ブロック末尾のコメントは、制御フローを明確にするためのものです。 |
|
WriteOutput("Reject reason was not defined.<br>"); |
その受験者のエントリが rejectCode 構造体の中にない場合は、理由が定義されていないことを示すメッセージを表示します。 |
|
} // for ステートメントの終わり |
それぞれの不合格者の後に、空白行を表示します。各不合格者を処理する for ループを終了します。CFScript を終了します。 |