API Basic If fr - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

IF / ELSEIF / ELSE / END IF

ClassicUO • Basic

IF sélectionne au plus une branche : IF, puis les ELSEIF jusqu’au premier résultat vrai, sinon ELSE s’il existe. L’exécution continue normalement après END IF.

Syntaxe exacte

IF condition THEN
    statements
END IF
IF condition THEN
    statements
ELSEIF elseifCondition THEN
    statements
ELSE
    statements
END IF

Paramètres

  • condition — condition : expression testée une fois à l’entrée. Zéro numérique est faux, tout nombre non nul est vrai. Préférer comparaisons explicites ou résultats booléens API.
  • elseifCondition — elseifCondition : condition supplémentaire facultative, évaluée seulement si toutes les précédentes sont fausses. Écrire ELSEIF en un mot.
  • statements / ELSE — statements / ELSE : instructions aux lignes suivantes. ELSE est facultatif, sans condition, unique et final. THEN et END IF sont obligatoires ; utiliser un bloc multiligne.

Retour

Aucune valeur (Unit). IF est une instruction, pas une fonction. Une condition ou un RETURN sélectionné peut produire une valeur. Comparer les booléens 1/0 à TRUE/FALSE est valide ; IF count accepte tout nombre non nul, IF count=TRUE uniquement 1.

Comportement

  • Le compilateur crée des sauts conditionnels et de sortie. Faux passe à la condition suivante ou ELSE ; une branche choisie saute les alternatives restantes. Chaque IF imbriqué possède son ELSE. RETURN quitte la procédure en exécutant les FINALLY englobants.
  • Par compatibilité, IF compare à zéro numérique sans convertir chaque type avec CBool. Texte "0", texte vide, tableaux, objets et Unit prennent donc la branche vraie. Convertir le texte explicitement ou comparer la propriété voulue. AndAlso/OrElse exigent des nombres.
  • Les déclarations d’une branche sautée ne créent pas de variables à l’exécution. Initialiser les résultats partagés avant IF. Option Explicit vérifie les noms, pas l’affectation sur chaque chemin. Plusieurs ELSE sont refusés avant exécution avec SC015, même sans Option Explicit.

Exemples

1. Quatre cas

# Classify(value) teste <0, =0, <10 puis ELSE. -2, 0, 7, 20 donnent negative, zero, small, large. Main renvoie "negative:zero:small:large" ; chaque appel exécute un seul RETURN.
Option Explicit On
FUNCTION Classify(value)
    IF value < 0 THEN
        RETURN "negative"
    ELSEIF value = 0 THEN
        RETURN "zero"
    ELSEIF value < 10 THEN
        RETURN "small"
    ELSE
        RETURN "large"
    END IF
END FUNCTION
SUB Main()
    RETURN Classify(-2) + ":" + Classify(0) + ":" + Classify(7) + ":" + Classify(20)
END SUB

Explication des paramètres et du déroulement:

Classify(value) teste <0, =0, <10 puis ELSE. -2, 0, 7, 20 donnent negative, zero, small, large. Main renvoie "negative:zero:small:large" ; chaque appel exécute un seul RETURN.

2. Décisions imbriquées

# Action(enabled, amount) teste enabled, puis amount>0 pour choisir work ou idle. Le ELSE extérieur donne disabled. (TRUE,5), (TRUE,0), (FALSE,5) produisent "work:idle:disabled". Chaque END IF ferme son bloc.
Option Explicit On
FUNCTION Action(enabled, amount)
    IF enabled THEN
        IF amount > 0 THEN
            RETURN "work"
        ELSE
            RETURN "idle"
        END IF
    ELSE
        RETURN "disabled"
    END IF
END FUNCTION
SUB Main()
    RETURN Action(TRUE, 5) + ":" + Action(TRUE, 0) + ":" + Action(FALSE, 5)
END SUB

Explication des paramètres et du déroulement:

Action(enabled, amount) teste enabled, puis amount>0 pour choisir work ou idle. Le ELSE extérieur donne disabled. (TRUE,5), (TRUE,0), (FALSE,5) produisent "work:idle:disabled". Chaque END IF ferme son bloc.

3. Ordre des conditions

# Check(calls,value) incrémente calls ByRef et renvoie value. La première condition est fausse, la seconde vraie ; troisième et ELSE sont sautés. result=7, calls=2 ; Main renvoie calls*10+result=27. Tous les auxiliaires sont inclus.
Option Explicit On
FUNCTION Check(ByRef calls, ByVal value)
    calls += 1
    RETURN value
END FUNCTION
SUB Main()
    VAR calls = 0
    VAR result = 0
    IF Check(calls, FALSE) THEN
        result = 5
    ELSEIF Check(calls, TRUE) THEN
        result = 7
    ELSEIF Check(calls, TRUE) THEN
        result = 9
    ELSE
        result = 8
    END IF
    RETURN calls * 10 + result
END SUB

Explication des paramètres et du déroulement:

Check(calls,value) incrémente calls ByRef et renvoie value. La première condition est fausse, la seconde vraie ; troisième et ELSE sont sautés. result=7, calls=2 ; Main renvoie calls*10+result=27. Tous les auxiliaires sont inclus.


en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic