Nous allons aujourd’hui voir comment réutiliser des parties de notre code à plusieurs endroits de notre source, sans avoir à les réécrire à chaque fois.

Pour cela, nous allons utiliser des expressions (« phrases » en anglais).

Dans Inform 7, une expression est un ensemble d’instructions que l’on peut réutiliser facilement, sans avoir à toutes les retaper.

Créer une expression

Le type d’expression le plus simple se crée en tapant dans le code To suivi de n’importe quels mots puis d’un deux-points, un peu comme une règle. Doivent suivre ensuite une série d’instructions, indentées, encore une fois comme dans une règle.

To déclencher le piège:
	maintenant la trappe est fermée;
	maintenant la trappe est verrouillée;
	maintenant les oubliettes sont sombres; 
	dire "Soudainement, la trappe se referme, vous plongeant dans l'obscurité[_]!".

Avec cela, l’instruction déclencher le piège; (c’est-à-dire les mots que nous avons écrits après To) est utilisable dans le reste de notre source, par exemple dans d’autres règles :

Before opening le coffre:
	déclencher le piège.

Instead of pulling le levier:
	déclencher le piège.

Ainsi, ouvrir le coffre et tirer le levier déclencheront le piège, sans que nous ayons eu à nous répéter. De plus, cela facilite la maintenance du code ; si jamais nous voulons modifier ce qu’il se passe lorsque le piège se déclenche, il suffit de le faire une seule fois dans l’expression, plutôt que dans chaque règle qui fait se déclencher le piège.

Des expressions non fixées

Imaginons maintenant que nous avons plusieurs pièges, et que la porte qui se referme est différente selon celui qui est déclenché. Faudra-t-il créer une expression pour chacun d’eux, comme ce qui suit ?

To déclencher le piège de la trappe:
	maintenant la trappe est fermée;
	[…]

To déclencher le piège du portail:
	maintenant le portail est fermé;
	[…]

Vous vous en doutez, la réponse est non. Il suffit de faire une expression qui n’a pas une forme fixe.

To déclencher le piège du/de/des (sortie - une porte):
	maintenant la sortie est fermée;
	maintenant la sortie est verrouillée;
	maintenant la location est sombre;
	dire "Soudainement, [la sortie] se referme, vous plongeant dans l'obscurité[_]!".

L’expression agit maintenant comme une phrase à « trous ». Ces trous sont entre parenthèses et contiennent deux éléments séparés par un trait d’union. Le premier est le nom qui sera utilisé dans l’expression pour se référer à ce qui comblera le trou quand on utilisera l’expression, et le second est le type que le trou accepte.

Avec cette expression, nous serons en mesure d’écrire :

Instead of pulling le levier:
	déclencher le piège de la trappe.

After entering la plateforme:
	déclencher le piège du portail.

Dans le premier cas, sortie fera référence à la trappe ; dans le second, au portail.

Et hors de l’expression, sortie ne signifiera rien.

Enfin, il est possible d’autoriser plusieurs formulations pour une expression en donnant plusieurs options pour un mot, séparées par des barres obliques. Ici, nous permettons l’emploi de plusieurs prépositions.

Cette syntaxe pour des expressions non fixée est aussi valable pour les types d’expressions présentés plus bas.

Des expressions qui font un choix

Il est également possible d’avoir des expressions renvoyant une valeur. Elles prennent la forme suivante :

To decide what type is nom arbitraire:
	[…]
	se décider pour la valeur à renvoyer.

Par exemple :

La maison est un endroit. La voisine est une femme. Le facteur est un homme. Le voleur est un homme. Le chat est un animal. Le facteur porte la lettre. Le player porte le diamant. 

To decide what personne is le prochain visiteur:
	si le player ne porte pas la lettre:
		se décider pour le facteur;
	sinon si le player porte l' argent:
		se décider pour le voleur;
	sinon si le player porte le poisson:
		se décider pour le chat;
	sinon:
		se décider pour la voisine.

Avec cela, nous pourrons écrire :

Every turn:
	si le prochain visiteur est le chat:
		dire "Vous entendez un miaulement.";
	maintenant le prochain visiteur est dans la maison.

Ici, le prochain visiteur est une certaine personne, déterminée selon certaines conditions ; puis, à chaque tour, on affiche un message si le prochain visiteur est le chat et on amène le prochain visiteur dans la maison (bien sûr, l’exemple est très simpliste ; ça ne s’arrêtera jamais, donc ça finirait avec la voisine remise dans la maison à chaque tour, même si elle y est déjà).

Des expressions pour dire des choses

Nous finissons ce tutoriel avec des expressions permettant de créer des substitutions de texte. Elles doivent commencer par To dire.

To dire avertissement:
	dire "Attention, défense d'entrer !".

Cela créera la substitution "[avertissement]", qui affichera le texte « Attention, défense d’entrer ! ». Nous pourrons ainsi afficher ce texte dans plusieurs endroits du jeu sans avoir à le retaper ; pratique si ce texte revient souvent ! On peut faire quelque chose de plus compliqué, en faisant varier le texte sous certaines conditions, comme avec l’expression de la section précédente.

Pour en savoir plus

Pour en savoir plus sur les expressions, vous pouvez aller voir les sections 1, 2, 3, 16 et 17 du chapitre 11 de la documentation d’Inform. De plus, la section 11.15 explique une notion utile, les variables temporaires. Il y aura peut-être un tutoriel qui parlera de cela plus en détail un jour !