Welcome!

You will be redirected in 30 seconds or close now.

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

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
"For over 25 years we have been working with a lot of enterprise customers and we have seen how companies create applications. And now that we have moved to cloud computing, mobile, social and the Internet of Things, we see that the market needs a new way of creating applications," stated Jesse Shiah, CEO, President and Co-Founder of AgilePoint Inc., in this SYS-CON.tv interview at 15th Cloud Expo, held Nov 4–6, 2014, at the Santa Clara Convention Center in Santa Clara, CA.
"At our booth we are showing how to provide trust in the Internet of Things. Trust is where everything starts to become secure and trustworthy. Now with the scaling of the Internet of Things it becomes an interesting question – I've heard numbers from 200 billion devices next year up to a trillion in the next 10 to 15 years," explained Johannes Lintzen, Vice President of Sales at Utimaco, in this SYS-CON.tv interview at @ThingsExpo, held Nov 4–6, 2014, at the Santa Clara Convention Center in Santa Clara, CA.
The Internet of Things is a misnomer. That implies that everything is on the Internet, and that simply should not be - especially for things that are blurring the line between medical devices that stimulate like a pacemaker and quantified self-sensors like a pedometer or pulse tracker. The mesh of things that we manage must be segmented into zones of trust for sensing data, transmitting data, receiving command and control administrative changes, and peer-to-peer mesh messaging. In his session at @ThingsExpo, Ryan Bagnulo, Solution Architect / Software Engineer at SOA Software, focused on desi...
SYS-CON Events announced today that Gridstore™, the leader in hyper-converged infrastructure purpose-built to optimize Microsoft workloads, will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. Gridstore™ is the leader in hyper-converged infrastructure purpose-built for Microsoft workloads and designed to accelerate applications in virtualized environments. Gridstore’s hyper-converged infrastructure is the industry’s first all flash version of HyperConverged Appliances that include both compute and storag...
"People are a lot more knowledgeable about APIs now. There are two types of people who work with APIs - IT people who want to use APIs for something internal and the product managers who want to do something outside APIs for people to connect to them," explained Roberto Medrano, Executive Vice President at SOA Software, in this SYS-CON.tv interview at Cloud Expo, held Nov 4–6, 2014, at the Santa Clara Convention Center in Santa Clara, CA.
Today’s enterprise is being driven by disruptive competitive and human capital requirements to provide enterprise application access through not only desktops, but also mobile devices. To retrofit existing programs across all these devices using traditional programming methods is very costly and time consuming – often prohibitively so. In his session at @ThingsExpo, Jesse Shiah, CEO, President, and Co-Founder of AgilePoint Inc., discussed how you can create applications that run on all mobile devices as well as laptops and desktops using a visual drag-and-drop application – and eForms-buildi...
We certainly live in interesting technological times. And no more interesting than the current competing IoT standards for connectivity. Various standards bodies, approaches, and ecosystems are vying for mindshare and positioning for a competitive edge. It is clear that when the dust settles, we will have new protocols, evolved protocols, that will change the way we interact with devices and infrastructure. We will also have evolved web protocols, like HTTP/2, that will be changing the very core of our infrastructures. At the same time, we have old approaches made new again like micro-services...
Code Halos - aka "digital fingerprints" - are the key organizing principle to understand a) how dumb things become smart and b) how to monetize this dynamic. In his session at @ThingsExpo, Robert Brown, AVP, Center for the Future of Work at Cognizant Technology Solutions, outlined research, analysis and recommendations from his recently published book on this phenomena on the way leading edge organizations like GE and Disney are unlocking the Internet of Things opportunity and what steps your organization should be taking to position itself for the next platform of digital competition.
The 3rd International Internet of @ThingsExpo, co-located with the 16th International Cloud Expo - to be held June 9-11, 2015, at the Javits Center in New York City, NY - announces that its Call for Papers is now open. The Internet of Things (IoT) is the biggest idea since the creation of the Worldwide Web more than 20 years ago.
As the Internet of Things unfolds, mobile and wearable devices are blurring the line between physical and digital, integrating ever more closely with our interests, our routines, our daily lives. Contextual computing and smart, sensor-equipped spaces bring the potential to walk through a world that recognizes us and responds accordingly. We become continuous transmitters and receivers of data. In his session at @ThingsExpo, Andrew Bolwell, Director of Innovation for HP's Printing and Personal Systems Group, discussed how key attributes of mobile technology – touch input, sensors, social, and ...
In their session at @ThingsExpo, Shyam Varan Nath, Principal Architect at GE, and Ibrahim Gokcen, who leads GE's advanced IoT analytics, focused on the Internet of Things / Industrial Internet and how to make it operational for business end-users. Learn about the challenges posed by machine and sensor data and how to marry it with enterprise data. They also discussed the tips and tricks to provide the Industrial Internet as an end-user consumable service using Big Data Analytics and Industrial Cloud.
Building low-cost wearable devices can enhance the quality of our lives. In his session at Internet of @ThingsExpo, Sai Yamanoor, Embedded Software Engineer at Altschool, provided an example of putting together a small keychain within a $50 budget that educates the user about the air quality in their surroundings. He also provided examples such as building a wearable device that provides transit or recreational information. He then reviewed the resources available to build wearable devices at home including open source hardware, the raw materials required and the options available to power s...
Things are being built upon cloud foundations to transform organizations. This CEO Power Panel at 15th Cloud Expo, moderated by Roger Strukhoff, Cloud Expo and @ThingsExpo conference chair, addressed the big issues involving these technologies and, more important, the results they will achieve. Rodney Rogers, chairman and CEO of Virtustream; Brendan O'Brien, co-founder of Aria Systems, Bart Copeland, president and CEO of ActiveState Software; Jim Cowie, chief scientist at Dyn; Dave Wagstaff, VP and chief architect at BSQUARE Corporation; Seth Proctor, CTO of NuoDB, Inc.; and Andris Gailitis, C...
There's Big Data, then there's really Big Data from the Internet of Things. IoT is evolving to include many data possibilities like new types of event, log and network data. The volumes are enormous, generating tens of billions of logs per day, which raise data challenges. Early IoT deployments are relying heavily on both the cloud and managed service providers to navigate these challenges. In her session at Big Data Expo®, Hannah Smalltree, Director at Treasure Data, discussed how IoT, Big Data and deployments are processing massive data volumes from wearables, utilities and other machines...
"There is a natural synchronization between the business models, the IoT is there to support ,” explained Brendan O'Brien, Co-founder and Chief Architect of Aria Systems, in this SYS-CON.tv interview at the 15th International Cloud Expo®, held Nov 4–6, 2014, at the Santa Clara Convention Center in Santa Clara, CA.
SYS-CON Media announced that Splunk, a provider of the leading software platform for real-time Operational Intelligence, has launched an ad campaign on Big Data Journal. Splunk software and cloud services enable organizations to search, monitor, analyze and visualize machine-generated big data coming from websites, applications, servers, networks, sensors and mobile devices. The ads focus on delivering ROI - how improved uptime delivered $6M in annual ROI, improving customer operations by mining large volumes of unstructured data, and how data tracking delivers uptime when it matters most.
In this Women in Technology Power Panel at 15th Cloud Expo, moderated by Anne Plese, Senior Consultant, Cloud Product Marketing at Verizon Enterprise, Esmeralda Swartz, CMO at MetraTech; Evelyn de Souza, Data Privacy and Compliance Strategy Leader at Cisco Systems; Seema Jethani, Director of Product Management at Basho Technologies; Victoria Livschitz, CEO of Qubell Inc.; Anne Hungate, Senior Director of Software Quality at DIRECTV, discussed what path they took to find their spot within the technology industry and how do they see opportunities for other women in their area of expertise.
While great strides have been made relative to the video aspects of remote collaboration, audio technology has basically stagnated. Typically all audio is mixed to a single monaural stream and emanates from a single point, such as a speakerphone or a speaker associated with a video monitor. This leads to confusion and lack of understanding among participants especially regarding who is actually speaking. Spatial teleconferencing introduces the concept of acoustic spatial separation between conference participants in three dimensional space. This has been shown to significantly improve comprehe...
The Industrial Internet revolution is now underway, enabled by connected machines and billions of devices that communicate and collaborate. The massive amounts of Big Data requiring real-time analysis is flooding legacy IT systems and giving way to cloud environments that can handle the unpredictable workloads. Yet many barriers remain until we can fully realize the opportunities and benefits from the convergence of machines and devices with Big Data and the cloud, including interoperability, data security and privacy.
Performance is the intersection of power, agility, control, and choice. If you value performance, and more specifically consistent performance, you need to look beyond simple virtualized compute. Many factors need to be considered to create a truly performant environment. In his General Session at 15th Cloud Expo, Harold Hannon, Sr. Software Architect at SoftLayer, discussed how to take advantage of a multitude of compute options and platform features to make cloud the cornerstone of your online presence.