CFScript example

The following example uses these CFScript features:

  • Variable assignment

  • Function calls

  • For loops

  • If-else statements

  • WriteOutput functions

  • Switch statements

The example uses CFScript without any other ColdFusion tags. It creates a structure of course applicants. This structure contains two arrays; the first has accepted students, the second has rejected students. The script also creates a structure with rejection reasons for some (but not all) rejected students. It then displays the accepted applicants followed by the rejected students and their rejection reasons.

<html> 
<head> 
    <title>CFScript Example</title> 
</head> 
<body> 
<cfscript> 
 
    //Set the variables 
 
    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"; 
 
    //Sort and display accepted applicants  
 
    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>"); 
     
    //sort and display rejected applicants with reasons information 
 
    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>"); 
            } //end switch 
        } //end if 
        else { 
            WriteOutput("Reject reason was not defined.<br>");  
        } //end else 
        WriteOutput("<br>"); 
    } //end for 
</cfscript>

Reviewing the code

The following table describes the code:

Code

Description

<cfscript> 
    //Set the variables 
    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";

Creates two one-dimensional arrays, one with the accepted applicants and another with the rejected applicants. The entries in each array are in random order.

Creates a structure and assign each array to an element of the structure.

Creates a structure with rejection codes for rejected applicants. The rejectedCode structure does not have entries for all rejected applicants, and one of its values does not match a valid code. The structure element references use associative array notation in order to use key names that contain spaces.

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>");

Sorts the accepted applicants alphabetically.

Displays a heading.

Loops through the accepted applicants and writes their names. Curly brackets enhance clarity, although they are not needed for a single statement loop.

Writes an additional line break at the end of the list of accepted applicants.

ArraySort(applicants.rejected,"text","asc"); 
WriteOutput("The following applicants were rejected:<hr>");

Sorts rejectedApplicants array alphabetically and writes a heading.

for (j=1;j lte ArrayLen(applicants.rejected);j=j+1) { 
    applicant=applicants.rejected[j]; 
    WriteOutput(applicant & "<br>");

Loops through the rejected applicants.

Sets the applicant variable to the applicant name. This makes the code clearer and enables you to easily reference the rejectCode array later in the block.

Writes the applicant name.

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>"); 
    } //end switch 
} //end if

Checks the rejectCode structure for a rejection code for the applicant.

If a code exists, enters a switch statement that examines the rejection code value.

If the rejection code value matches one of the known codes, displays an expanded explanation of the meaning. Otherwise (the default case), displays an indication that the rejection code is not valid.

Comments at the end of blocks help clarify the control flow.

else { 
    WriteOutput("Reject reason was not defined.<br>");  
} //end else

If there is no entry for the applicant in the rejectCode structure, displays a message indicating that the reason was not defined.

WriteOutput("<br>"); 
} //end for 
</cfscript>

Displays a blank line after each rejected applicant.

Ends the for loop that handles each rejected applicant.

Ends the CFScript.