Bien qu'intimidant, l'échec fait partie intégrante de la programmation. Vous pouvez utiliser l'échec pour apprendre à déboguer, trouver les limites d'un programme ou savoir rapidement ce qu'il ne faut pas faire !
L'échec n'a rien d'anormal
Dans Verse, échec a un sens précis. Il ne signifie pas forcément que quelque chose n'a pas fonctionné, mais constitue un moyen de contrôler les actions de votre programme.
Comme vous l'avez vu dans la leçon 4, vous pouvez écrire du code pour poser une question de type Oui ou Non.
var Tired: logic = false
var WhatToWatch: string = “nothing”
if (Tired?):
set WhatToWatch = “your eyelids”
else:
set WhatToWatch = “cartoons”
Print(“You should watch {WhatToWatch}”)
# Vous devriez regarder des dessins animés
Le code permettant de poser la question est écrit sous forme d'expression faillible. Dans l'exemple ci-dessus, Tired?
est une expression faillible.
Les expressions faillibles sont utilisées pour éviter les erreurs susceptibles d'empêcher votre programme de fonctionner. Par exemple, comme vous le savez, la division par zéro est impossible. Si vous essayez d'effectuer cette opération dans votre code, celui-ci échoue. Néanmoins, le code Verse suivant fonctionne correctement.
if (5/0):
Print("Whoa!")
else:
Print("You can't do that!")
Pour éviter ce type d'erreurs, Verse vous demande d'écrire des expressions faillibles dans un contexte d'échec. Les contextes d'échec constituent un emplacement sécurisé permettant aux expressions faillibles d'échouer. Dans l'exemple ci-dessus, 5/0
est l'expression faillible et if()
le contexte d'échec. Lisez la suite pour en savoir plus sur ces deux concepts Verse.

Expressions faillibles
Il existe de nombreuses façons d'utiliser les expressions faillibles dans Verse. Si une expression pose une question de type Oui ou Non, elle est probablement faillible.
Voici quelques types de questions que posent les expressions faillibles :
- Ces deux variables sont-elles supérieures, inférieures ou égales l'une à l'autre ?
- Cette variable est-elle définie sur
true
? - Cette variable est-elle définie sur une valeur ?
- Cette expression entraîne-t-elle une erreur ?
Si la réponse à l'une de ces questions est oui, l'expression réussit. Si la réponse est non, l'expression échoue. Les opérations qui se déroulent après une réussite ou un échec dépendent de la façon dont vous écrivez votre code.
Expressions de comparaison
Les expressions de comparaison, qui utilisent des opérateurs de comparaison tels que <
(inférieur à), ` > (supérieur à), ou
<> (différent de), sont faillibles. Dans l'exemple suivant,
5 < 4` est une expression faillible :
if (5 < 4):
Print(“This will never print.”)
L'expression 5 < 4
revient à demander "5 est-il inférieur à 4 ?". Étant donné que la réponse est non, l'expression échoue et le bloc de code (mis en retrait sous l'expression if
) ne s'exécute pas.
Examinons l'exemple suivant ainsi que l'expression faillible MousetrapsSet <> MiceCaught
. La question posée est la suivante : "Les valeurs de MousetrapsSet et MiceCaught sont-elles différentes ?".
MousetrapsSet := 3
MiceCaught := 0
if (MousetrapsSet<>MiceCaught):
Print(“Need more cheese!”)
Cette fois-ci, la réponse à la question est oui, car MousetrapsSet
est égal à 3 et MiceCaught
est égal à 0. L'expression réussit donc, et le bloc de code s'exécute.
Expressions de décision
Les expressions de décision, qui utilisent les opérateurs and
, or
et not
, sont faillibles. Dans l'exemple suivant, MousetrapsForSale > 0 and Coins >= MousetrapCost
est une expression faillible, mais qui réussit, car MousetrapsForSale
équivaut à 5 (supérieur à 0), Coins
équivaut à 30 et MousetrapCost
équivaut à 20 (30 est supérieur à 20). Les deux expressions réussissent chacune de façon indépendante, de sorte que l'ensemble de l'expression réussit.
MousetrapsForSale := 5
MousetrapCost := 20
Coins := 30
if (MousetrapsForSale > 0 and Coins >= MousetrapCost):
Print(“You can buy mouse traps.”)
Expressions de requête
Les expressions de requête sont également faillibles. Elles utilisent l'opérateur ?
pour vérifier certaines valeurs, par exemple si une valeur logic
est définie sur true
. Dans l'exemple suivant, MousetrapStoreOpen?
est une expression faillible qui échoue, car la valeur MousetrapStoreOpen
est false
.
var MousetrapStoreOpen : logic = false
if (MousetrapStoreOpen?):
Print(“Come on in!”)
Contextes d'échec
Dans tous les exemples de code ci-dessus, l'expression if
était le contexte d'échec pour les expressions faillibles entre parenthèses ()
. Les contextes d'échec constituent un emplacement sécurisé permettant aux expressions faillibles d'échouer, car ils déterminent ce qui se passe en cas d'échec.
Dans une leçon précédente, vous avez vu que lorsqu'une expression if
échoue, le code dans le bloc de code if
ne s'exécute pas.
Dans la mesure où if
crée un contexte d'échec, vous pouvez insérer autant d'expressions faillibles que vous le souhaitez dans son bloc de code. Si l'une de ces expressions échoue, les expressions précédentes du bloc de code sont annulées.
Il existe un autre moyen d'écrire des expressions if
sans utiliser ()
, plus utile si vous devez écrire un grand nombre d'expressions. Par exemple :
MousetrapsSet:int = 5
var MiceCaught:int = 0
var BreakTime:logic = false
if:
MousetrapsSet > 0
set BreakTime = true
MiceCaught > 0
if (BreakTime?):
Print("Take a break!")
else:
Print("Catch some mice!")
Toutes les expressions dans un contexte d'échec ne doivent pas nécessairement être faillibles, mais au moins l'une d'entre elles doit l'être. Dans l'exemple ci-dessus, set BreakTime = true
n'est pas faillible, mais les autres expressions le sont.
Dans le code ci-dessus, chaque expression mise en retrait sous if
est à l'intérieur du contexte d'échec. Les trois expressions vont s'exécuter.
MousetrapsSet > 0
réussit.- L'expression
set BreakTime = true
est exécutée. Étant donné qu'elle n'est pas faillible, il n'y a pas de contrôle d'échec. - Toutefois,
MiceCaught > 0
échoue.
Dans la mesure où un échec se produit, toutes les expressions du bloc de code if
sont annulées, y compris set BreakTime = true
, comme si ce code n'avait jamais été exécuté. Si vous exécutez ce code, le message "Catch some mice!" (Attrape des souris !) est imprimé.
Lors de la programmation, vous constaterez qu'une grande partie du code ne fonctionne que si d'autres codes s'exécutent correctement. C'est une autre raison pour laquelle les contextes d'échec sont si utiles. En regroupant le code dépendant dans des contextes d'échec, vous évitez certains bogues courants. Dans la leçon 4, vous avez écrit un code permettant de décider ou non d'aller au cinéma. Maintenant que vous avez décidé d'y aller avec vos amis, vous devez leur acheter des tickets, des boissons ("drinks") et des friandises ("snacks").
var Drinks:int = 4
var Snacks:int = 4
var Tickets:int = 3
var FriendsAvailable:int = 4
if:
Drinks >= FriendsAvailable
set Drinks -= FriendsAvailable
Snacks >= FriendsAvailable
set Snacks -= FriendsAvailable
Tickets >= FriendsAvailable
set Tickets -= FriendsAvailable
Print("Drinks Left: { Drinks }")
Print("Snacks Left: { Snacks }")
Print("Tickets Left: { Tickets }")
L'opérateur -=
est un raccourci pour combiner soustraction et assignation. Dans l'exemple ci-dessus, set Tickets -= FriendsAvailable
est équivalent à set Tickets = Tickets - FriendsAvailable
. Cela fonctionne également avec l'addition (+=
), la multiplication (*=
) et la division (/=
).
Vous avez suffisamment de boissons et de friandises pour vos amis disponibles, mais pas assez de tickets. Par conséquent, vous et vos amis ne pouvez pas voir le film. Vous pouvez écrire un code pour gérer cette situation, mais ne souhaitez probablement pas renoncer aux boissons et aux friandises.
Par chance, lorsque l'expression Tickets >= FriendsAvailable
s'exécute, elle échoue et tout le code du bloc if
est annulé. Cela signifie que les variables Drinks
et Snacks
reprennent toutes deux la valeur 4
.
Récapitulatif
- Dans Verse, l'échec est un moyen de contrôler votre programme.
- Les expressions faillibles peuvent soit réussir soit échouer et doivent être écrites dans un contexte d'échec. Les opérations qui se déroulent après une réussite ou un échec dépendent de la façon dont vous écrivez votre code.
- Les contextes d'échec constituent un emplacement sécurisé permettant aux expressions faillibles d'échouer. Tout échec dans un contexte d'échec entraîne l'annulation du code dans ce contexte, comme s'il n'avait jamais été exécuté.