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 :

Déclarer une variable static


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut Déclarer une variable static
    Bonjour,

    J'ai du mal à comprendre comment faire une variable static.
    J'ai essayer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $('#bouton').click(function(){
       Test.setTest("test");
       alert(Test.getTest);
    });
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Test{
       Test.ok ="";
       static get getTest(){ return Test.ok; }
       static set setTest(data){ Test.ok = data; }
    }
    Ca ne marche pas.
    Une idée?
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  2. #2
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par Pecose Voir le message
    Une idée?
    Mon idée serait celle-ci pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Test {    
     
        static get ok() {
            return this._ok;
        }
        static set ok(data) {
            this._ok = data;
        }
    }
    Test.ok = "test";
    console.log(Test.ok); 
    alert(Test.ok);

  3. #3
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Merci Beginner.
    Du coup j'ai une autre question.
    J'ai fait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Test{}
    Test.ko = "Language de mer et des poissons";
    alert(Test.ko);
    Ca marche...
    Alors à quoi servent les getters et les setters dans ce language?
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    Ne confondez pas une class avec un object de cette class.

    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
    window.addEventListener('load', ev => {
        // le DOM est construit et la page web est visible
     
        // début code du test
     
        class Test {
            constructor(p1) {
                this.ok = String(p1) || "agir";
                Test.action = this.ok;
            }
     
            // un get/set ajoute un nouvelle propriété qui doit être nomée
     
            static get action() {
                return this.ok;
            }
            static set action(value) {
                this.ok = String(value);
            }
        }
     
        Test.ko = "Language de mer et des poissons";
     
        // ne confondez pas une class avec un object de cette class
     
        let oMonTest = new Test('parcourir');
     
        console.log(`ok = ${ oMonTest.ok }`); // parcourir
        console.log(`Test.action = ${ Test.action }`); // parcourir
     
        console.log(`ko = ${ oMonTest.ko }`); // undefined ! n'existe pas dans l'objet.
     
     
        // fin code du test
     
    }, {
        capture: false,
        passive: true,
        once: false
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par Pecose Voir le message
    Ca marche...
    Alors à quoi servent les getters et les setters dans ce language?
    Oui effectivement les deux manières fonctionnent et c'est vrai que dans ce cas simple on ne voit pas trop l’intérêt d'utiliser des getters/setters... Mais il y a bien une différence dans un cas on a une simple affectation et dans l'autre on a une fonction qui est exécutée.

    C'est-à-dire dans ton exemple quand on fait Test.ko = "Language de mer et des poissons"; on a une simple affectation et dans l'autre cas la fonction set ok sera exécutée... Alors si cette fonction ne fait que retournée une valeur alors il n'y a pas beaucoup d’intérêt (pas beaucoup de différence avec une simple affectation)...

    Maintenant supposons que tu veuilles qu'il y ait plus qu'une simple affectation, tu veux qu'à chaque fois un traitement particulier soit effectuer alors tu pourras ajouter ce traitement dans la fonction set ok...

    Exemple tout bête : si tu voulais que seuls les 11 premiers caractères de la chaine soit affectés à la propriété ok eh bien tu pourrais ajouter cette fonctionnalité dans la fonction...

    Les getters/setters cela permet de protéger les données contre un éventuel mauvais usage qu'on pourrait en faire, d'une manière générale tu peux vouloir empêcher qu'on affecte n'importe quoi n'importe comment quelque chose à ta propriété ce qui pourrait provoquer un dysfonctionnent (un fonctionnement non voulu).

    D'autres membres donneront peut-être une meilleure explication...

  6. #6
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    D'accord, merci danielhagnoul,

    Je comprend bien que du fait que tu appel une valeur qui appartient uniquement à la classe, depuis l'objet, ça pose un petit problème.
    Mais je ne comprend pas très bien en quoi cela démontre que les setters et getters sont utiles.
    Je suis peut être pas très clair alors voila un autre exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Test{
        static get ko(){ return this.ok; }
        static set ko(data){ this.ok = data; }
    }
    var test = new Test();
    test.ko = "ko";
    test.ok = "ok";
    alert(test.ko + test.ok)
    Dans ce code tout fonctionne.
    Dans ce cas, pourquoi je m'embête à faire des get/set.
    C'est même pas utile visuellement. Si il fallait écrire : "test.getOK();" pour que ca fonctionne, là ok, puisque ca se voit.
    Mais là c'est quoi l’intérêt?
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  7. #7
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par Pecose Voir le message
    Dans ce code tout fonctionne.
    Dans ce cas, pourquoi je m'embête à faire des get/set.
    J'ai donné une petite explication dans mon message précédent...

    Et pour ton nouvel exemple il faut faire attention au fait que test.ko et Test.ko sont deux propriétés différentes...

  8. #8
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Dans un exemple simpliste, il n'y a pas de différence entre une propriété classique et une propriété générée par un get/set. Mais n'oubliez pas que le get et le set peuvent contenir un code JS aussi complexe que souhaiter.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  9. #9
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    J'ai donné une petite explication dans mon message précédent...
    Merci Beginner. je n'avais pas vu ton message.
    Citation Envoyé par Beginner. Voir le message
    Maintenant supposons que tu veuilles qu'il y ait plus qu'une simple affectation, tu veux qu'à chaque fois un traitement particulier soit effectuer alors tu pourras ajouter ce traitement dans la fonction set ok...
    Ok mais dans ce cas c'est peut être pas très lisible d'utiliser un set plutôt qu'une méthode lambda.
    Par contre, ca donne accès à un genre de mini polymorphisme qui j'en suis sur génère un maximum de confusion et d’erreurs.
    Bon après de mon point de vu de débutant un peu vénère, n'importe quoi dans ce langage génère un maximum de confusion et d’erreurs.

    En tout cas merci beaucoup pour vos explications.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

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

Discussions similaires

  1. [WD14] déclarer une variable static
    Par Mut dans le forum WinDev
    Réponses: 3
    Dernier message: 06/09/2012, 13h35
  2. [Variable] Déclarer une variable avec un nom dynamique
    Par jacquesh dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/02/2006, 14h11
  3. Réponses: 5
    Dernier message: 20/09/2005, 22h48
  4. [VB6]Initialiser une variable Static dans un évenement
    Par loverdose dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 20/01/2005, 14h57
  5. [héritage] héritage d'une variable static
    Par yaya44 dans le forum Langage
    Réponses: 14
    Dernier message: 29/09/2004, 13h36

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