switch do: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - " <h3 style="display:none">Notes</h3>" to "")
(Redirect to switch)
Tag: New redirect
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{Command
#REDIRECT [[switch]]
 
| arma1
 
|gr1= Program Flow
 
 
 
|1.00
 
| 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.}}
 
 
| switch '''do''' block
 
|p1= switch: [[Switch Type]]
 
|p2= block: [[Code]]
 
| [[Anything]] or [[true]]
 
|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>
 
|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>
 
|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>
 
| [[Control Structures]], [[a:b]], [[case]], [[default]]
 
}}
 
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]]
{{GameCategory|arma1|Scripting Commands}}
 
<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>
 
<!--
<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>
-->
 
<!-- 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: