Espacios en blanco

DinoCode no ignora completamente los espacios en blanco. Los utiliza para inferir tu intención.

¿Es una variable o una función?#

Consideremos el siguiente ejemplo:

print++

¿Es un llamado implicito de la función print o es un incremento a la variable print?

Respuesta:

Es un incremento a la variable print porque el operador ++ está físicamente pegado a print. Si existiera un espacio entre ellos, DinoCode inferiría que es un llamado implicito ➡ print(++), lo que daría un error inmediatamente.

Caso de uso

Aplicar incrementos o decrementos a variables es un caso de uso muy común en la programación, por lo que DinoCode lo maneja de esta manera.

x = 0
x++ # 'x' no se confunde con una función
print x  # 1

x-- # 'x' no se confunde con una función
print x  # 0

Paréntesis y espacios#

Consideremos el siguiente ejemplo:

print (2 + 1) * 2

¿Es (2 + 1) * 2 un único argumento ➡ print((2 + 1) * 2) o es (2 + 1) la agrupación de argumentos ➡ print(2 + 1) * 2?

Respuesta:

DinoCode infiere que (2 + 1) * 2 es un solo argumento de print, gracias al espacio que los separa. Si eliminamos ese espacio entre print y (, la prioridad matemática cambia:

  1. Primero se resuelve print(2 + 1).
  2. Luego, se multiplica el resultado por 2.
print(2 + 1) * 2  # Error: print devuelve None y None * 2 es invalido
¿Qué ocurre con los llamados de funciones dentro de expresiones?

Por consistencia, ocurre exactamente lo mismo:

# Aquí 'print' recibe un solo argumento: 'input("Número: ") * 2'
print input("Número: ") * 2

# Aquí 'print' recibe dos argumentos: 'input' y '(2 + 1) * 2'
print input (2 + 1) * 2

Corchetes y espacios#

Consideremos el siguiente ejemplo:

print [0]

¿Es [0] un nuevo array pasado como argumento ➡ print([0]) o es un acceso al elemento 0 de un array llamado printprint[0]?

Respuesta:

DinoCode infiere que [0] es un nuevo array pasado como argumento a print, gracias al espacio que los separa. Si eliminamos ese espacio entre print y [, la interpretación cambia:

print[0]  # Error: print no es un array
¿Qué ocurre dentro de expresiones?

Por consistencia, ocurre exactamente lo mismo:

nums = [1 2 3]

# Aquí 'print' recibe un solo argumento: 'nums[0]'
print nums[0]

# Aquí 'print' recibe dos argumentos: 'nums' y un nuevo array '[0]'
print nums [0]