{"name":"Void","title":"Void","type":"topic","url":"https://community.bistudio.com/wiki/Void","revid":330443,"updated":"2022-09-15T21:30:58Z","aliases":[],"markdown":"A variable of type **Void** is an **undefined variable**.\n\n### Undefining Variables\n\nnil can be used to undefine variables.\n\n```sqf\nmyVar = 1;\n// ...\nmyVar = nil;\n// myVar is undefined\n```\n\n### String Representation\n\nThe String representation of an undefined variable depends on its inferred type:\n\n| Data Type | String |\n|---|---|\n| Anything | scalar bool array string 0xfcffffef (OFP)<br>scalar bool array string 0xe0ffffef (ArmA) |\n| Nothing | scalar bool array string nothing 0xfcffffef |\n| Number | scalar |\n| Boolean | bool |\n| Array | array |\n\n### Comparisons\n\nNo comparison with any variables will work.\n\n**Example:**\n\n```sqf\n// error\nif (undefinedVar == definedVar) then { /* ... */ };\n```\n\n```sqf\n// error\nif (undefinedVar == undefinedVar) then { /* ... */ };\n```\n\n### Detect an Undefined Variable\n\nThe isNil command, introduced in Armed Assault, allows to detect if a variable exists or not:\n\n```sqf\nHelloThere = 42;\nisNil \"HelloThere\"; // false\n\nHelloThere = nil;\nisNil \"HelloThere\"; // true\n```\n\n#### isNil Workaround 1 (Operation Flashpoint v1.00)\n\nSQS Syntax:\n\n```sqs\n_nil = format [\"%1\", _undefinedVariable]\n? (format [\"%1\", variableToTest] == _nil) : hint \"variableToTest is nil\"\n```\n\nSQF Syntax:\n\n```sqf\n_nil = format [\"%1\", _undefinedVariable];\nif (format [\"%1\", variableToTest] == _nil) then { hint \"variableToTest is nil\" };\n```\n\n#### isNil Workaround 2 (Operation Flashpoint v1.00)\n\n> [!CAUTION]\n> This information is **obsolete**. Armed Assault introduced isNil, and Arma 2 forbade undefined variables usage in script - see ArmA: Editing#Forward Compatibility.\n\nThe alternative way to check if a variable is undefined before isNil existence is that it silently fails any expression evaluations on it:\n\n```sqf\ndefined = false;\nif (var == var) then\n{\n    defined = true;\n};\nif (var != var) then\n{\n    defined = true;\n};\nif (!defined) then\n{\n    // we know var is undefined here\n};\n```\n\n### Type Inference\n\nSuppose the variable **a** is undefined, and we set the variable **b** like so:\n\n```sqf\nb = a + [];\n```\n\nThe inferred type of b is now array - since b was the product result of an array add operation with a definite array ([]) and an unknown type (a)\n\n**b**'s string representation will now be \"array\", and b wil be considered an undefined array.","sections":[{"heading":null,"level":1,"markdown":"A variable of type **Void** is an **undefined variable**."},{"heading":"Undefining Variables","level":3,"markdown":"nil can be used to undefine variables.\n\n```sqf\nmyVar = 1;\n// ...\nmyVar = nil;\n// myVar is undefined\n```"},{"heading":"String Representation","level":3,"markdown":"The String representation of an undefined variable depends on its inferred type:\n\n| Data Type | String |\n|---|---|\n| Anything | scalar bool array string 0xfcffffef (OFP)<br>scalar bool array string 0xe0ffffef (ArmA) |\n| Nothing | scalar bool array string nothing 0xfcffffef |\n| Number | scalar |\n| Boolean | bool |\n| Array | array |"},{"heading":"Comparisons","level":3,"markdown":"No comparison with any variables will work.\n\n**Example:**\n\n```sqf\n// error\nif (undefinedVar == definedVar) then { /* ... */ };\n```\n\n```sqf\n// error\nif (undefinedVar == undefinedVar) then { /* ... */ };\n```"},{"heading":"Detect an Undefined Variable","level":3,"markdown":"The isNil command, introduced in Armed Assault, allows to detect if a variable exists or not:\n\n```sqf\nHelloThere = 42;\nisNil \"HelloThere\"; // false\n\nHelloThere = nil;\nisNil \"HelloThere\"; // true\n```"},{"heading":"isNil Workaround 1 (Operation Flashpoint v1.00)","level":4,"markdown":"SQS Syntax:\n\n```sqs\n_nil = format [\"%1\", _undefinedVariable]\n? (format [\"%1\", variableToTest] == _nil) : hint \"variableToTest is nil\"\n```\n\nSQF Syntax:\n\n```sqf\n_nil = format [\"%1\", _undefinedVariable];\nif (format [\"%1\", variableToTest] == _nil) then { hint \"variableToTest is nil\" };\n```"},{"heading":"isNil Workaround 2 (Operation Flashpoint v1.00)","level":4,"markdown":"> [!CAUTION]\n> This information is **obsolete**. Armed Assault introduced isNil, and Arma 2 forbade undefined variables usage in script - see ArmA: Editing#Forward Compatibility.\n\nThe alternative way to check if a variable is undefined before isNil existence is that it silently fails any expression evaluations on it:\n\n```sqf\ndefined = false;\nif (var == var) then\n{\n    defined = true;\n};\nif (var != var) then\n{\n    defined = true;\n};\nif (!defined) then\n{\n    // we know var is undefined here\n};\n```"},{"heading":"Type Inference","level":3,"markdown":"Suppose the variable **a** is undefined, and we set the variable **b** like so:\n\n```sqf\nb = a + [];\n```\n\nThe inferred type of b is now array - since b was the product result of an array add operation with a definite array ([]) and an unknown type (a)\n\n**b**'s string representation will now be \"array\", and b wil be considered an undefined array."}],"categories":["Magic Types"],"groups":["Data Types"]}