Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 54 additions & 11 deletions tutorials/scripting/gdscript/gdscript_basics.rst
Original file line number Diff line number Diff line change
Expand Up @@ -496,9 +496,10 @@ Built-in types

Built-in types are stack-allocated. They are passed as values. This means a copy
is created on each assignment or when passing them as arguments to functions.
The only exceptions are ``Array``\ s and ``Dictionaries``, which are passed by
reference so they are shared. (Packed arrays such as ``PackedByteArray`` are still
passed as values.)
The exceptions are ``Object``, ``Array``, ``Dictionary``, and packed arrays
(such as ``PackedByteArray``), which are passed by reference so they are shared.
All arrays, ``Dictionary``, and some objects (``Node``, ``Resource``)
have a ``duplicate()`` method that allows you to make a copy.

Basic built-in types
~~~~~~~~~~~~~~~~~~~~
Expand All @@ -520,21 +521,21 @@ Short for "boolean", it can only contain ``true`` or ``false``.
^^^^^^^^^^^^^^^^^^^^^^

Short for "integer", it stores whole numbers (positive and negative).
It is stored as a 64-bit value, equivalent to "int64_t" in C++.
It is stored as a 64-bit value, equivalent to ``int64_t`` in C++.

:ref:`float <class_float>`
^^^^^^^^^^^^^^^^^^^^^^^^^^

Stores real numbers, including decimals, using floating-point values.
It is stored as a 64-bit value, equivalent to "double" in C++.
Note: Currently, data structures such as Vector2, Vector3, and
PackedFloat32Array store 32-bit single-precision "float" values.
It is stored as a 64-bit value, equivalent to ``double`` in C++.
Note: Currently, data structures such as ``Vector2``, ``Vector3``, and
``PackedFloat32Array`` store 32-bit single-precision ``float`` values.

:ref:`String <class_String>`
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

A sequence of characters in `Unicode format <https://en.wikipedia.org/wiki/Unicode>`_.
Strings can contain the following escape sequences:
String literals can contain the following escape sequences:

+---------------------+---------------------------------+
| **Escape sequence** | **Expands to** |
Expand Down Expand Up @@ -701,6 +702,48 @@ Negative indices count from the end.
arr[0] = "Hi!" # Replacing value 1 with "Hi!".
arr.append(4) # Array is now ["Hi!", 2, 3, 4].

Typed arrays
^^^^^^^^^^^^

Godot 4.0 added support for typed arrays. On write operations, Godot checks that
element values match the specified type, so the array cannot contain invalid values.
The GDScript static analyzer takes typed arrays into account, however array methods like
``front()`` and ``back()`` still have the ``Variant`` return type.

Typed arrays have the syntax ``Array[Type]``, where ``Type`` can be any ``Variant`` type,
native or user class, or enum. Nested array types (like ``Array[Array[int]]``) are not supported.

::

var a: Array[int]
var b: Array[Node]
var c: Array[MyClass]
var d: Array[MyEnum]
var e: Array[Variant]

``Array`` and ``Array[Variant]`` are the same thing.

.. note::

Arrays are passed by reference, so the array element type is also an attribute of the in-memory
structure referenced by a variable in runtime. The static type of a variable restricts the structures
that it can reference to. Therefore, you **cannot** assign an array with a different element type,
even if the type is a subtype of the required type::

var a: Array[Node2D] = [Node2D.new()]

# OK. You can add the value to the array because `Node2D` extends `Node`.
var b: Array[Node] = [a[0]]

# Error. You cannot assign an `Array[Node2D]` to an `Array[Node]` variable.
b = a

The only exception was made for the ``Array`` (``Array[Variant]``) type, for user convenience
and compatibility with old code. However, operations on untyped arrays are considered unsafe.

Packed arrays
^^^^^^^^^^^^^

GDScript arrays are allocated linearly in memory for speed.
Large arrays (more than tens of thousands of elements) may however cause
memory fragmentation. If this is a concern, special types of
Expand All @@ -714,9 +757,9 @@ arrays. They are therefore only recommended to use for large data sets:
- :ref:`PackedFloat32Array <class_PackedFloat32Array>`: An array of 32-bit floats.
- :ref:`PackedFloat64Array <class_PackedFloat64Array>`: An array of 64-bit floats.
- :ref:`PackedStringArray <class_PackedStringArray>`: An array of strings.
- :ref:`PackedVector2Array <class_PackedVector2Array>`: An array of :ref:`Vector2 <class_Vector2>` objects.
- :ref:`PackedVector3Array <class_PackedVector3Array>`: An array of :ref:`Vector3 <class_Vector3>` objects.
- :ref:`PackedColorArray <class_PackedColorArray>`: An array of :ref:`Color <class_Color>` objects.
- :ref:`PackedVector2Array <class_PackedVector2Array>`: An array of :ref:`Vector2 <class_Vector2>` values.
- :ref:`PackedVector3Array <class_PackedVector3Array>`: An array of :ref:`Vector3 <class_Vector3>` values.
- :ref:`PackedColorArray <class_PackedColorArray>`: An array of :ref:`Color <class_Color>` values.

:ref:`Dictionary <class_Dictionary>`
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand Down