private: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "\[ *(https?:\/\/[^ = ]+) +([^= ]+) *\]" to "{{Link|$1|$2}}")
m (Some wiki formatting)
 
(2 intermediate revisions by the same user not shown)
Line 24: Line 24:
|gr1= Variables
|gr1= Variables


|descr= Sets a variable to the innermost scope as demonstrated in Example 3. See also [[param]] and [[params]].
|descr= Sets a variable to the innermost scope (see {{Link|#Example 3}}). See also [[param]] and [[params]].
{{Feature | Informative | [[private]] variables '''must''' start with an underscore: {{hl|c= [[private]] '''{{Color|red|_}}'''myVar1 {{=}} "myVar";}} - see [[Identifier]].}}
{{Feature|informative|[[private]] variables '''must''' start with an underscore: {{hl|c= [[private]] '''{{Color|red|_}}'''myVar1 = "myVar";}} - see [[Identifier]].}}
{{Feature | Warning | '''Always''' make your local variables '''private''' (through [[private]] or [[params]]) in order to avoid [[Variables#Scopes|overwriting a local variable of the same name]].}}
{{Feature|warning|'''Always''' make your local variables '''private''' (through [[private]] or [[params]]) in order to avoid [[Variables#Scopes|overwriting a local variable of the same name]].}}


|s1= [[private]] variableName
|s1= [[private]] variableName
Line 51: Line 51:


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


// identical, but less performant
// identical, but less performant
Line 65: Line 65:


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



Latest revision as of 17:52, 26 February 2024

Hover & click on the images for description

Description

Description:
Sets a variable to the innermost scope (see 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 - Scopes

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)