[Inform 7] Une histoire de variables temporaires

Pour discuter des langages que nous utilisons pour réaliser nos jeux : problèmes, solutions, suggestions...

Modérateurs: Stormi, Otto Grimwald

[Inform 7] Une histoire de variables temporaires

Messagepar Corax le Mar Fév 06, 2018 11:44 am

Salut à tous !

Toujours plongé dans ma quête de traqueur de points nébuleux, j’aborde aujourd’hui un point de détails, le nom des variables temporaires et les éventuels conflits qui peuvent, ou non, en découler.
Là est justement la question : peut-il y avoir des conflits ?

J’ai pour habitude de chercher à donner uniquement des noms différents à toutes mes variables temporaires. J’ai un peu peur qu’une similitude de noms, au moment malheureux où plusieurs règles sont en cours de déroulement, puisse provoquer une confusion de valeur, donc un bug bien vicieux à détecter, ce genre de collision se déroulant en général à cause d’une combinaison involontaire et donc ignorée.
Imaginez par exemple la variable N souvent utilisées dans les boucles qui s’emmêle parce qu’il y a une boucle dans une boucle et que toutes deux utilisent N. Moi, du coup, j’ai des N1, N2, N3... N5584, enfin pas si loin, j’exagère, mais l’idée est là.

Ai-je raison de procéder ainsi ?

Je viens de trouver cet extrait de code dans l’extension des liens hypertextes de Vorple :

Code: Tout sélectionner
To place a/-- link to a/the/-- command (cmd - text) called (classes - text) reading (txt - text), without showing the command:
  let silent be false;
  if without showing the command:
    now silent is true;
  let id be unique identifier;
  place "a" element called "vorple-link vorple-commandlink link-[id] [classes]" reading txt;
  execute JavaScript command "$('a.link-[id]').attr('href', '#').attr('data-command', '[escaped cmd]').attr('data-silent', '[silent]')".

To place a/-- link to a/the/-- command (cmd - text) called (classes - text), without showing the command:
  if without showing the command:
    place a link to the command cmd called classes reading cmd, without showing the command;
  otherwise:
    place a link to the command cmd called classes reading cmd.


Cette structure, très pratique pour rendre flexible les définitions, sans pour autant tout recopier, provoque-t-elle une confusion qui, bien sûr dans ce cadre, n’a aucune importance ?

Je cherche juste à piger le principe sous-jacent, comment Inform7 réagit-il quand il croise un nom de variable temporaire encore employé, mais désormais utilisé dans un cadre différent de celui où il a été initialement été déclaré.

Voilà, voilà !
Corax
Grand Ancien
 
Messages: 282
Inscription: Mer Juin 08, 2016 10:00 am

Re: [Inform 7] Une histoire de variables temporaires

Messagepar Natrium le Jeu Fév 08, 2018 10:31 pm

Je ne me suis jamais vraiment posé la question, mais je pense qu'en général il n'y a pas trop besoin de se casser la tête.

Dans le cas où le nom est déjà utilisé (par exemple par une variable globale), je pense que ça empêchera, dans la règle ou la phrase en cours, d'accéder à la globale, puisque le nom fera à partir de ce moment référence à la locale.

Je pense aussi qu'il doit être possible qu'Inform détecte certains cas et renvoie une erreur si un nom est déjà utilisé.

Tu as raison d'utiliser des noms différents pour des boucles imbriqués, mais il n'y a pas à s'inquiéter autrement. Une variable locale n'est accessible que depuis la règle ou phrase en cours, donc la seule chose importante est qu'il n'y a pas de conflit au sein d'une même règle ou phrase. Ce n'est pas grave si un nom est déjà utilisé quelque part d'autre. Par exemple, il est possible de faire de la récursion :

Code: Tout sélectionner
To decide what number is (N - a number) factorielle:
    if N < 0:
        decide on 0;
    else if N is 0:
        decide on 1;
    else:
        let N2 be N - 1;
        decide on N * N2 factorielle.

Il n'y aura pas de conflit entre les différents N, chacun ne verra que sa phrase.

Sinon, je ne suis pas sûr de comprendre ce que tu veux montrer avec ce morceau de code Vorple, mais quoi que ce soit, il n'y aura pas de confusion.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1164
Inscription: Mar Oct 04, 2011 11:18 pm

Re: [Inform 7] Une histoire de variables temporaires

Messagepar Corax le Ven Fév 09, 2018 8:50 am

Ok, merci ^^

Si les variables locales sont bien accessibles uniquement dans le cadre de leur définition, en effet, il n'y a pas trop à se prendre la tête.
Corax
Grand Ancien
 
Messages: 282
Inscription: Mer Juin 08, 2016 10:00 am

Re: [Inform 7] Une histoire de variables temporaires

Messagepar Natrium le Sam Fév 10, 2018 1:34 am

Sinon, pour être sûr d'éviter les conflits, j'utilise en général des lettres (« E » pour un endroit, « P » pour une personne, etc.) ou des abréviations courtes (« txt » pour un texte), avec éventuellement un nombre. Certes, ça fait moins langage naturel, mais comme ça n'entrera pas en conflit avec d'éventuels objets ou variables ayant le même nom. Et ça reste suffisamment compréhensible.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1164
Inscription: Mar Oct 04, 2011 11:18 pm


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron