examples/advanced/06_fstrings.cat
# Exemple: F-strings (chaînes formatées)
#
# Les f-strings permettent d'interpoler des expressions dans les chaînes,
# évitant ainsi de créer des fonctions de concaténation basiques dans le contexte.

# Interpolation de variables simples

name = "Alice"
age = 30
city = "Paris"

# F-strings basiques
greeting = f"Bonjour, je suis {name}"
info = f"J'ai {age} ans et j'habite à {city}"

print(greeting)
print(info)

# Expressions arithmétiques

a = 15
b = 7

print(f"Addition: {a} + {b} = {a + b}")
print(f"Soustraction: {a} - {b} = {a - b}")
print(f"Multiplication: {a} * {b} = {a * b}")
print(f"Division: {a} / {b} = {a / b}")
print(f"Modulo: {a} % {b} = {a % b}")

# Appels de fonction

# Fonction simple
carre = (x) => { x * x }
cube = (x) => { x * x * x }

n = 5
print(f"Le carré de {n} est {carre(n)}")
print(f"Le cube de {n} est {cube(n)}")

# Fonction avec plusieurs paramètres
moyenne = (a, b) => { (a + b) / 2 }
x = 10
y = 20
print(f"La moyenne de {x} et {y} est {moyenne(x, y)}")

# Formatage de données (rapports, logs, etc.)

# Exemple: système de facturation
produit = "Livre Python"
prix_unitaire = 29.99
quantite = 3
total = prix_unitaire * quantite

print(f"Produit: {produit}")
print(f"Prix unitaire: {prix_unitaire} EUR")
print(f"Quantité: {quantite}")
print(f"Total: {total} EUR")

# Utilisation avec des structures de contrôle

# Avec des boucles
print("\nTable de multiplication de 7:")
i = 1
while i <= 5 {
    resultat = 7 * i
    print(f"7 x {i} = {resultat}")
    i = i + 1
}

# Avec des expressions conditionnelles inline
score = 85
message = f"\nScore: {score}/100"
print(message)

# Note: if/else comme expression n'est pas supporté en assignation directe
# Utiliser un bloc ou match pour ce type de logique

# F-strings avec majuscules (insensible à la casse)

message1 = f"minuscule: {42}"
message2 = F"MAJUSCULE: {42}"
print(f"\nLes deux sont identiques: {message1} == {message2}")

# Cas d'usage pratique: logs et debugging

# Simulation d'un processus
etape = 1
total_etapes = 5
fichier = "data.csv"

print(f"\n[INFO] Étape {etape}/{total_etapes}: chargement de {fichier}")

# Simulation d'erreur avec contexte
ligne = 42
erreur = "valeur manquante"
print(f"[ERREUR] Ligne {ligne}: {erreur}")

# Échappements standards

# Retour à la ligne et tabulation
rapport = f"Nom:\t{name}\nÂge:\t{age}\nVille:\t{city}"
print(f"\nRapport formaté:\n{rapport}")

# Spécificateurs de format

# Les f-strings supportent les format specs Python standard
pi = 3.14159
print(f"\nPi avec 2 décimales: {pi:.2f}")
print(f"Pi avec 4 décimales: {pi:.4f}")

# Formatage des entiers
nombre = 42
print(f"\nZero-padding sur 5 caractères: {nombre:05}")
print(f"Aligné à droite sur 10: {nombre:>10}")
print(f"Hexadécimal: {nombre:x}")
print(f"Binaire: {nombre:b}")

# Pourcentages
ratio = 0.856
print(f"\nRatio en pourcentage: {ratio:.1%}")

# Alignement de texte
nom_court = "Alice"
nom_long = "Alexandre"
print(f"\nAlignement:")
print(f"  {nom_court:<15} - aligné à gauche")
print(f"  {nom_long:>15} - aligné à droite")
print(f"  {nom_court:^15} - centré")

# Combinaison avec expressions
x = 1234.5678
print(f"\nExpression + format: {x * 2:>12.2f}")

# Utile pour tableaux et rapports formatés
print(f"\nTableau de prix:")
print(f"{'Produit':<20} {'Prix':>10} {'Quantité':>10} {'Total':>12}")
print(f"{'Livre Python':<20} {29.99:>10.2f} {3:>10} {29.99*3:>12.2f}")
print(f"{'Clavier':<20} {79.99:>10.2f} {1:>10} {79.99:>12.2f}")