Linguagem de Programação Crystal

Atribuição

A atribuição é feita com o caractere de igual (=).

# Atribui a uma variável local
local = 1

# Atribui a uma variável de instância
@instance = 2

# Atribui a uma variável de classe
@@class = 3

# Atribui a uma variável global
$global = 4

Cada um dos tipos de variáveis acima serão explicados adiante.

Está disponível um pouco de açúcar sintático com o caractere =:

local += 1  # é o mesmo que: local = local + 1

# A sintaxe acima também funciona com estes operadores:
# +, -, *, /, %, |, &, ^, **, <<, >>

local ||= 1 # é o mesmo que: local || (local = 1)
local &&= 1 # é o mesmo que: local && (local = 1)

A invocação de um método que termina com = também tem açúcar sintatico:

# Um setter
person.name=("John")

# A linha acima pode ser escrita como:
person.name = "John"

# Uma atribuição de um índice
objects.[]=(2, 3)

# A linha acima pode ser escrita como:
objects[2] = 3

# Não está relacionado a atribuição, mas também é tem açúcar sintático:
objects.[](2, 3)

# A linha acima pode ser escrita como:
objects[2, 3]

O açúcar sintático do operador = também está disponível para setters e indexadores. Perceba que || e && usam o método []? para checar a presença da chave.

person.age += 1        # é o mesmo que: person.age = person.age + 1

person.name ||= "John" # é o mesmo que: person.name || (person.name = "John")
person.name &&= "John" # é o mesmo que: person.name && (person.name = "John")

objects[1] += 2        # é o mesmo que: objects[1] = objects[1] + 2

objects[1] ||= 2       # é o mesmo que: objects[1]? || (objects[1] = 2)
objects[1] &&= 2       # é o mesmo que: objects[1]? && (objects[1] = 2)