IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Incompréhension de la notion de "scope" en javascript


Sujet :

NodeJS

  1. #1
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    septembre 2012
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : septembre 2012
    Messages : 253
    Points : 299
    Points
    299
    Par défaut Incompréhension de la notion de "scope" en javascript
    Bonjour,

    Je suis en train d'essayer d'aider mes élèves en javascript concernant la mise en oeuvre d'un "jeu du memory".
    Je l'ai fait en C en deux temps trois mouvements en mode SDL2 et ça marche super il y atrès longtemps, mais mes collègues à l'école veulent faire ça en javascript.
    Je n'ai jamais programmé en javascript, mais bon...

    Voici mon soucis: je déclare un Array() qui devrait se comporter un peu comme une pile d'après l'interface (les méthodes disponibles), je compte remplir cette pile en lisant un dossier local contenant des images.
    Dans la fonction qui permet d'opérer un traitement sur chaque élément d'une autre liste, je fais un push() sur un Array() qui devrait être "global" vu qu'il est en dehors de toute fonction...
    Or le nombre d'éléments dans la pile reste à 0 sauf dans le fonction où je fais mon Push() :{

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var path=require('path');
    var filesystem=require('fs');
     
    const stackfichiers=new Array();
     
    var repertoireimages=path.join("./images");
    console.log("Répertoire: "+repertoireimages);
     
    filesystem.readdir(repertoireimages,{withFileTypes:true},fichiers);
    console.log("Pile: "+stackfichiers.length);
    Là j'ai 0 :{

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function fichiers(erreur,listefichiers)
    {
    	if(erreur)
    	{
    		console.log(erreur);
    	}	
    	console.log("Nombre de fichiers: "+listefichiers.length);
     
    	listefichiers.forEach(traitementfichier)
    }
     
    function traitementfichier(unfichier)
    {
    	console.log("Fichier traité: "+unfichier.name+" répertoire ("+unfichier.isDirectory()+")");
    	stackfichiers.push(unfichier.name);
    	console.log("Pile: "+stackfichiers.length); 
    }
    Là au bout d'un moment je suis à 24, le nombre de fichiers contenus dans le répertoire...

    stackfichiers semble dupliqué en mode local à la fonction traitementfichier() et en mode global au fichier .js contenant les instructions mais les deux ne partagent pas la même adresse en mémoire ce qui m'ennuie bcp.

  2. #2
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    septembre 2012
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : septembre 2012
    Messages : 253
    Points : 299
    Points
    299
    Par défaut
    ouch !! En plus nodejs ne fonctionne pas en mode script javascript... des choses comme require() ne passent pas quand c'est intégré à un script javascript s'exécutant sur un client Web...

    même en le remplacant par import()... je vais faire ça en Perl ça ira bcp plus vite et mieux (je suis bcp plus à l'aise avec perl 5) bon il faut que ce soit fait server side de toutes (cgi-bin).

  3. #3
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    juin 2003
    Messages
    8 819
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 8 819
    Points : 13 616
    Points
    13 616
    Par défaut
    je ne pense pas que ça soit un souci de porté mais plutot de "readdir" qui est peut être asynchrone.
    cela veut dire que l'appel à "readdir" est lancé dans une autre file et donc la ligne d'après qui utilise stackfichiers est exécutée immédiatement alors que la lecture du répertoire n'a pas encore commencé.

  4. #4
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    septembre 2012
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : septembre 2012
    Messages : 253
    Points : 299
    Points
    299
    Par défaut
    Oui, je pensais naïvement que les "callback" fonctions -- normalement appelées dans le cadre des "completion routines", appelées dans le cadre de traitements asynchrones lorsque les opérations sont terminées -- étaient des fonctions de callback... ici apparemment...
    Pas grave... il semblerait qu'il existe les mêmes fonctions avec "sync" derrière qui "je l'espère" corresponderont mieux à ce que je cherche.

    C'est bien beau d'être asynchrone, encore faut-il que dans le nom de la fonction on le "lise" async_thisfunction, par exemple, et surtout que les "completion routines" soient de vraies "completion routines" dans le sens asynchrone du terme...
    Quand je programme une fonction asynchrone la "completion routine" est appelée quand le traitement de la fonction, en "thread" ou "fork", est terminé... ici je suis un peu surpris.

    Je vais faire un "sleep" juste après l'appel à readdir() pour voir... essayer de comprendre ce que nodejs appelle "asynchronous routines" et "callback functions"...

Discussions similaires

  1. [DOM] Quotes en Javascript
    Par APoLLoN1234 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/06/2007, 07h35
  2. Quote dans une requete...
    Par Isildur dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/06/2006, 10h57
  3. Problème de quote
    Par kennini dans le forum ASP
    Réponses: 4
    Dernier message: 20/11/2003, 09h40
  4. VARCHAR contenant une quote '
    Par tonyskn dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/05/2003, 19h21
  5. Quotes dans TFilenameEdit (RXLib)
    Par AnnSo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 23/01/2003, 20h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo