Conditions & Logique
If, Case et modèles de logique imbriquée.
If() et Case() servent à gérer les options, les majorations, les sélections de matériau et les règles dépendantes du contexte.
Condition simple
If(condition; valeurSiVrai; valeurSiFaux) Exemples : If($width > 1000; $width * 1.1; $width) → majoration de 10 % pour les grandes largeurs If($material == "steel"; 7.85; 2.7) → densité selon le matériau
Conditions imbriquées
Les appels If() peuvent être imbriqués pour exprimer plusieurs niveaux de logique, par exemple des paliers de prix.
If($width > 2000;
$width * 1.2;
If($width > 1000;
$width * 1.1;
$width
)
) → prix par paliersCase pour plusieurs branches
Case() vérifie les conditions dans l’ordre et renvoie la valeur de la première condition vraie. Les arguments vont par paires condition;valeur ; un dernier argument facultatif donne la valeur par défaut si aucune condition n’est vraie.
Case(condition1; valeur1; condition2; valeur2; ...; défaut) Les conditions sont vérifiées dans l’ordre ; Case renvoie la valeur de la première condition vraie. Le dernier argument est la valeur par défaut si aucune condition n’est vraie (sans lui, Case renvoie 0). Chaque condition est une comparaison (par exemple $Profile = "Milan"), pas une simple valeur. Exemple : Case($Profile = "Milan"; 13; $Profile = "Milan Slim"; 12; 0) → 13 si $Profile vaut "Milan", 12 si "Milan Slim", sinon 0
Chaque condition de Case() est une comparaison, par exemple $Profile == "Milan". Case ne compare pas son premier argument aux valeurs suivantes : un texte non vide à la place d’une condition compte comme vrai, et Case renvoie la mauvaise branche.
Motifs fréquents
- Majoration: If($width > 1000; $price * 1.1; $price)
- Facteur matériau: If($material == "steel"; 7.85; 2.7)
- Quantité minimale: max($count; 1)
- Division sûre: If($d != 0; $v / $d; 0)
- Option: If($hasDoor == 1; $doorPrice; 0)
- Plusieurs branches : Case($Profile = "Milan"; 13; $Profile = "Milan Slim"; 12; 0) — choix selon le profil.
Des chaînes If() trop profondes deviennent difficiles à relire. Préférez Case() ou répartissez la logique sur plusieurs lignes de calcul.