A user-defined function example



The following simple function takes a principal amount, an annual percentage rate, and a loan duration in months and returns the total amount of interest paid over the period. You can optionally use the percent sign for the percentage rate, and include the dollar sign and comma separators for the principal amount.

You could use the TotalInterest function in a cfoutput tag of a form’s action page, as follows:

<cfoutput>  
    Loan amount: #Form.Principal#<br> 
    Annual percentage rate: #Form.AnnualPercent#<br> 
    Loan duration: #Form.Months# months<br> 
    TOTAL INTEREST: #TotalInterest(Form.Principal, Form.AnnualPercent, Form.Months)#<br> 
</cfoutput>

Defining the function using CFScript

<cfscript> 
function TotalInterest(principal, annualPercent, months) { 
    Var years = 0; 
    Var interestRate = 0; 
    Var totalInterest = 0; 
    principal = trim(principal); 
    principal = REReplace(principal,"[\$,]","","ALL"); 
    annualPercent = Replace(annualPercent,"%","","ALL"); 
    interestRate = annualPercent / 100; 
    years = months / 12; 
    totalInterest = principal*(((1+ interestRate)^years)-1); 
    Return DollarFormat(totalInterest); 
} 
</cfscript>

Reviewing the code

The following table describes the code:

Code

Description

function TotalInterest(principal, annualPercent, months) {

Starts the TotalInterest function definition. Requires three variables: the principal amount, the annual percentage rate, and the loan duration in months.

Var years = 0; 
Var interestRate = 0; 
Var totalInterest = 0;

Declares intermediate variables used in the function and initializes them to 0. All var statements must precede the rest of the function code.

principal = trim(principal); 
principal = REReplace(principal,"[\$,]","","ALL"); 
annualPercent = Replace(annualPercent,"%","","ALL"); 
interestRate = annualPercent / 100; 
years = months / 12;

Removes any leading or trailing spaces from the principal argument. Removes any dollar sign ($) and comma (,) characters from the principal argument to get a numeric value.

Removes any percent (%) character from the annualPercent argument to get a numeric value, then divides the percentage value by 100 to get the interest rate.

Converts the loan from months to years.

totalInterest = principal* 
(((1+ interestRate)^years)-1); 
Return DollarFormat(totalInterest); 
}

Calculates the total amount of interest due. It is possible to calculate the value in the Return statement, but this example uses an intermediate totalInterest variable to make the code easier to read. Returns the result formatted as a US currency string.

Ends the function definition.

Defining the function using the cffunction tag

The following code replaces CFScript statements with their equivalent CFML tags.

<cffunction name="TotalInterest"> 
    <cfargument name="principal" required="Yes"> 
    <cfargument name="annualPercent" required="Yes">  
    <cfargument name="months" required="Yes"> 
    <cfset var years = 0> 
    <cfset var interestRate = 0> 
    <cfset var totalInterest = 0> 
    <cfset principal = trim(principal)> 
    <cfset principal = REReplace(principal,"[\$,]","","ALL")> 
    <cfset annualPercent = Replace(annualPercent,"%","","ALL")> 
    <cfset interestRate = annualPercent / 100> 
    <cfset years = months / 12> 
    <cfset totalInterest = principal* 
            (((1+ interestRate)^years)-1)> 
    <cfreturn DollarFormat(totalInterest)> 
</cffunction>