Difference between revisions of "Function"

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Fixed typo.)
m (sectioned off, sections for OFP and ARMA might be worth seperating noting differences.)
Line 1: Line 1:
'''Description:'''
+
==Introduction==
  
 
While Sqs [[Script syntax|script syntax]] is line based, functions (see [[call]], [[execVM]], [[compile]], [[then]], [[do]]) are based on structured expressions. End-of-line has no special meaning - it is considered to be equivalent to space or semicolon, and is therefore required, even when ending line.
 
While Sqs [[Script syntax|script syntax]] is line based, functions (see [[call]], [[execVM]], [[compile]], [[then]], [[do]]) are based on structured expressions. End-of-line has no special meaning - it is considered to be equivalent to space or semicolon, and is therefore required, even when ending line.
Line 6: Line 6:
  
 
Starting with Armed Assault there exist [[Script|scripts]] which use the same structured expression syntax as functions, but can wait suspended, using [[sleep]] or [[waitUntil]]. While '''SQS scripts''' still work, they '''are considered deprecated''' and wherever possible, structured syntax scripts should be used instead.''
 
Starting with Armed Assault there exist [[Script|scripts]] which use the same structured expression syntax as functions, but can wait suspended, using [[sleep]] or [[waitUntil]]. While '''SQS scripts''' still work, they '''are considered deprecated''' and wherever possible, structured syntax scripts should be used instead.''
 +
 +
==Language Constructs==
  
 
Main language contructs used in functions are:
 
Main language contructs used in functions are:
 
*[[if]]..[[then]]..[[else]]
 
*[[if]]..[[then]]..[[else]]
 
*[[while]]..[[do]]
 
*[[while]]..[[do]]
*Curled braces
+
*Curled braces '''{}''
 
*Multiple commands (including assigment commands) are delimited with a semicolon.
 
*Multiple commands (including assigment commands) are delimited with a semicolon.
 
  
 
Result of the last expression evaluated is returned as a function result.
 
Result of the last expression evaluated is returned as a function result.
Line 18: Line 19:
 
This can be [[Nothing]] when a function returns no value.
 
This can be [[Nothing]] when a function returns no value.
  
 
+
==Examples==
 
<b>Example 1</b> (max.sqf)
 
<b>Example 1</b> (max.sqf)
  
Line 38: Line 39:
 
  } [[forEach]] _this
 
  } [[forEach]] _this
  
 
+
==Notes==
 
Due to line-based nature of Sqs scripts it is not possible to create multiline string constants in them.<br>
 
Due to line-based nature of Sqs scripts it is not possible to create multiline string constants in them.<br>
 
To overcome this limitation you can store multiline in separate files, and load them using [[loadFile]] or [[preprocessFile]] functions (the second uses C-like preprocessor with // or /* */ comments and #define macros).<br>
 
To overcome this limitation you can store multiline in separate files, and load them using [[loadFile]] or [[preprocessFile]] functions (the second uses C-like preprocessor with // or /* */ comments and #define macros).<br>

Revision as of 17:54, 27 September 2006

Introduction

While Sqs script syntax is line based, functions (see call, execVM, compile, then, do) are based on structured expressions. End-of-line has no special meaning - it is considered to be equivalent to space or semicolon, and is therefore required, even when ending line.

Note: Sqs Scripts can do some things that are not possible in functions. Scripts can wait suspended until some condition is met, they can also use goto to change execution point at any time.

Starting with Armed Assault there exist scripts which use the same structured expression syntax as functions, but can wait suspended, using sleep or waitUntil. While SQS scripts still work, they are considered deprecated and wherever possible, structured syntax scripts should be used instead.

Language Constructs

Main language contructs used in functions are:

  • if..then..else
  • while..do
  • Curled braces '{}
  • Multiple commands (including assigment commands) are delimited with a semicolon.

Result of the last expression evaluated is returned as a function result.

This can be Nothing when a function returns no value.

Examples

Example 1 (max.sqf)

comment "Return maximum of first and second argument";
private {"_a","_b"};
_a = _this select 0;
_b = _this select 1;
if (_a>_b) then {_a} else {_b}


Example 2 (infantrySafe.sqf)

comment "Switch all infantry units to safe mode";
{
 if (vehicle _x == _x) then
 {
  _x setBehaviour "safe"
 }
} forEach _this

Notes

Due to line-based nature of Sqs scripts it is not possible to create multiline string constants in them.
To overcome this limitation you can store multiline in separate files, and load them using loadFile or preprocessFile functions (the second uses C-like preprocessor with // or /* */ comments and #define macros).
Recommended file extension for functions is .SQF (as opposed to .SQS used for scripts).