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

JavaScript Discussion :

Passage de paramètres à une fonction ne fonctionne pas dans certain cas?


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut Passage de paramètres à une fonction ne fonctionne pas dans certain cas?
    Bonjour à tous

    Mon JS reçoit en retour d'une requète un message "0" ou "1".
    Pour appeler une fonction une variable doit être mise en forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                case 15:
                    libel="xxx" + message;
                    //alert(libel);
                    chargeZonesdeControle(libel);
                break;
    Si alert est en fonction j'obtiens bien : xxx1
    La fonction:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    function chargeZonesDeControle(zone){
        //alert(zone);
        const ch="Controle horaire ";
        const cc="Controle capteur ";
        const ci="Controle inters base ";
        const trp="transparent";
        const pg="palegoldenrod";
        if(zone.substring(0,1)=="1"){
            alConnex.textContent="TimeOut dans 5 mn";
            alConnex.style.backgroundColor=trp;
        }
        else if(zone.substring(0,1)=="0"){
            alConnex.textContent = "Connexion permanente";
            alConnex.style.backgroundColor=pg;
        }
        if(zone.substring(1,2)=="1"){
            alControlH.textContent= ch + "On";
            alControlH.style.backgroundColor="palegreen";
        }
        else if(zone.substring(1,2)=='0'){
            alControlH.textContent= ch + "Off";
            alControlH.style.backgroundColor=trp;
        }
        if(zone.substring(2,3)=='1'){
            alControlC.textContent = cc + "On";
            alControlC.style.backgroundColor=pg;
        }
        else if(zone.substring(2,3)=='0'){
            alControlC.textContent = cc + "Off";
            alControlC.style.backgroundColor=trp;
        }
        if(zone.substring(3,4)=='1'){
            alControlI.textContent= ci + "On";
            alControlI.style.backgroundColor="palegreen";
        }
        else if(zone.substring(3,4)=='0'){
            alControlI.textContent= ci + "Off";
            alControlI.style.backgroundColor=trp;
        }
    }
    La variable 'zone' ne reçoit jamais xxx1

    Par contre si je remplace "xxx1" par "0001", cela fonctionne.

    Y a-t'il une explication?

  2. #2
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut Erreur impardonnable trouvée
    Désolé de vous avoir dérangé mais c'est tout simplement une erreur de frappe!

    ma fonction s'appelle: chargeZonesDeControle

    et je l'appelait par: chargeZonesdeControle avec un d minuscule

    Un vrai débutant !

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 310
    Par défaut
    Bonjour,
    Tout le monde est débutant par moment.
    Je viens d'apprendre que faire des substring dans un if c'est plus rapide que d'initialiser une variable au préalable :


    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    function measureTime() {
        const js = "thfshgispgh";  // La chaîne de caractères à tester
        const sub_js = js.substring(0, 5); // Pré-déclare une sous-chaîne
     
        // Test 1 : Déclarer la sous-chaîne dans une variable et utiliser dans le if
        console.time("Declared substring then if");
        for (let i = 0; i < 100000; i++) {
            if (sub_js  === "a") {
                // Ne rien faire, juste comparer
            }
            if (sub_js  === "b") {
                // Ne rien faire, juste comparer
            }
            if (sub_js === "c") {
                // Ne rien faire, juste comparer
            }
            if (sub_js === "thfsh") {
                // Ne rien faire, juste comparer
            }
        }
        console.timeEnd("Declared substring then if");
     
        // Test 2 : Faire directement le substring dans le if
        console.time("Substring in if");
        for (let i = 0; i < 100000; i++) {
            if (js.substring(0, 5) === "thfsh") {
                // Ne rien faire, juste comparer
            }
            if (js.substring(0, 5) === "thfsh") {
                // Ne rien faire, juste comparer
            }
            if (js.substring(0, 5) === "thfsh") {
                // Ne rien faire, juste comparer
            }
        }
        console.timeEnd("Substring in if");
    }
     
    measureTime(); // Exécution de la fonction
    Genre deux fois plus rapide
    Comme quoi ...
    Un problème sans solution est un problème mal posé. (Albert Einstein)

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 640
    Par défaut
    Citation Envoyé par gabi7756 Voir le message
    Je viens d'apprendre que faire des substring dans un if c'est plus rapide que d'initialiser une variable au préalable :
    j'utilise la dernière version de firefox et j'ai le résultat inverse, le 1er test affiche "0 ms" et le 2e test affiche "6 ms".

    en plus je pense que la clarté du code devrait être prioritaire sur l'optimisation donc je préfère le code du 1er test quelque soit le délai d'exécution.

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    @gabi7756 :
    • tes tests ne sont pas équitables, il conviendrait d'avoir le même nombre de clause if, ton test #2 devrait donc plutôt être :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
        // Test 2 : Faire directement le substring dans le if
        console.time("Substring in if");
        for (let i = 0; i < 100000; i++) {
    /*    
            if (js.substring(0, 5) === "thfsh") {
                // Ne rien faire, juste comparer
            }
            if (js.substring(0, 5) === "thfsh") {
                // Ne rien faire, juste comparer
            }
            if (js.substring(0, 5) === "thfsh") {
                // Ne rien faire, juste comparer
            }
    /*--*/
            if (js.substring(0, 5)   === "a") {
                // Ne rien faire, juste comparer
            }
            if (js.substring(0, 5)   === "b") {
                // Ne rien faire, juste comparer
            }
            if (js.substring(0, 5)  === "c") {
                // Ne rien faire, juste comparer
            }
            if (js.substring(0, 5)  === "thfsh") {
                // Ne rien faire, juste comparer
            }        
        }
        console.timeEnd("Substring in if");
    }
    • les résultats sont dépendant du navigateur, un coup je gagne un coup je perd !
    • comme dit par mathieu je pense également que la clarté et la maintenance sont à privilégier,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const sub_js = js.substring(0, 5); // Pré-déclare une sous-chaîne
    et dans ce sens plus « efficace » !

    Ceci dit, c'est également sans compter des éventuelles optimisations des moteurs JavScript qui font de plus en plus de merveilles !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/07/2020, 06h40
  2. Réponses: 0
    Dernier message: 05/02/2013, 09h15
  3. Classement qui ne fonctionne pas dans certains cas
    Par Furious68 dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/05/2010, 16h47
  4. Réponses: 1
    Dernier message: 10/12/2009, 22h26
  5. le programme ne s'execute pas dans certains cas
    Par djaval0221 dans le forum C++
    Réponses: 2
    Dernier message: 15/05/2008, 15h14

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