for forspec: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(use of private keyword)
(Redirect to for)
 
Line 1: Line 1:
{{Command|= Comments
#REDIRECT [[for]]
____________________________________________________________________________________________
 
| arma |= Game name
 
|1.00|= Game version
____________________________________________________________________________________________
 
| Creates cycle, using C like style. See example.
 
<br><br>In Arma 3 use [[private]] keyword when defining any variables for the scope, see example 4. |= Description
____________________________________________________________________________________________
 
| '''for''' forspec|= Syntax
|p1 = forspec: [[Array]]
| [[For Type]] |= Return value
____________________________________________________________________________________________
|x1 = <code> '''for''' [{_x<nowiki>=</nowiki> 1},{_x <<nowiki>=</nowiki> 10},{_x <nowiki>=</nowiki> _x + 1}] [[do]] {[[debugLog]] _x;}  </code>
|x2 = <code> _a = 0; '''for''' [{},{_a <= 10},{_a = _a + 1}] [[do]] {[[debugLog]] _a;};  </code>
|x3 = <code> '''for''' [{_a = 0; _b = 1},{_a <= 10},{_a = _a + 1; _b = _b + _b}] [[do]] {};  //_a = 11; _b = 2048;</code>
|x4 = <code>// BAD CODE
_i = 100;
[[for]] [{_i = 0}, {_i < 5}, {_i = _i + 1}] [[do]] {};
[[hint]] [[str]] _i; // 5
 
// GOOD CODE ([[private]] keyword is recommended)
_i = 100;
[[for]] [{[[private]] _i = 0}, {_i < 5}, {_i = _i + 1}] [[do]] {};
[[hint]] [[str]] _i; // 100</code> |=
 
| [[Control Structures]], [[for do]], [[while]] |= See also
 
}}
 
<h3 style="display:none">Notes</h3>
<dl class="command_description">
<!-- Note Section BEGIN -->
<dd class="notedate">Posted on Apr 15, 2014 - 12:54
<dt class="note">'''[[User:ffur2007slx2_5|ffur2007slx2_5]]'''<dd class="note">
 
*{{GVI|arma 3|1.16}} Please note the difference between [[for forspec]] and [[for do]], [[for forspec]] detects Boolean in each scope while [[for do]] doesn’t. e.g.
{| class="wikitable sortable"
 
! command
! Structure
! Summary
 
|-
| [[for forspec]]
|
  a = 0; b = [[true]];
  [[for]] [{_i = 0},{_i < 10 && b},{_i = _i + 1}] [[do]] {
    a = a + 1;
    [[if]] (a >= 7) [[then]] {b = [[false]]}
  }
| loop can be exited via Boolean control, possible workaround can be like [[BIS_fnc_areEqual]]
 
|-
| [[for do]]
|
  a = 0;
  [[for]] "_i" [[from]] 0 [[to]] 10 [[do]] {
    a = a + 1;
    [[if]] (a >= 7) [[exitwith]] {}
  };
| have to be exited via [[exitWith]]
 
|}
<br>
*Never try to tell a decimal number via binary number in a loop; otherwise the loop will be infinite:
<code>
'''for''' [{_a = 0},{_a != 1},{_a = _a + 0.1}] [[do]] {}; //an infinite loop; _a will never be 1 so the scope will always be true.
</code>
Any binary number behind the decimal point is always the sum of 1/2, 1/4, 1/8, 1/16 etc. so decimal number with odd denominator like 1/3 or 1/10 cannot be exactly equal to each other.
*Avoid too large factorial multiply which may loose the leading indicator in result. And 12 is the biggest accessable factor in this example.
<code>'''for''' [{_a = 2; _b = 1;},{_a < 100},{_a = _a + 1}] [[do]] {_b = _b * _a}; // _b = 1.#INF</code>
<!-- Note Section END -->
</dl>
 
<h3 style="display:none">Bottom Section</h3>
[[Category:Scripting Commands|FORARRAY]]
[[Category:Scripting Commands ArmA|FORARRAY]]
[[Category:Command_Group:_Program_Flow|{{uc:{{PAGENAME}}}}]]

Latest revision as of 21:14, 4 February 2019

Redirect to: