if: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "|Game name=" to "|Game name= |gr1= Program Flow |GROUP1= ")
m (Text replacement - "<sqf>([^↵][^<]*↵[^<]*)<\/sqf>" to "<sqf> $1 </sqf>")
 
(38 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Command|Comments=
{{RV|type=command
____________________________________________________________________________________________


| ofpr |Game name=
|game1= ofp
|version1= 1.85


|gr1= Program Flow |GROUP1=
|game2= ofpe
|version2= 1.00


|game3= arma1
|version3= 1.00


|game4= arma2
|version4= 1.00


|1.85|Game version=
|game5= arma2oa
____________________________________________________________________________________________
|version5= 1.50


| This operator creates a [[If Type]] which is used in the if-construct as described [[Control_Structures#if-Statement|here]]. |DESCRIPTION=
|game6= tkoh
____________________________________________________________________________________________
|version6= 1.00


| '''if''' condition |SYNTAX=
|game7= arma3
|version7= 0.50


|p1= condition: [[Boolean]] expression. If it evaluates as 'true', the 'then' clause is executed.  Otherwise, the 'else' clause (if present) is executed. |PARAMETER1=
|gr1= Program Flow


| [[If Type]] - Predicate which will execute 1st or 2nd option when used. This predicate is used in [[then]] or [[exitWith]] commands. |RETURNVALUE=
|descr= This operator creates a [[If Type]] which is used in the if-construct as described [[Control_Structures#if-Statement|here]].
____________________________________________________________________________________________


|x1= <code>_retVal = [[if]] (1 > 0) [[then]] { "It's true" } [[else]] { "It's false" };
|s1= [[if]] condition
[[hint]] [[str]] _retVal</code> |EXAMPLE1=
____________________________________________________________________________________________


|x2 = <code>_val = [[if]] ([[true]]) [[then]] [ { "true" }, { "false" } ];
|p1= condition: [[Boolean]] - if it evaluates as [[true]], the [[then]] clause is executed.  Otherwise, the [[else]] clause (if present) is executed
[[hint]] _val;</code>|EXAMPLE2=
____________________________________________________________________________________________


| [[else]], [[exitWith]], [[then]], [[Control Structures]], [[Code_Optimisation#Lazy_evaluation|Lazy evaluation]] |SEEALSO=
|r1= [[If Type]] - predicate which will execute 1st or 2nd option when used. This predicate is used in [[then]] or [[exitWith]] commands


|x1= <sqf>
_retVal = if (1 > 0) then { "It's true" } else { "It's false" };
hint str _retVal;
</sqf>
|x2= <sqf>
_val = if (true) then [{ "true" }, { "false" }];
hint _val;
</sqf>
|seealso= [[else]] [[exitWith]] [[then]] [[Control Structures]] [[Code_Optimisation#Lazy_evaluation|Lazy evaluation]]
}}
{{Note
|user= Ceeeb
|timestamp= 20070131040800
|text= Any _local variables you declare within the body of an [[if]]/[[then]] 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.
}}
}}


<h3 style="display:none">Notes</h3>
{{Note
<dl class="command_description">
|user= Galzohar
<!-- Note Section BEGIN -->
|timestamp= 20100117024000
<dd class="notedate">Posted on Jan 31, 2007 - 04:08
|text= If the condition is nil then neither the "then" nor the "else" section get executed, but the script will proceed with no error messages.<br>
<dt class="note">[[User:Ceeeb|Ceeeb]]<dd class="note">
Any _local variables you declare within the body of an [[if]]/[[then]] 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.
<dd class="notedate">Posted on Jan 17, 2010 - 02:40
<dt class="note">[[User:Galzohar|Galzohar]]<dd class="note">
(A2 1.05) If the condition is nil then neither the "then" nor the "else" section get executed, but the script will proceed with no error messages.<br><br>
Example code:
Example code:
<code>
<sqf>
[[hint]] "script started"; //will get executed
systemChat "script started"; // will get executed
[[if]] (nil) [[then]]
if (nil) then
{
{
[[hint]] "true"; // will never get executed
systemChat "true"; // will never get executed
}
}
[[else]]
else
{
{
[[hint]] "false"; // will never get executed
systemChat "false"; // will never get executed
};
};
[[sleep]] 3;
systemChat "script ended"; // will get executed
[[hint]] "script ended"; //will get executed</code>
</sqf>
<!-- Note Section END -->
|game= arma2
</dl>
|version= 1.05
}}


<h3 style="display:none">Bottom Section</h3>
{{Note
|user= AgentRev
|timestamp= 20150605093500
|text= 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;</sqf>
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</sqf>
}}


 
{{Note
[[Category:Scripting Commands|IF]]
|user= DreadedEntity
[[Category:Scripting Commands OFP 1.99|{{uc:{{PAGENAME}}}}]]
|timestamp= 20220519011146
[[Category:Scripting Commands OFP 1.96|IF]]
|text= When using '''if''' to assign values to a variable, if you not have an [[else]] block it is treated as [[nil]] and returned, setting the variable value to [[nil]]. A3 2.08.149102
[[Category:Scripting Commands Armed Assault|IF]]
<sqf>
 
private _myVar = "value";
[[Category:Command Group: Program Flow|IF]]
private _condition = false;
[[Category:Scripting Commands Arma 2|{{uc:{{PAGENAME}}}}]]
_myVar = if (_condition) then { "another value" }; //perfectly valid sqf
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
systemChat str (isNil "_myVar"); //returns true
[[Category:Scripting Commands Take On Helicopters|{{uc:{{PAGENAME}}}}]]
//_myVar is now nil
 
_myVar = if (_condition) then { "another value" } else { "value" };
<!-- CONTINUE Notes -->
systemChat _myVar; //returns "value"
<dl class="command_description">
</sqf>
<dd class="notedate">Posted on June 5, 2015 - 09:35 (UTC)</dd>
This behavior can be both desirable and undesirable depending on your needs
<dt class="note">[[User:AgentRevolution|AgentRevolution]]</dt>
}}
<dd class="note">
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:
<code>_result = [falseValue, trueValue] [[select]] condition;</code>
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:
<code>_result = [1,-1] select (_this < 0); // If _this is less than 0, _result will be equal to -1, otherwise it will be 1</code>
This feature was added in Arma 3.
</dd>
</dl>
<!-- DISCONTINUE Notes -->

Latest revision as of 19:43, 3 September 2024

Hover & click on the images for description

Description

Description:
This operator creates a If Type which is used in the if-construct as described here.
Groups:
Program Flow

Syntax

Syntax:
if condition
Parameters:
condition: Boolean - if it evaluates as true, the then clause is executed. Otherwise, the else clause (if present) is executed
Return Value:
If Type - predicate which will execute 1st or 2nd option when used. This predicate is used in then or exitWith commands

Examples

Example 1:
_retVal = if (1 > 0) then { "It's true" } else { "It's false" }; hint str _retVal;
Example 2:
_val = if (true) then [{ "true" }, { "false" }]; hint _val;

Additional Information

See also:
else exitWith then Control Structures Lazy evaluation

Notes

Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Ceeeb - c
Posted on Jan 31, 2007 - 04:08 (UTC)
Any _local variables you declare within the body of an if/then 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 - c
Posted on Jan 17, 2010 - 02:40 (UTC)

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:

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 - c
Posted on Jun 05, 2015 - 09:35 (UTC)
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:
_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:
_result = [1,-1] select (_this < 0); // if _this is less than 0, _result will be equal to -1, otherwise it will be 1
DreadedEntity - c
Posted on May 19, 2022 - 01:11 (UTC)
When using if to assign values to a variable, if you not have an else block it is treated as nil and returned, setting the variable value to nil. A3 2.08.149102
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