Guía de estilo de GDScript

Descripción

Esta guía enumera las convenciones para escribir un GDscript elegante. La meta es motivar la escritura de un código limpio y legible, y promover la consistencia entre proyectos, discusiones y tutoriales. Esperamos que esto también motive al desarrollo de herramientas de autoformateo.

Ya que GDScript es tan similar a Python, esta guía ha sido inspirada por la guía de estilo de programación PEP 8.

Nota

El editor de scripts de Godot usa muchas de estas convenciones por defecto. Deja que te ayude.

Estructura de código

Indentación

Estilo de Indentación: Tabs (editor default)

Tamaño de la Indentación: 4 (editor default)

Cada nivel de la Indentación deberá uno mayor que el bloque que lo contiene.

Bien:

for i in range(10):
    print("hello")

Mal:

for i in range(10):
  print("hello")

for i in range(10):
        print("hello")

Use 2 niveles de Indentación para distinguir las lineas de continuación de bloques regulares de código.

Bien:

effect.interpolate_property(sprite, "transform/scale",
            sprite.get_scale(), Vector2(2.0, 2.0), 0.3,
            Tween.TRANS_QUAD, Tween.EASE_OUT)

Mal:

effect.interpolate_property(sprite, "transform/scale",
    sprite.get_scale(), Vector2(2.0, 2.0), 0.3,
    Tween.TRANS_QUAD, Tween.EASE_OUT)

Lineas en blanco

Surround functions and class definitions with two blank lines:

func heal(amount):
    health += amount
    health = min(health, max_health)
    emit_signal("health_changed", health)


func take_damage(amount, effect=null):
    health -= amount
    health = max(0, health)
    emit_signal("health_changed", health)

use una linea blanca dentro de las funciones para separar secciones lógicas.

Una declaración/instrucción por linea

Nunca combine múltiples declaraciones en una única línea. No, programadores de C, no hagan declaraciones condicionales en una única línea (excepto con el operador ternario)!

Bien:

if position.x > width:
    position.x = 0

if flag:
    print("flagged")

Mal:

if position.x > width: position.x = 0

if flag: print("flagged")

Evita paréntesis innecesarios

Evite paréntesis en expresiones y condicionales. A menos que sean necesarios para el orden de las operaciones, solo reducen la legibilidad.

Bien:

if is_colliding():
    queue_free()

Mal:

if (is_colliding()):
    queue_free()

Comment spacing

Normal comments should start with a space, but comments which are disabled code should not. This helps differentiate text comments from disabled code.

Bien:

# This is a comment.
#print("This is disabled code")

Mal:

#This is a comment.
# print("This is disabled code")

Espacio en blanco

Utiliza siempre un espacio entre los operadores y después de las comas. Evita los espacios adicionales en las referencias de los diccionarios y las llamadas de función, o para crear «columnas».

Bien:

position.x = 5
position.y = mpos.y + 10
dict["key"] = 5
myarray = [4, 5, 6]
print("foo")

Mal:

position.x=5
position.y = mpos.y+10
dict ['key'] = 5
myarray = [4,5,6]
print ('foo')

NUNCA:

x        = 100
y        = 100
velocity = 500

Quotes

Use double quotes unless single quotes make it possible to escape fewer characters in a given string. See the examples below:

# Normal string.
print("hello world")

# Use double quotes as usual to avoid escapes.
print("hello 'world'")

# Use single quotes as an exception to the rule to avoid escapes.
print('hello "world"')

# Both quote styles would require 2 escapes; prefer double quotes if it's a tie.
print("'hello' \"world\"")

Convenciones para la definición de nombres

Estas convenciones deberán seguir el estilo de Godot. Romperlas hará que tu código choque con las convenciones de nomenclaturas incorporadas, lo cual es feo.

Clases y Nodos

Usa PascalCase: extends KinematicBody

También cuando se carga una clase en una constante o variable:

const MyCoolNode = preload("res://my_cool_node.gd")

Funciones y Variables

usa snake_case: get_node()

Utilice un solo símbolo de subrayado (_) para los métodos virtuales (Funciones que el usuario debe anular), funciones privadas y variables privadas: func _ready()

Señales

Usa el tiempo pasado:

signal door_opened
signal score_changed

Constantes

Usa CONSTANT_CASE, todas en mayusculas, con el símbolo de subrayado (_) para separar palabras: const MAX_SPEED = 200

Static typing

Since Godot 3.1, GDScript supports optional static typing.

Type hints

Place the colon right after the variable’s name, without a space, and let the GDScript compiler infer the variable’s type when possible.

Bien:

onready var health_bar: ProgressBar = get_node("UI/LifeBar")

var health := 0 # The compiler will use the int type

Mal:

# The compiler can't infer the exact type and will use Node
# instead of ProgressBar
onready var health_bar := get_node("UI/LifeBar")

When you let the compiler infer the type hint, write the colon and equal signs together: :=.

var health := 0 # The compiler will use the int type

Add a space on either sides of the return type arrow when defining functions.

func heal(amount: int) -> void: