private: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "\|seealso= *\[\[([^ ]+)\]\], \[\[([^ ]+)\]\]" to "|seealso= $1 $2")
m (Some wiki formatting)
Line 50: Line 50:
|r3= [[Nothing]]
|r3= [[Nothing]]


|x1= <code>[[private]] _varname = "this is my new variable"; {{cc|since {{arma3}} v1.53 only}}
|x1= <sqf>private _varname = "this is my new variable"; // since Arma 3 v1.54


{{cc|identical, but less performant}}
// identical, but less performant
[[private]] "_varname";
private "_varname";
_varname = "this is my new variable";</code>
_varname = "this is my new variable";
</sqf>


|x2= <code>[[private]] ["_varname1", "_varname2"];
|x2= <sqf>
private ["_varname1", "_varname2"];
_varname1 = "variable 1";
_varname1 = "variable 1";
_varname2 = "variable 2";</code>
_varname2 = "variable 2";
</sqf>


|x3=<code>_lol =  123; [[call]] { [[hint]] [[str]] [_lol] }; {{cc|[123]}}
|x3= <sqf>
_lol =  123; [[call]] { [[private]] "_lol"; [[hint]] [[str]] [_lol] }; {{cc|[any]}}</code>
_lol =  123; call { hint str [_lol] }; // [123]
_lol =  123; call { private "_lol"; hint str [_lol] }; // [any]
</sqf>


|x4=<code>_myvar = 123;
|x4= <sqf>
[[systemChat]] [[str]] [_myvar]; {{cc|[123]}}
_myvar = 123;
[[call]] {
systemChat str [_myvar]; // [123]
[[systemChat]] [[str]] [_myvar]; {{cc|[123]}}
call {
[[private]] "_myvar";
systemChat str [_myvar]; // [123]
[[systemChat]] [[str]] [_myvar]; {{cc|[any]}}
private "_myvar";
systemChat str [_myvar]; // [any]
_myvar = 345;
_myvar = 345;
[[systemChat]] [[str]] [_myvar]; {{cc|[345]}}
systemChat str [_myvar]; // [345]
};
};
[[systemChat]] [[str]] [_myvar]; {{cc|[123]}}</code>
systemChat str [_myvar]; // [123]
</sqf>


|seealso= [[param]] [[params]], {{HashLink|Variables#Scope}}
|seealso= [[param]] [[params]] {{HashLink|Variables#Scope}}
}}
}}


<dl class="command_description">
{{Note
 
|user= Faguss
<dt><dt>
|timestamp= 20100804133000
<dd class="notedate">Posted on August 4, 2010</dd>
|text= The higher scope is also the script from which the function has been called.<br>
<dt class="note">[[User:Faguss|Faguss]]</dt>
<dd class="note">The higher scope is also the script from which the function has been called.<br>
in '''script2.sqf''':
in '''script2.sqf''':
<code>_a = 2;</code>
<sqf>_a = 2;</sqf>
in '''script1.sqf''':
in '''script1.sqf''':
<code>_a = 1;
<sqf>
[[call]] [[compile]] [[preprocessFileLineNumbers]] "script2.sqf";
_a = 1;
[[hint]] format ["%1", _a];</code>
call compile preprocessFileLineNumbers "script2.sqf";
<br>
hint format ["%1", _a];
</sqf>
Game will display 2.<br>
Game will display 2.<br>
Inserting {{ic|[[private]] "_a"}} in the function prevents the change and so number 1 will be displayed on the screen.
Inserting {{ic|[[private]] "_a"}} in the function prevents the change and so number 1 will be displayed on the screen.
<dt><dt>
}}
<dd class="notedate">Posted on February 25, 2015 - 17:06 (UTC)</dd>
 
<dt class="note">[[User:DreadedEntity|DreadedEntity]]</dt>
{{Note
<dd class="note">
|user= DreadedEntity
Recursive loops require the use of [[private]]. Without it, your variables will be overwritten.
|timestamp= 20150225170600
</dd>
|text= Recursive loops require the use of [[private]]. Without it, your variables will be overwritten.
}}


<dt><dt>
{{Note
<dd class="notedate">Posted on January 31, 2018 - 10:37 (UTC)</dd>
|user= 654wak654
<dt class="note">[[User:654wak654|654wak654]]</dt>
|timestamp= 20180131103700
<dd class="note">
|text= This command is ''similar'' to javascript's [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let let] keyword.<br>
This command is ''similar'' to javascript's [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let let] keyword.<br>
'''EDIT:''' in the way that it scopes the variable to the innermost scope. Otherwise, let and private can behave differently - [[User:Lou Montana|Lou Montana]] ([[User talk:Lou Montana|talk]])
'''EDIT:''' in the way that it scopes the variable to the innermost scope. Otherwise, let and private can behave differently - [[User:Lou Montana|Lou Montana]] ([[User talk:Lou Montana|talk]])
</dd>
}}
 
</dl>

Revision as of 17:04, 4 April 2022

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"; - see Identifier.
Always make your local variables private (through private or params) in order to avoid overwriting a local variable of the same name.
Groups:
Variables

Syntax 1

Syntax:
private variableName
Parameters:
variableName: String - e.g "_myVar"
Return Value:
Nothing

Syntax 2

Syntax:
private variableNameList
Parameters:
variableNameList: Array of Strings - e.g ["_target", "_damage"]
Return Value:
Nothing

Syntax 3

Syntax:
private _identifier = value
Parameters:
_identifier: underscored variable name, for example _myVar
value: Anything: value to assign to the variable
Return Value:
Nothing

Examples

Example 1:
private _varname = "this is my new variable"; // since Arma 3 v1.54 // 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:
param params Variables - Scope

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
Faguss - c
Posted on Aug 04, 2010 - 13:30 (UTC)
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.
DreadedEntity - c
Posted on Feb 25, 2015 - 17:06 (UTC)
Recursive loops require the use of private. Without it, your variables will be overwritten.
654wak654 - c
Posted on Jan 31, 2018 - 10:37 (UTC)
This command is similar to javascript's let keyword.
EDIT: in the way that it scopes the variable to the innermost scope. Otherwise, let and private can behave differently - Lou Montana (talk)