Imutabilidade
steady, record, freeze e tupla — o que muda, o que não muda, e por que isso importa.
Um valor que não muda pode ser passado para qualquer lugar sem medo: ninguém o altera pelas suas costas. A linguagem tem quatro formas de dizer “isto não muda”, e cada uma vale para uma coisa.
| Forma | O que não muda |
|---|---|
steady NOME := … | o nome: não recebe outro valor |
record | os campos: p.x := 1 é erro; p with {…} devolve outro |
freeze(xs) | a lista: vira uma sequência que não aceita append |
(1, "a") | a tupla: uma forma fixa, com um tipo por posição |
dataforge
record Pedido:
id: Integer
total: Float
p := Pedido(1, 100.0)
p2 := p with {"total": 90.0}
assert p.total is 100.0 and p2.total is 90.0 // o original ficou
monitor:
p.total := 0.0
assert no
handle Error as e:
out "record e imutavel:", e.type
congelada := freeze([1, 2, 3])
monitor:
congelada.append(4)
assert no
handle Error:
out "a lista congelada nao aceita append"
assert thaw(congelada) is [1, 2, 3]