Pular para o conteúdo

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.

FormaO que não muda
steady NOME := …o nome: não recebe outro valor
recordos 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]

Continue em Records e Tuplas.