examples/advanced/02_blocks_and_expressions.cat
# Exemple 7 : Blocs et expressions
print("⇒ Blocs comme expressions")
# Un bloc retourne la valeur de sa dernière expression
resultat = {
x = 10
y = 20
x + y # Cette valeur est retournée
}
print("Résultat du bloc:", resultat)
# Bloc avec logique conditionnelle
nombre = 15
categorie = {
if nombre < 10 {
"petit"
} elif nombre < 20 {
"moyen"
} else {
"grand"
}
}
print("Catégorie:", categorie)
print("\n⇒ Blocs imbriqués")
# Les blocs peuvent être imbriqués
resultat_complexe = {
a = 5
b = {
temp = a * 2
temp + 3
}
c = {
temp = b * 2
temp - 1
}
print(" a =", a, ", b =", b, ", c =", c)
a + b + c
}
print("Résultat complexe:", resultat_complexe)
print("\n⇒ Blocs dans les conditions")
# Utiliser des blocs pour des calculs conditionnels
score = 85
evaluation = {
if score >= 90 {
bonus = 10
note = "A"
print(" Excellent! Bonus de", bonus, "points")
} elif score >= 80 {
bonus = 5
note = "B"
print(" Très bien! Bonus de", bonus, "points")
} else {
bonus = 0
note = "C"
print(" Bien. Pas de bonus")
}
note
}
print("Note finale:", evaluation)
print("\n⇒ Blocs vides")
# Un bloc vide retourne None
vide = {}
print("Bloc vide:", vide)
# Bloc avec seulement des assignations retourne None
assignations = {
x = 1
y = 2
}
print("Bloc d'assignations:", assignations)
print("\n⇒ Expressions composées")
# Combiner plusieurs opérations en une expression
x = 10
y = 20
z = 30
# Opérations arithmétiques complexes
resultat = (x + y) * z / (x - 5)
print("(10 + 20) * 30 / (10 - 5) =", resultat)
# Comparaisons chaînées
valeur = 15
dans_intervalle = 10 < valeur < 20
print("15 est entre 10 et 20:", dans_intervalle)
valeur2 = 25
hors_intervalle = 10 < valeur2 < 20
print("25 est entre 10 et 20:", hors_intervalle)
print("\n⇒ Court-circuit logique")
# AND s'arrête au premier False
compteur = 0
incrementer = () => {
compteur = compteur + 1
print(" Fonction appelée, compteur =", compteur)
True
}
print("Test 1: False and fonction()")
resultat1 = False and incrementer()
print("Résultat:", resultat1, ", compteur =", compteur)
print("\nTest 2: True and fonction()")
resultat2 = True and incrementer()
print("Résultat:", resultat2, ", compteur =", compteur)
# OR s'arrête au premier True
print("\nTest 3: True or fonction()")
resultat3 = True or incrementer()
print("Résultat:", resultat3, ", compteur =", compteur)
print("\nTest 4: False or fonction()")
resultat4 = False or incrementer()
print("Résultat:", resultat4, ", compteur =", compteur)
print("\n⇒ Blocs dans match")
# Match utilise des blocs avec plusieurs instructions
valeur = 42
match valeur {
n if n < 0 => {
print(" Nombre négatif détecté")
abs_val = -n
print(" Valeur absolue doublée:", abs_val * 2)
}
n if n == 0 => {
print(" Zéro détecté")
print(" Retour: 1")
}
n => {
print(" Nombre positif détecté")
carre = n * n
racine_approx = n / 2
print(" Carré + racine approx:", carre + racine_approx)
}
}
print("\n⇒ Calculs en une expression")
# Effectuer plusieurs opérations en une seule expression
valeur = 5
resultat_final = ((valeur * 2) + 10) ** 2
print("((5 * 2) + 10) ** 2 =", resultat_final)
# Étape par étape
print("Détail des étapes:")
etape1 = valeur * 2
print(" 5 * 2 =", etape1)
etape2 = etape1 + 10
print(" 10 + 10 =", etape2)
etape3 = etape2 ** 2
print(" 20 ** 2 =", etape3)