Ternary Operator in Solidity
The ternary operator (?:) is a conditional assignment that exists in solidity and other programming languages. It has the following structure:
targetVar = condition ? result_if_true : result_if_false;
If the condition is true, the value result_if_true is assigned to the variable targetVar. If the condition evaluates to false, the result_if_false is assigned to targetVar.
It can be used instead of an if-else-statement.
The ternary operator can be more complex in order to assign multiple values at the same time.
(targetVar1, targetVar2) = condition ? (result_1_if_true, result_2_if_true) : (result_1_if_false, result_2_if_false);
Ternary Operator with Function Calls
The ternary operator in Solidity can also deal with function calls as a return value. Instead of simply returning a value, it can call a function that returns a value. As a source code example it would look like this:
pragma solidity 0.8.20;
contract TernaryTest{
function callMeOnTrue() internal pure returns(uint256 res){
return 42;
}
function ternaryTest(uint256 b) public pure returns(uint256){
uint256 a = (b == 0)? callMeOnTrue() : 20;
return a;
}
}