private: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "|r2= Nothing |RETURNVALUE= " to "|r2= Nothing |RETURNVALUE2= ")
Line 7: Line 7:
____________________________________________________________________________________________
____________________________________________________________________________________________


| Sets a variable to the innermost scope as demonstrated in Example 3. One other command that is capable of creating private variables is [[params]].
| Sets a variable to the innermost scope as demonstrated in Example 3. See also [[param]] and [[params]].
<br>Since Arma 3 v1.53.132932 [[private]] can be used as keyword as shown in Example 4. |DESCRIPTION=
{{Informative | [[private]] variables '''must''' start with an underscore: {{Inline code|[[private]] <span style{{=}}"color:red;font-weight:bold">_</span>myVar1 {{=}} "myVar";}}}}
{{Warning | '''ALWAYS''' use the [[private]] keyword to declare local variables in order to avoid the accidental overwriting of the upper-scope's private variables!<br>
See [[Variables#Scope|Scope]] for more information about variable scope.}} |DESCRIPTION=
____________________________________________________________________________________________
____________________________________________________________________________________________


| '''private''' variableName |SYNTAX=
| [[private]] variableName |SYNTAX=
 
|p1= variableName: [[String]] |PARAMETER1=
|p1= variableName: [[String]] |PARAMETER1=
| [[Nothing]] |RETURNVALUE=
| [[Nothing]] |RETURNVALUE=
____________________________________________________________________________________________
|s2= [[private]] variableNameList |SYNTAX2=
|p21= variableNameList: [[Array]] of [[String]]s |PARAMETER21=


|s2= '''private''' variableNameList  |SYNTAX=
|p21= variableNameList: [[Array]] of [[String]]s |PARAMETER1=
|r2= [[Nothing]] |RETURNVALUE2=
|r2= [[Nothing]] |RETURNVALUE2=
____________________________________________________________________________________________
|s3 = [[private]] variable = value &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(''Since Arma 3 v1.53.132932'') |SYNTAX3=


| s3 = '''private''' variable = value &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(''Since Arma 3 v1.53.132932'') |SYNTAX=
|p31= variable: underscored variable, for example ''_myvar'' |PARAMETER31=


|p41= variable: underscored variable, for example ''_myvar''  |PARAMETER1=
|p32= value: [[Anything]]: value to assign to the variable |PARAMETER32=
|p42= value: [[Anything]]: value to assign to the variable |PARAMETER1=


|r3 = [[Nothing]] |RETURNVALUE=
|r3= [[Nothing]] |RETURNVALUE3=
____________________________________________________________________________________________
____________________________________________________________________________________________
   
   
|x1= <code>[[private]] "_varname";</code> |EXAMPLE1=
|x1= <code>[[private]] _varname = "this is my new variable"; {{cc|since {{arma3}} v1.53 only}}
|x2= <code>[[private]] ["_varname1", "_varname2"];</code> |EXAMPLE2=
 
{{cc|identical, but less performant}}
[[private]] "_varname";
_varname = "this is my new variable";</code> |EXAMPLE1=


|x3=<code>_myvar = 123;
|x2= <code>[[private]] ["_varname1", "_varname2"];
[[systemChat]] [[str]] [_myvar]; // -- [123]
_varname1 = "variable 1";
_varname2 = "variable 2";</code> |EXAMPLE2=
 
|x3=<code>_lol =  123; [[call]] {[[hint]] [[str]] [_lol]}; {{cc|[123]}}
_lol =  123; [[call]] { [[private]] "_lol"; [[hint]] [[str]] [_lol] }; {{cc|[any]}}</code> |EXAMPLE3=
 
|x4=<code>_myvar = 123;
[[systemChat]] [[str]] [_myvar]; {{cc|[123]}}
[[call]] {
[[call]] {
[[systemChat]] [[str]] [_myvar]; // -- [123]
[[systemChat]] [[str]] [_myvar]; {{cc|[123]}}
[[private]] "_myvar";
[[private]] "_myvar";
[[systemChat]] [[str]] [_myvar]; // -- [any]
[[systemChat]] [[str]] [_myvar]; {{cc|[any]}}
_myvar = 345;
_myvar = 345;
[[systemChat]] [[str]] [_myvar]; // -- [345]
[[systemChat]] [[str]] [_myvar]; {{cc|[345]}}
};
};
[[systemChat]] [[str]] [_myvar]; // -- [123] </code>|=
[[systemChat]] [[str]] [_myvar]; {{cc|[123]}}</code>|Example4=


|x4= Usage of [[private]] as keyword: <code>[[private]] _myvar = 123;
| [[param]], [[params]], [[Variables#Scope|Scope]] |SEEALSO=
//is the same as
[[private]] "_myvar";
_myvar = 123;</code> |EXAMPLE4=
|x5=<code>_lol =  123; [[call]] {[[hint]] [[str]] [_lol]}; // [123]
_lol =  123; [[call]] {[[private]] "_lol"; [[hint]] [[str]] [_lol]}; // [any]</code> |EXAMPLE5=
| [[params]], [[Variables#Scope|Scope]] |SEEALSO=
}}
}}


Line 53: Line 66:
<dl class="command_description">
<dl class="command_description">
<!-- Note Section BEGIN -->
<!-- Note Section BEGIN -->
<dd class="notedate">Posted on Sep 24, 2009 15:04
 
<dt class="note">'''[[User:ColonelSandersLite|ColonelSandersLite]]'''
<dd class="note"><br>
The example provided is fairly worthless without a context.<br>
Using the private command allows you to declare a variable in the current scope, without regards to variables in a higher scope with the same name.  Note that if you try to declare a variable without an underscore (meaning it's global) with the private command, it will cause an error.  Specifically: "Error Local variable in global space".<br>
Here's a code example with output for your benefit.<br>
<code>
_foo = 10;
if (true) then
{
    private ["_foo"];
    _foo = 5;
    player sideChat format ["%1", _foo];
};
player sideChat format ["%1", _foo];
</code>
In this example, the first sidechat (innermost) returns 5 while the second sidechat (outermost) returns 10.<br>
<code>
if (true) then
{
    private ["_bar"];
    _bar = 5;
    player sideChat format ["%1", _bar];
};
</code>
In this example, the private command does nothing and is simply a waste of code, assuming there is no higher level code to interfere with the if statement.<br>
<dd class="notedate">Posted on August 4, 2010
<dd class="notedate">Posted on August 4, 2010
<dt class="note">'''[[User:Faguss|Faguss]]'''
<dt class="note">[[User:Faguss|Faguss]]
<dd class="note">The higher scope is also the script from which the function has been called.<br>
<dd class="note">The higher scope is also the script from which the function has been called.<br>
If you've got in the script:
in '''script2.sqf''':
<code>
<code>_a = 2;</code>
_a = 1;
in '''script1.sqf''':
call compile loadFile "function.sqf";
<code>_a = 1;
hint format ["%1", _a];
[[call]] [[compile]] [[preprocessFileLineNumbers]] "script2.sqf";
</code>
[[hint]] format ["%1", _a];</code>
And in the <i>function.sqf</i>:
<br>
<code>
Game will display 2.<br>
_a = 2;
Inserting {{Inline code|[[private]] "_a"}} in the function prevents the change and so number 1 will be displayed on the screen.
</code>
 
Game will display 2.<br><br>
Inserting <i>private "_a"</i> in the function prevents the change and so number 1 will be displayed on the screen.
<dd class="notedate">Posted on February 25, 2015 - 17:06 (UTC)</dd>
<dd class="notedate">Posted on February 25, 2015 - 17:06 (UTC)</dd>
<dt class="note">[[User:DreadedEntity|DreadedEntity]]</dt>
<dt class="note">[[User:DreadedEntity|DreadedEntity]]</dt>
Line 99: Line 85:
Recursive loops require the use of [[private]]. Without it, your variables will be overwritten.
Recursive loops require the use of [[private]]. Without it, your variables will be overwritten.
</dd>
</dd>
<dd class="notedate">Posted on January 31, 2018 - 10:30 (UTC)</dd>
 
<dt class="note">Dscha</dt>
<dd class="notedate">Posted on January 31, 2018 - 10:37 (UTC)</dd>
<dd class="note">More examples!<br>
<dt class="note">[[User:654wak654|654wak654]]</dt>
<code>[[if]] ([[true]]) [[then]] { //new scope
<dd class="note">
_localVar = "some string";
This command has the same functionality as javascript's let keyword.<br>
[[systemChat]] _localVar; // = "some string"
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
};
[[systemChat]] _localVar; // = ERROR _localVar doesn't exist in the outer Scope
</code>
<code>_localVar = "bla";
[[if]] ([[true]]) [[then]] { //new scope
_localVar = "some string";
[[systemChat]] _localVar; // = "some string"
};
[[systemChat]] _localVar; // = "some string"
</code>
<code>_localVar = "bla";
[[if]] ([[true]]) [[then]] {
[[private]] _localVar = "some string";
[[systemChat]] _localVar; // = "some string"
};
[[systemChat]] _localVar; // = "bla"
</code>
<code>_localVar = "bla";
[[if]] ([[true]]) [[then]] { //new scope
[[private]] _localVar = "some string";
[[if]] ([[true]]) [[then]] { //new scope
[[private]] _localVar = "some other string";
[[systemChat]] _localVar; // = "some other string"
};
[[systemChat]] _localVar; // = "some string"
};
[[systemChat]] _localVar; // = "bla"
</code>
</dd>
</dd>


Line 140: Line 98:
<h3 style="display:none">Bottom Section</h3>
<h3 style="display:none">Bottom Section</h3>


[[Category:Scripting Commands|PRIVATE]]
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands OFP 1.96|PRIVATE]]
[[Category:Scripting Commands OFP 1.99|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands OFP 1.99|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands OFP 1.96|PRIVATE]]
[[Category:Scripting Commands ArmA|PRIVATE]]
[[Category:Scripting Commands ArmA|PRIVATE]]
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting_Commands_Take_On_Helicopters|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting_Commands_Take_On_Helicopters|{{uc:{{PAGENAME}}}}]]
<!-- CONTINUE Notes -->
<dl class="command_description">
<dd class="notedate">Posted on January 31, 2018 - 10:37 (UTC)</dd>
<dt class="note">[[User:654wak654|654wak654]]</dt>
<dd class="note">
This command has the same functionality as javascript's let keyword.<br>
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
</dd>
</dl>
<!-- DISCONTINUE Notes -->

Revision as of 16:52, 4 September 2019

Hover & click on the images for description

Description

Description:
Sets a variable to the innermost scope as demonstrated in Example 3. See also param and params.
private variables must start with an underscore: private _myVar1 = "myVar";
ALWAYS use the private keyword to declare local variables in order to avoid the accidental overwriting of the upper-scope's private variables!
See Scope for more information about variable scope.
Groups:
Uncategorised

Syntax 1

Syntax:
private variableName
Parameters:
variableName: String
Return Value:
Nothing

Syntax 2

Syntax:
private variableNameList
Parameters:
variableNameList: Array of Strings
variable: underscored variable, for example _myvar
value: Anything: value to assign to the variable
Return Value:
Nothing

Syntax 3

Syntax:
private variable = value         (Since Arma 3 v1.53.132932)
Return Value:
Nothing

Examples

Example 1:
private _varname = "this is my new variable"; // since Arma 3 v1.53 only // identical, but less performant private "_varname"; _varname = "this is my new variable";
Example 2:
private ["_varname1", "_varname2"]; _varname1 = "variable 1"; _varname2 = "variable 2";
Example 3:
_lol = 123; call {hint str [_lol]}; // [123] _lol = 123; call { private "_lol"; hint str [_lol] }; // [any]
Example 4:
_myvar = 123; systemChat str [_myvar]; // [123] call { systemChat str [_myvar]; // [123] private "_myvar"; systemChat str [_myvar]; // [any] _myvar = 345; systemChat str [_myvar]; // [345] }; systemChat str [_myvar]; // [123]

Additional Information

See also:
paramparamsScope

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

Notes

Posted on August 4, 2010
Faguss
The higher scope is also the script from which the function has been called.
in script2.sqf: _a = 2; in script1.sqf: _a = 1; call compile preprocessFileLineNumbers "script2.sqf"; hint format ["%1", _a];
Game will display 2.
Inserting private "_a" in the function prevents the change and so number 1 will be displayed on the screen.
Posted on February 25, 2015 - 17:06 (UTC)
DreadedEntity
Recursive loops require the use of private. Without it, your variables will be overwritten.
Posted on January 31, 2018 - 10:37 (UTC)
654wak654
This command has the same functionality as javascript's let keyword.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let

Bottom Section