switch do: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Moved some of the notes into the description. Removed old notes which are now part of either the description or the examples. Formatted the code in the notes.)
(Redirect to switch)
Tag: New redirect
 
(18 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Command|Comments=
#REDIRECT [[switch]]
____________________________________________________________________________________________
 
| arma |Game name=
 
|gr1= Program Flow |GROUP1=
 
 
 
|1.00|Game version=
____________________________________________________________________________________________
 
| 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.<br>
<br>
If a case has no code block, the code of the next case will automatically be executed. This makes it possible to formulate a logical '''"or"''' for cases which otherwise would contain the exact same code. (See example 4 below)<br>
The [[default]] block will be executed '''only if''' no case matches, no matter at which position inside the switch it is. It is not a case, and will '''never''' be entered by fallthrough.<br>
 
{{Informative|[[String]] comparison is case-sensitive. Use [[toUpper]], [[toLower]], [[toLowerANSI]] or [[toUpperANSI]] to force all [[String|strings]] to the same case.}}</br>
{{Informative|If no [[default]] block is provided and no [[case]] is matched, the default value [[true]] is returned. Otherwise it returns whatever the valid case block returns.}}
|DESCRIPTION=
____________________________________________________________________________________________
 
| switch '''do''' block |SYNTAX=
 
|p1= switch: [[Switch Type]] |PARAMETER1=
 
|p2= block: [[Code]] |PARAMETER2=
 
| [[Anything]] or [[true]] |RETURNVALUE=
____________________________________________________________________________________________
 
|x1= <code>[[switch]] (_a) [[do]] { [[case]] 1 : { /*...code...*/ }; [[case]] 2 : { /*...code...*/ }; [[default]] { /*...code...*/ }; };</code>
<br>
<code>[[switch]] (_condition) [[do]] {
    [[case]] 1: { [[hint]] "1" };
    [[case]] 2: { [[hint]] "2" };
    [[default]] { [[hint]] "default" };
};</code>
<br>
<code>[[switch]] (_condition) [[do]] {
    [[case]] "string1";
    [[case]] "string2": { [[hint]] "string1 or string2" };
    [[case]] "string3";
    [[case]] "string4": { [[hint]] "string3 or string4" };
    [[default]] { [[hint]] "default" };
};</code> |EXAMPLE1=
 
|x2= <code>_color = [[switch]] ([[side]] [[player]]) [[do]] {
    [[case]] [[west]]: { "ColorGreen" };
    [[case]] [[east]]: { "ColorRed" };
};</code>
 
|x3= <code>_fn_moveForward = { /*...code...*/ };
_fn_moveBackward = { /*...code...*/ };
_fn_invalidKey = { /*...code...*/ };
[[switch]] [[true]] [[do]] {
    [[case]] (_dikCode [[in]] [[actionKeys]] "MoveForward"): _fn_moveForward;
    [[case]] (_dikCode [[in]] [[actionKeys]] "MoveBackward"): _fn_moveBackward;
    [[default]] _fn_invalidKey;
};</code> |EXAMPLE3=
 
|x4= <code>[[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] };
};</code>
<pre>_var = "0"; //-> ["3", "0"]
_var = "1"; //-> ["2", "1"]
_var = "2"; //-> ["2", "2"]
_var = "3"; //-> ["3", "3"]
_var = "4"; //-> ["2", "4"]
_var = "5"; //-> ["default", "5"]</pre> |EXAMPLE4=
 
| [[Control Structures]], [[a:b]], [[case]], [[default]] |SEEALSO=
 
}}
 
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Armed Assault|{{uc:{{PAGENAME}}}}]]
 
<h3 style="display:none">Notes</h3>
<dl class="command_description">
<!-- Note Section BEGIN -->
 
<dd class="notedate">Posted on 07 Aug, 2008
<dt class="note">[[User:ColonelSandersLite|ColonelSandersLite]]<dd class="note"><br>
Be careful of the parenthesis around the variable you're switching on.  If you accidentally use braces instead (ex: switch {_myVar} do{...), it won't error, but will always return default.<br>
 
<dd class="notedate">Posted on 06 Oct, 2009
<dt class="note">[[User:Iva|Iva]]<dd class="note">
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:
<code>
[[switch]] ([[true]]) [[do]]
{
[[case]] (_boolVar): {someCode};
[[case]] (unit1 [[distance]] unit2 > 5): {someCode};
};
</code>
 
 
<!-- Note Section END -->
</dl>
 
<!-- CONTINUE Notes -->
<dl class="command_description">
<dd class="notedate">Posted on November 6, 2014 - 16:33 (UTC)</dd>
<dt class="note">[[User:Eggbeast|Eggbeast]]</dt>
<dd class="note">
BEWARE:
<br>Sometimes, and I'm unsure why, numbers are treated differently (A2OA 1.63) with quote-wraps that worked
<br>in earlier code now not working unless quote-wraps are removed, with otherwise identical code.
<br>
<code>_number1 [[=]] ([[floor]] [[random]] 10)
[[switch]] (_number1) [[do]]
{
[[case]] "0"[[:]]
{
  _[[vehicle]] [[set]]objecttexture[0,"\mymodpath\textures\num1.paa"];
};
//etc
};
</code>
<br>
<br>this one below works, and the one above stopped working with 1.63
<br>
<code>
[[switch]] (_number1) [[do]]
{
[[case]] 0[[:]]
{
  _[[vehicle]] [[set]]objecttexture[0,"\mymodpath\textures\num1.paa"];
};
//etc
};
</code>
</dd>
</dl>
<!-- DISCONTINUE Notes -->
 
<!-- CONTINUE Notes -->
<dl class="command_description">
<dd class="notedate">Posted on Nobember 1, 2020 - 10:05 (UTC)</dd>
<dt class="note">[[User:Freddo3000|Freddo3000]]</dt>
<dd class="note">
You are able to call code within the switch statements, such as:
 
<code>_myFunc [[=]] {
    [[systemChat]] "0";
    [[case]] 1: {[[systemChat]] "1"};
    [[systemChat]] "2";
};
 
_myParameter [[=]] 1;
 
[[switch]] (_myParameter) [[do]] {
    _myParameter [[call]] _myFunc;
    [[case]] 1: {[[systemChat]] "4"};
    [[systemChat]] "3";
    [[default]] {[[systemChat]] "-1";};
};</code>
 
However the order in which it is executed is difficult to make sense of, see the code comment.
 
This is used by [[BIS_fnc_missionConversations]] and [[BIS_fnc_missionTasks]]
 
</dd>
</dl>
<!-- DISCONTINUE Notes -->

Latest revision as of 16:14, 6 June 2021

Redirect to: