In
computing, IIf (an abbreviation for Immediate
if) is a
function in several editions of the
Visual Basic programming language and
ColdFusion Markup Language (CFML), and on
spreadsheets that returns the second or third
parameter based on the evaluation of the first parameter. It is an example of a conditional expression, which is similar to a
conditional statement.
Syntax
The
syntax
In linguistics, syntax () is the study of how words and morphemes combine to form larger units such as phrases and sentences. Central concerns of syntax include word order, grammatical relations, hierarchical sentence structure ( constituency) ...
of the IIf function is as follows:
IIf(''expr'', ''truepart'', ''falsepart'')
All three parameters are required:
* ''expr'' is the expression that is to be evaluated.
* ''truepart'' defines what the IIf function returns if the evaluation of ''expr'' returns true.
* ''falsepart'' defines what the IIf function returns if the evaluation of ''expr'' returns false.
Many languages have an
operator
Operator may refer to:
Mathematics
* A symbol indicating a mathematical operation
* Logical operator or logical connective in mathematical logic
* Operator (mathematics), mapping that acts on elements of a space to produce elements of another ...
to accomplish the same purpose, generally referred to as a
conditional operator (or, less precisely, as a ternary operator); the best known is
?:, as used in C, C++, and related languages. Some of the problems with the IIf function, as discussed later, do not exist with a conditional operator, because the language is free to examine the type and delay evaluation of the operands, as opposed to simply passing them to a library function.
Examples
These examples evaluate mathematical expressions and return one of two strings depending on the outcome.
result = IIf(5 < 10, ''"Yes it is"'', "No it isn't") ' Returns "Yes it is"
result = IIf(2 + 2 = 5, "Correct", ''"Wrong"'') ' Returns "Wrong"
Criticisms
Efficiency
Because
IIf
is a library function, it will always require the overhead of a function call, whereas a conditional operator will more likely produce inline code.
Furthermore, the
data type
In computer science and computer programming, a data type (or simply type) is a set of possible values and a set of allowed operations on it. A data type tells the compiler or interpreter how the programmer intends to use the data. Most progra ...
of its arguments is
Variant
. If the function is called with arguments of other types (variables or literals), there will be additional overhead to convert these to
Variant
. There may also be additional overhead to check the argument types and convert one of them if they do not have the same type.
Side effects
Another issue with
IIf
arises because it is a library function: unlike the C-derived conditional operator, both ''truepart'' and the ''falsepart'' will be evaluated regardless of which one is actually returned. In the following code snippet:
value = 10
result = IIf(value = 10, ''TrueFunction'', FalseFunction)
although ''TrueFunction'' is the function intended to be called,
IIf
will call both ''TrueFunction'' and ''FalseFunction''. Similarly,
a = 10
b = 0
result = IIf(b <> 0, a / b, 0)
While the intent may be to avoid a division by zero, whenever b is zero the error will actually happen. This is because the code in the snippet is executed as if by
a = 10
b = 0
_temp1 = b <> 0
_temp2 = a / b ' Error if b = 0
_temp3 = 0
If _temp1 Then
result = _temp2
Else
result = _temp3
End If
This issue makes the IIf() call less useful than the conditional operator. To solve this issue, Microsoft developers had considered
converting
IIf
to an intrinsic function; had this happened, the compiler would have been able to perform
type inference and
short-circuiting
A short circuit (sometimes abbreviated to short or s/c) is an electrical circuit that allows a current to travel along an unintended path with no or very low electrical impedance. This results in an excessive current flowing through the circuit ...
by replacing the function call with inline code.
Alternatives to IIf
In
Visual Basic, IIf is not the sole way to evaluate and perform actions based on whether an expression is true or false.
The following example uses IIf:
result = IIf(x = y, value1, value2)
It could also be written in the following way, using standard
conditional
Conditional (if then) may refer to:
* Causal conditional, if X then Y, where X is a cause of Y
* Conditional probability, the probability of an event A given that another event B has occurred
*Conditional proof, in logic: a proof that asserts a ...
s:
If x = y Then
result = value1
Else
result = value2
End If
The above example would also eliminate the problem of IIf evaluating both its ''truepart'' and ''falsepart'' parameters.
Visual Basic 2008 (VB 9.0) introduced a true
conditional operator, called simply "If", which also eliminates this problem. Its syntax is similar to the IIf function's syntax:
result = If(x = y, value1, value2)
IIf in other programming languages
$iif()
is present in
mIRC script, with similar syntax.
alias testiif
alias testiif2 { inc %testiif , return testing $!iif: }
Calling
/testiif
will print out "testing $iif: 1 execution(s)". mIRC's
$iif
acts more like C's
?:
than
IIf()
in VB since it won't pre-evaluate both.
IIF()
is a function in
dBase
dBase (also stylized dBASE) was one of the first database management systems for microcomputers and the most successful in its day. The dBase system includes the core database engine, a query system, a forms engine, and a programming language ...
and
xBase (1992 and older).
iif()
is also a compiler magic function of
Oxygene. It is not a real function and is at compile time unrolled to conditional statements.
var someString := iif(someInt > 35 , 'Large', 'Small');
In this example a new strong type string named "someString" is created (using
Type inference) and the
iif
function will fill it depending on the outcome of the boolean expression.
SQL Server 2012 and newer implements the IIF() function:
DECLARE @a int = 45;
DECLARE @b int = 40;
SELECT IIF ( @a > @b, 'TRUE', 'FALSE' ) AS Result;
IIf in C is the
?: conditional operator:
printf("number %d is%s even", num, num % 2 ? " not" : "");
IIf in Python:
parity = "odd" if n % 2 else "even"
IIf (either) in Red and Rebol:
parity: either odd? n odd'even]
References
External links
MSDN Documentation for IIf
Microsoft Visual Studio
Conditional constructs
Articles with example Python (programming language) code
Articles with example BASIC code
BASIC programming language