Skip to the content.

Lua - Ternary conditionals

Sometimes, it’s easiest to organize your conditional statements by using what’s known as a ternary statement in cases where you’d like to store either one value or another based on a condition.

The word ternary means “Composed of three parts”; and a ternary statement is a conditional that is composed of three parts:

  1. A condition
  2. A result to return if the condition is true
  3. A result to return if the condition is false

For example, the following code without a ternary:

a = 3
b = 4

if (a < b) then
    print("a is less than b!")
else
    print("a is greater than or equal to b!")
end

could be condensed to:

a = 3
b = 4

message = a < b and "a is less than b!" or "a is greater than or equal to b!"
print(message) --> a is less than b!

How does the Ternary operator work?

Feel free to skip this part if you were satisfied by the above explanation. But, if you’re curious on the and and or operator feel free to read on to learn more!

But what exactly is going on here? That ternary statement kind of looks funky. Well, in Lua, the and and or operators also double up as a second type of operator that lets you split the type of output you receive.

Each value in a Lua program under the hood (even though they don’t seem to) is considered as either true or false. Every value evaluates to true, except for nil and false.

Ternary (and other statements using and and or) are evaluated from left to right:

In the below example, the combination of a statement and then a value will return the value since anything that isn’t false or nil is always true.

a = 3
b = 4
conditionalMessage = a < b and "a is less than b!"

print(conditionalMessage) --> "a is less than b!"

Conversely, or does the opposite:

a = 3
b = 4
conditionalMessage = a < b or "a is less than b!"

print(conditionalMessage) --> true

The or example returns true as the result of a < b.