examples/advanced/09_assignment_syntax.cat
# Syntaxes d'affectation en Catnip
# Affectation de variables, d'attributs, et par index

pragma("feature", "types")

# Affectation simple

print("⇒ Affectation simple")
x = 10
y = 20
print("  x =", x, "| y =", y)

# Affectation chaînée

print("\n⇒ Affectation chaînée")
a = b = c = 42
print("  a =", a, "| b =", b, "| c =", c)

# Unpacking

print("\n⇒ Unpacking")
(first, second) = tuple(1, 2)
print("  first =", first, "| second =", second)

head, *rest = list(1, 2, 3, 4, 5)
print("  head =", head, "| rest =", rest)

# Affectation d'attributs

print("\n⇒ Affectation d'attributs")
obj = types.SimpleNamespace()
obj.name = "Alice"
obj.age = 30
print("  obj.name =", obj.name)
print("  obj.age =", obj.age)

# Chaînes d'attributs

print("\n⇒ Chaînes d'attributs")
obj.address = types.SimpleNamespace()
obj.address.city = "Paris"
obj.address.zip = "75001"
print("  obj.address.city =", obj.address.city)

# Affectation par index (dict)

print("\n⇒ Affectation par index (dict)")
config = dict()
config["host"] = "localhost"
config["port"] = 8080
config["debug"] = True
print("  config =", config)

# Affectation par index (list)

print("\n⇒ Affectation par index (list)")
items = list(0, 0, 0, 0, 0)
items[0] = 10
items[2] = 30
items[4] = 50
print("  items =", items)

# Combinaison : attribut puis index

print("\n⇒ Combinaison attribut + index")
data = types.SimpleNamespace()
data.values = dict()
data.values["x"] = 100
data.values["y"] = 200
print("  data.values =", data.values)

# Modification in-place depuis une fonction

print("\n⇒ Modification globale via index")
state = dict(("count", 0))

increment = () => {
    state["count"] = state["count"] + 1
}

print("  Avant:", state["count"])
increment()
increment()
increment()
print("  Après 3 increments:", state["count"])