Welcome!

You will be redirected in 30 seconds or close now.

ColdFusion Authors: Yakov Fain, Jeremy Geelan, Maureen O'Gara, Nancy Y. Nee, Tad Anderson

Related Topics: ColdFusion

ColdFusion: Article

Making Decisions in Your Code with ColdFusion "cfif"

Before you can implement conditional logic in your code you have to understand what conditional logic is

This month I will examine the cfif tag and discuss how we can use that tag to make decisions in our code. Along the way I'll talk about Boolean logic, decision operators, and Boolean operators in CFML.

Understanding Conditional Logic
Before you can implement conditional logic in your code you have to understand what conditional logic is. I have no doubt that every one of you knows what conditional logic is, although you may never have heard it referred to as such. Conditional logic is just a fancy way of saying that you are going to make a decision. Usually the decision is based upon some sort of condition or the result of an operation.

You and I make decisions every day, so let's delve into some real-world examples. Suppose I'm driving a car and come to an intersection with another road. I need to make a decision whether to turn left, turn right, or continue straight on the main road. Each decision may have different consequences. If I turn right, I go to the bank. If I turn left, I go to the grocery store. Going straight might take me somewhere else, home, for example. Since it has been a long day, I want to go home. I'm going to drive straight. This is an example of conditional logic in practice. I made a choice to go straight, based on a condition, I want to go home, and something happened as a result of that condition.

Making decisions about groceries and the bank is all well and good, but how does this apply to Web development? I'm glad you asked. Suppose you have a sign-up form on your Web site. Your users enter some account information, such as an e-mail address, their name, a username, and password. You take that information and create a user account in your database.

What happens if the user does not enter a username? Can you still create the account? How do you handle that situation? You can use conditional logic to make sure that the username is not left blank. Suppose a user looks at the shopping cart before adding items to it? You can use conditional logic to display an "empty cart" message. Suppose a user enters a birth date as November 15, 2050? You get the idea - we can use conditional logic in our code to solve these types of problems.

The Format of the cfif Tag
In CFML, you can use the cfif tag to perform conditional logic statements. It comes in this format:

<cfif expression>
Perform Actions
</cfif>

The cfif tag is an oddball tag in the CFML language. Unlike most tags, it doesn't take any explicit parameter name and value arguments; it is simply followed by an expression after the tag name. A review of expressions can be found in last month's article; or you can go straight to the source: http://livedocs.macromedia.com/coldfusion/6.1/htmldocs/cfml_b14.htm. The CFML interpreter uses an expression to determine whether or not to process data. Expressions are literal values, variables, or functions (which return a Boolean value).

The expression inside the cfif tag must evaluate to a Boolean value (a true/false). Boolean values are represented as either "true" or "false", "yes" or "no", or "0" or any number. If the expression evaluates to true, then the action immediately following the <cfif> is performed. If the expression evaluates to false, then the action is not performed and template execution will continue after the end cfif tag. There are two types of operators that are used with cfif tags: decision operators and Boolean operators. Both evaluate to Boolean values.

Decision and Boolean Operators
The two types of operators used in a cfif expression are decision operators and Boolean operators. Boolean operators refer to specific operators from Boolean algebra. Decision operators are used for comparisons. This is a list of the Boolean and decision operators supported in CFML:

  • NOT: A Boolean operator that returns the opposite of the specified expressions. If you want the NOT of true, then you get false. The NOT of false is true.
  • AND: A Boolean operator that returns true if both operands are true, but false otherwise.
  • OR: A Boolean operator that returns true if at least one of the operands is true, but returns false otherwise.
  • XOR: A Boolean operator that performs an exclusive or. If only one of the values is true, then the result is true. Otherwise the result is false.
  • EQV: A Boolean operator that performs equivalence. Returns true if both operands are true or both operands are false. Returns false if the operands are different.
  • IMP: A Boolean operator that performs implication. It is akin to the logical statement "If condition 1, then condition 2." This returns false if condition 1 is true and condition 2 is false. True is returned in all other cases.
  • IS, EQUAL, EQ: Decision operators that test for two values being equal. If the first value is equal to the second value, the final result is true.
  • IS NOT, NOT EQUAL, NEQ: Decision operators that test for two values not being equal. If the two values are equal, then the final result will be false.
  • GREATER THAN, GT: Decision operators that are used to check if the first value is greater than the second value.
  • GREATER THAN OR EQUAL TO, GTE, GE: Decision operators that check to see if the first value is larger than or equal to the second value.
  • LESS THAN, LT: Decision operators that are used to check if the first value is smaller than the second value.
  • LESS THAN OR EQUAL TO, LTE, LE: Decision operators that check to see if the first value is smaller than or equal to the second value.
  • CONTAINS: A decision operator that returns true if the value on the left contains the value on the right.
  • DOES NOT CONTAIN: A decision operator that returns true if the value on the left does not contain the value on the right.

You can read more about decision operators in the Macromedia Livedocs at http://livedocs.macromedia.com/coldfusion/6.1/htmldocs/expresa6.htm and about Boolean operators at http://livedocs.macromedia.com/coldfusion/6.1/htmldocs/expresa5.htm.

It is worth noting the order in which these operations are applied. This builds right off the order of operations I discussed in last month's article. First, the arithmetic operators are applied, and then the string operator is applied. Following that, the decision operators are applied: EQ, NEQ, LT, LTE, GT, GTE, CONTAINS, DOES NOT CONTAIN from left to right in the order that they appear. Then come the Boolean operators. First the NOT operator is applied, then the AND operator. Then the OR operator, followed by the XOR operator. Next comes EQV, and finally, IMP. You can always use parentheses to change the order of operations. In fact, when in doubt, use parentheses to force the order of operations! In most cases you won't be mixing arithmetic or string operands with decision or Boolean ones; however, decision and Boolean operands are often used together. Let me show you how to put this into practice.

Take Some Code for a Test Drive
Suppose you want to make a simple interface for users to choose which way to turn their car. This sample uses an HTML form to collect the user input, as shown below. If you are unfamiliar with HTML forms, I found some great Web-based tutorials located at www.weballey.net/forms and www.wdvl.com/Authoring/Scripting/Tutorial/html_forms_intro.html.

<form action="Go.cfm" method="post">
<input type="Radio" name="Route" value="Right">Right
<input type="Radio" name="Route" value="Left">Left
<input type="Radio" name="Route" value="Straight">Straight<Br>
<input type="submit">
</form>

The form uses radio buttons to let the user select a direction and then click Submit to see the result page:

<cfif Route is "Right">
Go to Bank<br>
</cfif>
<cfif Route is "Left">
Go to Store<br>
</cfif>
<cfif Route is "Straight">
Go Home<br>
</cfif>

If you copy this code to see the example in action, make sure that you put it in a file named go.cfm and put both files in the same directory. This code uses the decision operator IS to determine the value of Route. It uses multiple cfif tags to figure out the value of the Route variable and what it should be.

Specifying Additional Conditions with cfelse and cfelseif
Up to this point the cfif tags have performed actions only if an expression resulted to true. What happens when you need to perform some actions when a condition is false? Well, you could use the NOT operator to create a second cfif statement, but there is a better way. CFML offers us the <cfelse> tag. This is the syntax:

<cfif expression>
Perform Actions
<cfelse>
Perform Other Actions
</cfif>

The cfif tag remains the same, as do the actions that we perform if the condition is true. What changes is that we have a cfelse tag. The cfelse tag does not take any parameters or expressions - it simply offers the alternative code to run in case a cfif evaluates to false.

If you go back to the driving example, you will see that we have three separate conditions. Turning left directs us to the grocery store, turning right takes us to the bank, and going straight sends us home. In this case, it won't be possible to perform all of the actions at once. Our first example is inefficient because we evaluate all conditions even after finding the correct one.

There is a better way to handle this situation - through the use of a tag called cfelseif. The cfelseif tag allows us to add multiple conditions to our cfif statement. If the first condition does not evaluate to true, then the second cfelseif condition is evaluated. If the second is not true, then the third is evaluated. Use of the cfelseif is optional, and there is no limit to the number of cfelseif conditions you can have. By contrast, the cfelse tag can be used only once. This is the syntax for cfelseif:

<cfif expression>
Perform Actions
<cfelseif expression2>
Perform Other Actions
</cfif>

The code is very similar to the previous sample. The cfelseif tag contains an additional expression, whereas the cfelse did not. It will be evaluated only if the cfif expression is false. When there are cfelseif tags and a cfelse tag, the cfelse tag must always come last (after all cfelseif tags). The previous example used multiple cfif tags. The cfelseif tag lets us combine the separate cfif tags into a single login. This is the code:

<cfif Route is "Right">
Go to Bank<br>
<cfelseif Route is "Left">
Go to Store<br>
<cfelse>
Go Home<br>
</cfif>

If the route chosen is right, then we go to the bank. If the route is left we go to the store. If nothing else, we continue to go straight on home.

Where Do I Go from Here?
The cfif statement can get very complicated if you start using one cfif statement inside another cfif statement. If you want to do some independent study, I would suggest reading up on cfswitch at http://livedocs.macromedia.com/coldfusion/ 6.1/htmldocs/tags-c10.htm#wp1103819 and cfcase at http://livedocs.macromedia.com/coldfusion/ 6.1/htmldocs/tags-pa9.htm#wp2664410. They are used together to form case statements, which are a different form of conditionals that you can use in your code. The use of cfswitch and cfcase statements is often a great way to simplify complex cfif.

It has been a pleasure writing these articles for you, and I'm pleased to announce that I've received my first topic request. Next month I will be writing about structures and arrays. Keep the ideas coming!

More Stories By Jeffry Houser

Jeffry is a technical entrepreneur with over 10 years of making the web work for you. Lately Jeffry has been cooped up in his cave building the first in a line of easy to use interface components for Flex Developers at www.flextras.com . He has a Computer Science degree from the days before business met the Internet and owns DotComIt, an Adobe Solutions Partner specializing in Rich Internet Applications. Jeffry is an Adobe Community Expert and produces The Flex Show, a podcast that includes expert interviews and screencast tutorials. Jeffry is also co-manager of the Hartford CT Adobe User Group, author of three ColdFusion books and over 30 articles, and has spoken at various events all over the US. In his spare time he is a musician, old school adventure game aficionado, and recording engineer. He also owns a Wii. You can read his blog at www.jeffryhouser.com, check out his podcast at www.theflexshow.com or check out his company at www.dot-com-it.com.

Comments (7) View Comments

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


Most Recent Comments
CFDJ News Desk 12/04/05 02:00:18 AM EST

Making Decisions in Your Code with ColdFusion "cfif". This month I will examine the cfif tag and discuss how we can use that tag to make decisions in our code. Along the way I'll talk about Boolean logic, decision operators, and Boolean operators in CFML.

SYS-CON Canada News Desk 12/03/05 11:19:15 AM EST

Making Decisions in Your Code with "cfif" This month I will examine the cfif tag and discuss how we can use that tag to make decisions in our code. Along the way I'll talk about Boolean logic, decision operators, and Boolean operators in CFML.

CFDJ News Desk 12/03/05 10:50:59 AM EST

Making Decisions in Your Code with "cfif"
This month I will examine the cfif tag and discuss how we can use that tag to make decisions in our code. Along the way I'll talk about Boolean logic, decision operators, and Boolean operators in CFML.

Jeff Houser 11/14/05 12:35:24 PM EST

Hi Kevin,
I just saw your comment now. I'm glad you like the articles.

The type of security I wrote about in the "Remember Me" article (August 2004) is still what I use today. I find that, in most cases, the web applications I've worked on did not need anything more advanced than that.

I dealt with Lotus Notes a lot right out of college (a while ago) and their security scheme is the most powerful/flexible I've ever seen.

In my first book, (Instant Coldfusion now extremely dated), I wrote about implementing this sort of system in CF, but it is overkill for most web apps.

I'll keep a "Back to basics" article in mind, although these days I try to tie in with the issue focus.

Jeff Houser 11/14/05 12:34:57 PM EST

Hi Kevin,
I just saw your comment now. I'm glad you like the articles.

The type of security I wrote about in the "Remember Me" article (August 2004) is still what I use today. I find that, in most cases, the web applications I've worked on did not need anything more advanced than that.

I dealt with Lotus Notes a lot right out of college (a while ago) and their security scheme is the most powerful/flexible I've ever seen.

In my first book, (Instant Coldfusion now extremely dated), I wrote about implementing this sort of system in CF, but it is overkill for most web apps.

I'll keep a "Back to basics" article in mind, although these days I try to tie in with the issue focus.

CFDJ News Desk 10/20/05 09:51:59 PM EDT

ColdFusion Developer's Journal - Making Decisions in Your Code with "cfif" This month I will examine the cfif tag and discuss how we can use that tag to make decisions in our code. Along the way I'll talk about Boolean logic, decision operators, and Boolean operators in CFML.

Kevin 10/20/05 09:25:55 PM EDT

I like your articles quite a bit!

I was wondering what your current take on home-spun user security is now that we are almost in 2006 and your article about remembering user logins was 2004 if I remember correctly...

Have you got any thoughts on more complex role based models vs privilage based? etc...

I'd like to here your thoughst on this.

Also, it's old news, but I download applications from what i would have though to be good cfml-ers that still use #'s where the should not! a nice back to basics article might be good for specificly when to use and not use #'s

thanks!

Kevin

@ThingsExpo Stories
In his Opening Keynote at 21st Cloud Expo, John Considine, General Manager of IBM Cloud Infrastructure, led attendees through the exciting evolution of the cloud. He looked at this major disruption from the perspective of technology, business models, and what this means for enterprises of all sizes. John Considine is General Manager of Cloud Infrastructure Services at IBM. In that role he is responsible for leading IBM’s public cloud infrastructure including strategy, development, and offering m...
DXWorldEXPO LLC announced today that All in Mobile, a mobile app development company from Poland, will exhibit at the 22nd International CloudEXPO | DXWorldEXPO. All In Mobile is a mobile app development company from Poland. Since 2014, they maintain passion for developing mobile applications for enterprises and startups worldwide.
DXWorldEXPO LLC announced today that ICC-USA, a computer systems integrator and server manufacturing company focused on developing products and product appliances, will exhibit at the 22nd International CloudEXPO | DXWorldEXPO. DXWordEXPO New York 2018, colocated with CloudEXPO New York 2018 will be held November 11-13, 2018, in New York City. ICC is a computer systems integrator and server manufacturing company focused on developing products and product appliances to meet a wide range of ...
We are seeing a major migration of enterprises applications to the cloud. As cloud and business use of real time applications accelerate, legacy networks are no longer able to architecturally support cloud adoption and deliver the performance and security required by highly distributed enterprises. These outdated solutions have become more costly and complicated to implement, install, manage, and maintain.SD-WAN offers unlimited capabilities for accessing the benefits of the cloud and Internet. ...
Headquartered in Plainsboro, NJ, Synametrics Technologies has provided IT professionals and computer systems developers since 1997. Based on the success of their initial product offerings (WinSQL and DeltaCopy), the company continues to create and hone innovative products that help its customers get more from their computer applications, databases and infrastructure. To date, over one million users around the world have chosen Synametrics solutions to help power their accelerated business or per...
Founded in 2000, Chetu Inc. is a global provider of customized software development solutions and IT staff augmentation services for software technology providers. By providing clients with unparalleled niche technology expertise and industry experience, Chetu has become the premiere long-term, back-end software development partner for start-ups, SMBs, and Fortune 500 companies. Chetu is headquartered in Plantation, Florida, with thirteen offices throughout the U.S. and abroad.
Dion Hinchcliffe is an internationally recognized digital expert, bestselling book author, frequent keynote speaker, analyst, futurist, and transformation expert based in Washington, DC. He is currently Chief Strategy Officer at the industry-leading digital strategy and online community solutions firm, 7Summits.
Bill Schmarzo, author of "Big Data: Understanding How Data Powers Big Business" and "Big Data MBA: Driving Business Strategies with Data Science," is responsible for setting the strategy and defining the Big Data service offerings and capabilities for EMC Global Services Big Data Practice. As the CTO for the Big Data Practice, he is responsible for working with organizations to help them identify where and how to start their big data journeys. He's written several white papers, is an avid blogge...
I think DevOps is now a rambunctious teenager - it's starting to get a mind of its own, wanting to get its own things but it still needs some adult supervision," explained Thomas Hooker, VP of marketing at CollabNet, in this SYS-CON.tv interview at DevOps Summit at 20th Cloud Expo, held June 6-8, 2017, at the Javits Center in New York City, NY.
"MobiDev is a software development company and we do complex, custom software development for everybody from entrepreneurs to large enterprises," explained Alan Winters, U.S. Head of Business Development at MobiDev, in this SYS-CON.tv interview at 21st Cloud Expo, held Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA.
Major trends and emerging technologies – from virtual reality and IoT, to Big Data and algorithms – are helping organizations innovate in the digital era. However, to create real business value, IT must think beyond the ‘what’ of digital transformation to the ‘how’ to harness emerging trends, innovation and disruption. Architecture is the key that underpins and ties all these efforts together. In the digital age, it’s important to invest in architecture, extend the enterprise footprint to the cl...
Data is the fuel that drives the machine learning algorithmic engines and ultimately provides the business value. In his session at Cloud Expo, Ed Featherston, a director and senior enterprise architect at Collaborative Consulting, discussed the key considerations around quality, volume, timeliness, and pedigree that must be dealt with in order to properly fuel that engine.
Two weeks ago (November 3-5), I attended the Cloud Expo Silicon Valley as a speaker, where I presented on the security and privacy due diligence requirements for cloud solutions. Cloud security is a topical issue for every CIO, CISO, and technology buyer. Decision-makers are always looking for insights on how to mitigate the security risks of implementing and using cloud solutions. Based on the presentation topics covered at the conference, as well as the general discussions heard between sessio...
IoT is rapidly becoming mainstream as more and more investments are made into the platforms and technology. As this movement continues to expand and gain momentum it creates a massive wall of noise that can be difficult to sift through. Unfortunately, this inevitably makes IoT less approachable for people to get started with and can hamper efforts to integrate this key technology into your own portfolio. There are so many connected products already in place today with many hundreds more on the h...
No hype cycles or predictions of zillions of things here. IoT is big. You get it. You know your business and have great ideas for a business transformation strategy. What comes next? Time to make it happen. In his session at @ThingsExpo, Jay Mason, Associate Partner at M&S Consulting, presented a step-by-step plan to develop your technology implementation strategy. He discussed the evaluation of communication standards and IoT messaging protocols, data analytics considerations, edge-to-cloud tec...
DXWorldEXPO LLC announced today that the upcoming DXWorldEXPO | CloudEXPO New York event will feature 10 companies from Poland to participate at the "Poland Digital Transformation Pavilion" on November 12-13, 2018.
Digital Transformation is much more than a buzzword. The radical shift to digital mechanisms for almost every process is evident across all industries and verticals. This is often especially true in financial services, where the legacy environment is many times unable to keep up with the rapidly shifting demands of the consumer. The constant pressure to provide complete, omnichannel delivery of customer-facing solutions to meet both regulatory and customer demands is putting enormous pressure on...
CloudEXPO | DXWorldEXPO are the world's most influential, independent events where Cloud Computing was coined and where technology buyers and vendors meet to experience and discuss the big picture of Digital Transformation and all of the strategies, tactics, and tools they need to realize their goals. Sponsors of DXWorldEXPO | CloudEXPO benefit from unmatched branding, profile building and lead generation opportunities.
The best way to leverage your CloudEXPO | DXWorldEXPO presence as a sponsor and exhibitor is to plan your news announcements around our events. The press covering CloudEXPO | DXWorldEXPO will have access to these releases and will amplify your news announcements. More than two dozen Cloud companies either set deals at our shows or have announced their mergers and acquisitions at CloudEXPO. Product announcements during our show provide your company with the most reach through our targeted audienc...
Everything run by electricity will eventually be connected to the Internet. Get ahead of the Internet of Things revolution. In his session at @ThingsExpo, Akvelon expert and IoT industry leader Sergey Grebnov provided an educational dive into the world of managing your home, workplace and all the devices they contain with the power of machine-based AI and intelligent Bot services for a completely streamlined experience.