breakOut: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - " \| ?p22 ?=.*\|PARAMETER1= *" to " |p22=$1|PARAMETER22=")
m (Fix bad regex effects)
Tag: Undo
Line 5: Line 5:


|gr1= Program Flow |GROUP1=
|gr1= Program Flow |GROUP1=


|1.00|Game version=
|1.00|Game version=
Line 14: Line 12:


<br><br>
<br><br>
Since Arma 3 v1.47, [[breakOut]] can be used to return a ''value''. It is the closest SQF comes to having "return" like operation. |DESCRIPTION=
Since Arma 3 v1.47, [[breakOut]] can be used to return a ''value''. It is the closest SQF comes to having "return"-like operation. |DESCRIPTION=
____________________________________________________________________________________________
____________________________________________________________________________________________


Line 23: Line 21:
| [[Nothing]] |RETURNVALUE=
| [[Nothing]] |RETURNVALUE=


| s2= value '''breakOut''' name &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (''since Arma 3 v1.47'') |SYNTAX2=
|s2= value '''breakOut''' name {{since|arma3|1.47|y}} |SYNTAX2=


|p21= value: [[Anything]] - a value to return |PARAMETER21=
|p21= value: [[Anything]] - a value to return |PARAMETER21=
|p22=|PARAMETER22=
|p22=|PARAMETER22=


|r2=(.*)|RETURNVALUE2=
|r2= [[Anything]] |RETURNVALUE2=


|x1= <code>[[scopeName]] "main";
|x1= <code>[[scopeName]] "main";
while {[[true]]} do {
[[while]] {[[true]]} [[do]] {
[[scopeName]] "loop1";
[[scopeName]] "loop1";
while {[[true]]} do {
[[while]] {[[true]]} [[do]] {
[[scopeName]] "loop2";
[[scopeName]] "loop2";
if (condition1) then {[[breakTo]] "main"}; // Breaks all scopes and return to "main"
[[if]] (condition1) [[then]] {[[breakTo]] "main"}; {{cc|Breaks all scopes and return to "main"}}
if (condition2) then {[[breakOut]] "loop2"}; // Breaks scope named "loop2"
[[if]] (condition2) [[then]] {[[breakOut]] "loop2"}; {{cc|Breaks scope named "loop2"}}
[[sleep]] 1;
[[sleep]] 1;
};
};
Line 49: Line 47:
};
};
345
345
}; // call returns 123</code> |EXAMPLE2=
}; {{cc|call returns 123}}</code> |EXAMPLE2=
____________________________________________________________________________________________
____________________________________________________________________________________________


| [[scopeName]], [[breakTo]], [[exitWith]] |SEEALSO=
| [[scopeName]], [[breakTo]], [[exitWith]] |SEEALSO=
}}
}}


Line 87: Line 84:
<h3 style="display:none">Bottom Section</h3>
<h3 style="display:none">Bottom Section</h3>


[[Category:Scripting Commands|BREAKOUT]]
[[Category:Scripting Commands Arma 2|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Armed Assault|BREAKOUT]]
[[Category:Scripting Commands Arma 2|BREAKOUT]]
[[Category:Command_Group:_Variables|{{uc:{{PAGENAME}}}}]]
[[Category:Command_Group:_Program_Flow|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Arma 2|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Arma 2|{{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}}}}]]
[[Category:Command_Group:_Variables|{{uc:{{PAGENAME}}}}]]
[[Category:Command_Group:_Program_Flow|{{uc:{{PAGENAME}}}}]]


<!-- CONTINUE Notes -->
<!-- CONTINUE Notes -->

Revision as of 19:34, 24 September 2020

-wrong parameter ("Arma") defined!-1.00
Hover & click on the images for description

Description

Description:
Breaks the code execution out of scope {} named name. nil is returned. Scope name can be assigned using scopeName command.

Since Arma 3 v1.47, breakOut can be used to return a value. It is the closest SQF comes to having "return"-like operation.
Groups:
Program Flow

Syntax

Syntax:
breakOut name
Parameters:
name: String - name of the scope (previously set with scopeName)
Return Value:
Nothing

Alternative Syntax

Syntax:
value breakOut name Template:since
Parameters:
value: Anything - a value to return
Return Value:
Anything

Examples

Example 1:
scopeName "main"; while {true} do { scopeName "loop1"; while {true} do { scopeName "loop2"; if (condition1) then {breakTo "main"}; // Breaks all scopes and return to "main" if (condition2) then {breakOut "loop2"}; // Breaks scope named "loop2" sleep 1; }; sleep 1; };
Example 2:
call { scopeName "main"; call { 123 breakOut "main" }; 345 }; // call returns 123

Additional Information

See also:
scopeNamebreakToexitWith

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 19 Aug, 2008
alef
When "name" is nil, the command is ignored.
When "name" is an undefined scope name or "", the script quits current scope. if (true) then { hint "1"; breakOut nil; hint "2"; }; //result "2" if (true) then { hint "1"; breakOut ""; hint "2"; }; //result "1" if (true) then { hint "1"; breakOut "dskfhdsklfh"; hint "2"; }; //result "1"

Bottom Section

Posted on August 27, 2015 - 16:09 (UTC)
Polaris
breakOut can still be used if multiple scopes share identical names. It will simply break out of the nearest scope that matches the name parameter you've used. For example: call { scopeName "Main"; //Parent Main call { scopeName "Main"; //Child Main "String" breakOut "Main"; //Will break out of child main and return "String" to parent main }; }; Therefore you are able to consistently reuse scope names such as "Main", "Child", "Primary", "Secondary", etc throughout functions without worrying about having to ensure you create unique names for each scope.