---
name: "if"
type: command
status: ok
groups: ["Program Flow"]
arma3_since: "0.50"
locality: {"argument": null, "effect": null, "server_exec": false}
source: https://community.bistudio.com/wiki/if
revid: 369387
updated: 2024-09-03T18:43:16Z
---

# if

*Command · Program Flow · Arma 3 v0.50 · introduced in Operation Flashpoint v1.85*

## Description

This operator creates a [If Type](../topics/If_Type.md) which is used in the if-construct as described [here](../topics/Control_Structures.md#if-statement).

## Syntax

```sqf
if condition
```

**Parameters:**

- `condition`: [Boolean](../topics/Boolean.md) - if it evaluates as [true](../commands/true.md), the [then](../commands/then.md) clause is executed.  Otherwise, the [else](../commands/else.md) clause (if present) is executed

**Returns:** [If Type](../topics/If_Type.md) - predicate which will execute 1st or 2nd option when used. This predicate is used in [then](../commands/then.md) or [exitWith](../commands/exitWith.md) commands

## Examples

### Example 1

```sqf
_retVal = if (1 > 0) then { "It's true" } else { "It's false" };
hint str _retVal;
```

### Example 2

```sqf
_val = if (true) then [{ "true" }, { "false" }];
hint _val;
```

## See also

[else](../commands/else.md) · [exitWith](../commands/exitWith.md) · [then](../commands/then.md) · [Control Structures](../topics/Control_Structures.md) · [Code Optimisation](../topics/Code_Optimisation.md)

## Community notes

**Ceeeb** — 2007-01-31

Any _local variables you declare within the body of an [if](../commands/if.md)/[then](../commands/then.md) statement (ie between the curly braces) are local to that 'if' statement, and are destroyed at the end of the statement. If you know you want to use the variable outside the 'if' statement, make sure your declare it before the 'if' statement.

---

**Galzohar** — 2010-01-17

If the condition is nil then neither the "then" nor the "else" section get executed, but the script will proceed with no error messages.

Example code:

```sqf
systemChat "script started";    // will get executed
if (nil) then
{
    systemChat "true";            // will never get executed
}
else
{
    systemChat "false";            // will never get executed
};
systemChat "script ended";        // will get executed
```

---

**AgentRev** — 2015-06-05

If you only need to choose between 2 raw values, it is possible to use the following trick to avoid using code blocks, as required by the if command, which results in greater atomicity and faster execution:

```sqf
_result = [falseValue, trueValue] select condition;
```

The select command treats "false" as 0 and "true" as 1, therefore you can feed it a condition determining the array index of the value to be returned. Here is another example:

```sqf
_result = [1,-1] select (_this < 0); // if _this is less than 0, _result will be equal to -1, otherwise it will be 1
```

---

**DreadedEntity** — 2022-05-19

When using **if** to assign values to a variable, if you not have an [else](../commands/else.md) block it is treated as [nil](../commands/nil.md) and returned, setting the variable value to [nil](../commands/nil.md). A3 2.08.149102

```sqf
private _myVar = "value";
private _condition = false;
_myVar = if (_condition) then { "another value" }; //perfectly valid sqf
systemChat str (isNil "_myVar"); //returns true
//_myVar is now nil
_myVar = if (_condition) then { "another value" } else { "value" };
systemChat _myVar; //returns "value"
```

This behavior can be both desirable and undesirable depending on your needs

<sub>Source: [BI Community Wiki — if](https://community.bistudio.com/wiki/if) (revision 369387).</sub>
