Difference between revisions of "If/fr"
m (Cosmetical) |
m (Fixes) |
||
(One intermediate revision by the same user not shown) | |||
Line 3: | Line 3: | ||
}}{{#vardefine:p_condition_desc|Si cette condition est évaluée comme vraie alors '''branche''' est exécutée. | }}{{#vardefine:p_condition_desc|Si cette condition est évaluée comme vraie alors '''branche''' est exécutée. | ||
}}{{#vardefine:p_condition_d_desc|Si cette condition est évaluée comme vraie alors '''branche_vrai''' est exécutée, dans le cas contraire '''branche_faux''' est exécutée. | }}{{#vardefine:p_condition_d_desc|Si cette condition est évaluée comme vraie alors '''branche_vrai''' est exécutée, dans le cas contraire '''branche_faux''' est exécutée. | ||
}}{{#vardefine: | }}{{#vardefine:p_branche_desc|Peut être une instruction simple, un bloc d'instructions ou une instruction vide. | ||
}}{{LSL_Conditional/fr | }}{{LSL_Conditional/fr | ||
|statement=if | |statement=if | ||
Line 18: | Line 18: | ||
{{{!}} | {{{!}} | ||
{{LSL DefineRow||condition|{{#var:p_condition_d_desc}}}} | {{LSL DefineRow||condition|{{#var:p_condition_d_desc}}}} | ||
{{LSL DefineRow||branche_vrai|{{#var: | {{LSL DefineRow||branche_vrai|{{#var:p_branche_desc}}}} | ||
{{LSL DefineRow||branche_faux|{{#var: | {{LSL DefineRow||branche_faux|{{#var:p_branche_desc}}}} | ||
{{!}}} | {{!}}} | ||
</div> | </div> | ||
Line 58: | Line 58: | ||
{ | { | ||
if (test()) | if (test()) | ||
{ | |||
// On n'arrive jamais ici. | // On n'arrive jamais ici. | ||
} | } |
Latest revision as of 02:13, 8 January 2008
LSL Portail Francophone | LSL Portail Anglophone | Fonctions | Évènements | Types | Operateurs | Constantes | Contrôle d'exécution | Bibliothèque | Tutoriels |
if ( condition ) branche
| |||||||||||||||||
if ( condition ) branche_vrai else branche_faux
| |||||||||||||||||
Spécification
L'évaluation des opérateurs en LSL n'est jamais court-circuitée. Ainsi :
Dans un language court-circuité, si le terme de gauche d'un ET logique (&&) vaut FALSE, le terme de droite n'est jamais testé. En effet, le test complet renverra toujours FALSE, quelle que soit la valeur du terme de droite. Comme LSL n'est pas court-circuité, les termes de gauche et de droite sont toujours testés à chaque fois. Le comportement d'une expression court-circuitée peut être simulée en LSL avec des if imbriqués : default { touch_start(integer nombre_total) { if (FALSE) { if (test()) { // On n'arrive jamais ici. } } } } | |||||||||||||||||
ExemplesInstruction if en ligne simple : if (a == 1) c = b; Bloc d'instructions if simple : if (a == 1) { // On fait quelque chose ici. } Bloc if/else complexe (une seule ligne de texte est dite dans cet exemple) if (a == "Loren") { llSay(0, "Lorem ipsum sic amet!"); } else if (a == "Scie") { llSay(0, "Si six cent scies scient six cent cyprès, six cent six scies scient six cent six cyprès."); } else { llSay(0, "Charabia ou français ?"); } Instruction if composée : if (a == 1 && b == c) { // La suite ici. } Instructions if imbriquées : if (a == 1) { if (b == c) { // La suite ici. } } Attention aux points-virgules mal placés. Ils peuvent provoquer des comportements étranges et ils ne se gêneront pas pour le faire. Par exemple, si vous placez un point-virgule entre une instruction if et un bloc de code, l'instruction if n'influencera plus l'exécution ou non du bloc de code. if (a == "Loren"); { llSay(0, "Lorem ipsum sic amet!"); } Ce code s'exécute dans l'ordre suivant :
Un autre problème est quand quelqu'un oublie d'utiliser les accolades : if (a == "Loren") llSay(0, "Lorem ipsum sic amet!"); llSay(0, "Je ne sais pas non plus ce que ça veut dire..."); La source de l'erreur est que l'indentation donne l'impression que les deux commandes llSay sont contrôlées par l'instruction if, alors que seule la première l'est. En fait, si |
If