コード
次の例では、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 を終了します。 |