Groovy Ternary Operator

Another one of the great operators that more and more languages support is their ternary operator. The ternary is a conditional operator and often referred to as an inline if statement. Before we look at how to use it lets take a look at a common problem it helps us solve. There are often times when you want to set a variable to one value if an expression evaluates to true and another if its false. In pseudo code it might look something like this.

If expression is true; set value to a else set value to b

Say we are displaying the weather to a user. We know the users state because we require it in our application but maybe they haven't told us exactly what city they live in. In the following examples (ColdFusion & Groovy) we check to see if the city is null. If it is we set the location to the state and if it is not we will use that.

var location = '';

if ( isNull(user.getCity()) ){
    location = user.getState();
} else {
    location = user.getState();
}

def location

if( user.city == null ){
    location = user.state
} else {
    location = user.city
}

This is fine but its a lot of excess noise that we don't need. Both ColdFusion and Groovy support the ternary operator and I won't show it in both because its pretty easy to understand. If the expression before the ? evaluates to true state will be used and if it evaluates to false (we have a city) then city will be used.

def location = (user.city == null) ? user.state : user.city

Groovy actually takes this one step further though . Most of the time we are doing checks like the one above. We have one value that we want to use (a default) but if it doesn't exist use another. In Groovy we can represent that default using ?:

def location = user.city ?: user.state

Subscribe to my newsletter.

Sign up for my weekly newsletter and stay up to date with current blog posts.

Weekly Updates
I will send you an update each week to keep you filled in on what I have been up to.
No spam
You will not receive spam from me and I will not share your email address with anyone.