Arma 3 Scripting

Command in Program Flow

switch

Also available as Markdown and JSON, or read the original wiki page.

Description

Checks if the given parameter matches any case. If so, the code block of that case will be executed. After that the switch ends so no further cases will be checked.

If a case has no code block the code of the next case will automatically be executed, making it possible to formulate a logical "or" for cases which would otherwise contain the exact same code (see #Example 2).

The default block will be executed only if no case matches, no matter its position inside the code block. It is not a case, and will never be entered by fallthrough.

Note

Syntax

switch value

Parameters:

Returns: Switch Type

Examples

Example 1

switch (floor random 5) do
{
    case 1: { hint "one"; };
    case 2: { hint "two"; };
    default { hint "zero, three or four" };
};

Example 2

switch (_condition) do
{
    case "string1";
    case "string2": { hint "string1 or string2" };
    case "string3";
    case "string4": { hint "string3 or string4" };
    case "string5"; // will never enter default's code
    default { hint "default" };
};

Example 3

private _color = switch (side player) do
{
    case west: { "ColorGreen" };
    case east: { "ColorRed" };
};

Example 4

private _fn_moveForward =    { /*...code...*/ };
private _fn_moveBackward =    { /*...code...*/ };
private _fn_invalidKey =    { /*...code...*/ };

switch true do
{
    case (_dikCode in actionKeys "MoveForward"):    _fn_moveForward;
    case (_dikCode in actionKeys "MoveBackward"):    _fn_moveBackward;
    default _fn_invalidKey;
};

Example 5

switch _var do
{
    case "0";
    default { hint str ["default", _var] };
    case "3": { hint str ["3", _var] };
    case "1";
    case "4";
    case "2": { hint str ["2", _var] };
};

_var = "0"; // -> ["3", "0"]
_var = "1"; // -> ["2", "1"]
_var = "2"; // -> ["2", "2"]
_var = "3"; // -> ["3", "3"]
_var = "4"; // -> ["2", "4"]
_var = "5"; // -> ["default", "5"]

See also

Control Structures · a:b · case · default

Community notes

ColonelSandersLite

Be careful of the parentheses around the variable you're switching on. If you accidentally use braces instead (e.g: switch { _myVar } do { /*... */ }), it won't error, but will always return default.

Note

This is due to { _myvar } being Code.

Iva

It's possible to use Boolean value as a switch and Code as case. One thing to take special care in such case is that code must be in parentheses. Example:

switch (true) do
{
    case (_boolVar): { someCode };
    case (unit1 distance unit2 > 5): { someCode };
};