The Elvis operator (?:) is a small but elegant feature added in Splendor. I am going to show you how it shortens your conditional code and makes it look simpler. But before I get into the details, here is the list of language features added in ColdFusion Splendor.
- Script support for tags
- Member functions for CF data type/data structure
- Improved JSON serialization
- Easy to use CF functions for Query tag
- Elvis operator (?:)
- Promoting built-in CF function to first class
- Miscellaneous new functions: QueryGetRow, ListEach and others.
The Elvis operator assigns the ‘right default’ for a variable or an expression. In an expression, if the resultant value is not defined, then the object will be assigned to the left most part of the expression otherwise a default value (define at the right most part) will be assigned.
Consider a conditional case where the displayname is populated with username variable, if the later is defined otherwise a default value “anonymous” needs to be assigned to the displayname variable. The code snippet shown below display both the syntaxes: one with Elvis operator and other without it:
Without Elvis
<cfscript> if(isdefined('username')){ displayName = username; } else { displayName = "anonymous"; } </cfscript>
With Elvis operator
displayName = username ?: "anonymous";
The support for Elvis operator has been provided for function calls and expressions too. Some of the expression cases are:
securityNumber = securityStruct[‘Joe’] ?: -1; // Retrieving from a struct colourCode = colourArray[index] ?: "black"; // Retrieving from an array employeeName = getEmployeeName(ID) ?: “Joe”; // A function call