Merge pull request #1384 from mhilbrunner/gdscript

GDScript: Update keywords and constants, explain assert, calling base…
This commit is contained in:
Max Hilbrunner
2018-04-21 00:20:54 +02:00
committed by mhilbrunner
parent cef5010d76
commit 9ae18f3752

View File

@@ -102,6 +102,11 @@ here's a simple example of how GDScript looks.
var local_var2 = param1+3
return local_var2
# functions override functions with the same name on the base/parent class
# if you still want to call them, use '.' (like 'super' in other languages)
func something(p1, p2):
.something(p1, p2)
# inner class
@@ -139,6 +144,11 @@ Keywords
The following is the list of keywords supported by the language. Since
keywords are reserved words (tokens), they can't be used as identifiers.
Operators (like ``in``, ``not``, ``and`` or ``or``) and names of built-in types
as listed in the following sections are also reserved.
Keywords are defined in the `GDScript tokenizer <https://github.com/godotengine/godot/blob/master/modules/gdscript/gdscript_tokenizer.cpp>`_
in case you want to take a look under the hood.
+------------+---------------------------------------------------------------------------------------------------------------+
| Keyword | Description |
@@ -175,6 +185,8 @@ keywords are reserved words (tokens), they can't be used as identifiers.
+------------+---------------------------------------------------------------------------------------------------------------+
| is | Tests whether a variable extends a given class. |
+------------+---------------------------------------------------------------------------------------------------------------+
| self | Refers to current class instance. |
+------------+---------------------------------------------------------------------------------------------------------------+
| tool | Executes the script in the editor. |
+------------+---------------------------------------------------------------------------------------------------------------+
| signal | Defines a signal. |
@@ -197,12 +209,33 @@ keywords are reserved words (tokens), they can't be used as identifiers.
+------------+---------------------------------------------------------------------------------------------------------------+
| breakpoint | Editor helper for debugger breakpoints. |
+------------+---------------------------------------------------------------------------------------------------------------+
| preload | Preloads a class or variable. See `Classes as resources`_. |
+------------+---------------------------------------------------------------------------------------------------------------+
| yield | Coroutine support. See `Coroutines`_. |
+------------+---------------------------------------------------------------------------------------------------------------+
| assert | Asserts a condition, logs error on failure. Ignored in non-debug builds. See `Assert keyword`_. |
+------------+---------------------------------------------------------------------------------------------------------------+
| remote | Networking RPC annotation. See :ref:`high-level multiplayer docs <doc_high_level_multiplayer>`. |
+------------+---------------------------------------------------------------------------------------------------------------+
| master | Networking RPC annotation. See :ref:`high-level multiplayer docs <doc_high_level_multiplayer>`. |
+------------+---------------------------------------------------------------------------------------------------------------+
| slave | Networking RPC annotation. See :ref:`high-level multiplayer docs <doc_high_level_multiplayer>`. |
+------------+---------------------------------------------------------------------------------------------------------------+
| sync | Networking RPC annotation. See :ref:`high-level multiplayer docs <doc_high_level_multiplayer>`. |
+------------+---------------------------------------------------------------------------------------------------------------+
| PI | PI constant. |
+------------+---------------------------------------------------------------------------------------------------------------+
| TAU | TAU constant. |
+------------+---------------------------------------------------------------------------------------------------------------+
| INF | Infinity constant. Used for comparisons. |
+------------+---------------------------------------------------------------------------------------------------------------+
| NAN | NAN (not a number) constant. Used for comparisons. |
+------------+---------------------------------------------------------------------------------------------------------------+
Operators
~~~~~~~~~
The following is the list of supported operators and their precedence
(TODO, change since this was made to reflect python operators)
The following is the list of supported operators and their precedence.
+---------------------------------------------------------------+-----------------------------------------+
| **Operator** | **Description** |
@@ -567,13 +600,6 @@ A function can ``return`` at any point. The default return value is ``null``.
Referencing Functions
^^^^^^^^^^^^^^^^^^^^^
To call a function in a *base class* (i.e. one ``extend``-ed in your current class),
prepend ``.`` to the function name:
::
.basefunc(args)
Contrary to Python, functions are *not* first class objects in GDScript. This
means they cannot be stored in variables, passed as an argument to another
function or be returned from other functions. This is for performance reasons.
@@ -891,6 +917,22 @@ the ``is`` keyword can be used:
if (entity is enemy_class):
entity.apply_damage()
To call a function in a *base class* (i.e. one ``extend``-ed in your current class),
prepend ``.`` to the function name:
::
.basefunc(args)
This is especially useful because functions in extending classes replace
functions with the same name in their base classes. So if you still want
to call them, you can use ``.`` like the ``super`` keyword in other languages:
::
func some_func(x):
.some_func(x) # calls same function on the parent class
Class Constructor
^^^^^^^^^^^^^^^^^
@@ -1343,3 +1385,14 @@ can replace the above code with a single line:
::
onready var mylabel = get_node("MyLabel")
Assert keyword
~~~~~~~~~~~~~~
The ``assert`` keyword can be used to check conditions in debug builds.
These assertions are ignored in non-debug builds.
::
# Check that i is 0
assert(i == 0)