Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// partage de liens //// une carte des membres//// (apéros) codelab


#16 2016-06-15 12:15:57 Re : Javascipt avec de la classe

touky
membre
Lieu: caen
Date d'inscription: 2006-06-28
Messages: 14

Re: Javascipt avec de la classe



Salut Eric,

pour répondre a ta derniere question et en reprenant ton exemple, je vais écrire ta fonction nommé "uneFonction"

function uneFonction(paramA)
{
    var premiereValeur = paramA.unParametre   // correspond a 'bla'
    var secondeValeur = paramA.unAutre           // correspond a 'blablabla'
}

il est d'usage de considérer qu'en JS tout est objet, que ce soit une chaine de caractere, un nombre, une fonction, un tableau...
______________________________________

pour revenir au sujet concernant les classes, j'ai eu un exemple , dans un tres bon livre sur le webgl, de structure de code pour la "creation de classe" en JS par l'utilisation de closure, depuis je structure mon code comme suit :

exemple d'une classe "animal" et de deux classe "cat" et "dog" qui "herite" de la classe animal

var animal = (function(){
    // count ==> variable static lié a la classe animal, incrementé lorsque l'on crée un objet animal
    var count = 0;   
    return {
        create: function(spec)
        {
            // that ==> objet relatif au nouvel objet crée correspond au "this"
            var that = {};
            var type = spec ? spec : "animal";

            var crying = "not defined";


            // incrementation du compteur lié a la classe
            count++;

            that.get_type = function()
            {
                return type;
            }
            that.get_count = function()
            {
                return count;
            }

            that.set_cry = function(a_cry)
            {
                crying = a_cry;
            }
            that.cry = function()
            {
                return crying;
            }
            //retourne le nouvel objet
            return that;
        }
    }
})()

var cat = (function(){
    return {
        create: function()
        {
            // instanciation de la classe animal avec en parametre son type "a cat"
            var that = animal.create("a cat")
            that.set_cry("miawo");
           
            return that;
        }
    }
})()

var dog = (function(){
    return {
        create: function()
        {
            // instanciation de la classe animal avec en parametre son type "a dog"
            var that = animal.create("a dog");
            that.set_cry("wouf");

            that.get_eye_color = function()
            {
                return "black";
            }
           
            return that;
        }
    }
})()

var a_cat = cat.create()
console.log("appel methode cry de la classe animal herite par la classe cat: ", a_cat.cry())
console.log("appel methode get_count de la classe animal herité par la classe cat: ", a_cat.get_count())
console.log("appel methode get_type de la classe animal herité par la classe cat : ", a_cat.get_type())

var second_cat = cat.create()
console.log("appel methode get_count de la classe animal herité par la classe cat: ", second_cat.get_count())

var a_dog = dog.create()
console.log("appel methode cry la classe animal herite par la classe dog: ", a_dog.cry())
console.log("appel method get_count de la classe animal, doit etre egale a 3 (3 animaux instanciés) : ", a_dog.get_count())
console.log("appel methode get_type de la classe animal herité par la classe dog : ", a_dog.get_type())

console.log("appel methode get_eye_color de la classe dog: ", a_dog.get_eye_color())

Dernière modification par touky (2016-06-15 13:30:31)


smile

Hors ligne

 

#17 2016-06-15 22:40:43 Re : Javascipt avec de la classe

Tepaze
membre
Lieu: Angers
Date d'inscription: 2014-04-14
Messages: 178

Re: Javascipt avec de la classe



Ah ca me plait beaucoup cette approche syntaxique. Mais paradoxalement, quelque chose me gêne dans la manière. Je m'explique :

Dans ton exemple touky, tu recrées des fonctions create dans l'ensemble de tes objets. Cette fonction retourne un ensemble de fonction et de variable propre à l'objet. C'est un héritage.

Mais l'utilisation de create est ambigu puisque c'est une fonction reservé en Javascript http://www.ecma-international.org/ecma- … c-15.2.3.5

D'ailleurs si tu change create par creation (par ex) dans ton exemple, cela fonctionne aussi.

Mais cela fait une bonne piste de reflexion (source d'inspiration : http://stackoverflow.com/questions/2709 … ead-of-new) :

citation :

Mamifere = (function(){
    var _this=this, zone_evolution="terrestre", multiplicateur = 1;

    this.nom;
    this.nb_pattes=0;

    this.zone_evolution = function(){
        if ( typeof(arguments[0]) != "undefined" ){
            zone_evolution = arguments[0];
        }else{
            return zone_evolution;
        };
    };

    this.est_bipede = function(){
        if ( this.nb_pattes == 2 ){
            return true;
        };
        return false;
    };

    this.son_nom = function(){
        if ( typeof(arguments[0]) != "undefined" ){
            this.nom = arguments[0];
        }else{
            return this.nom;
        };
    }

    this.deplacement = function(){
        if ( zone_evolution == "terrestre" ){
            return "marche";
        }
        return "Non Définit";
    };

    return this;
})();

var animal1 = Object.create(Mamifere, {"nom" : {value: "Homme_1"}, "nb_pattes" : {value : 2}});
console.log(animal1.son_nom());
console.log((animal1.est_bipede()) ? "Bipede" : "Non Bipede");
console.log(animal1.zone_evolution());

var Baleine = Object.create(Mamifere, {
    "nom" : {
        value: "Homme_1"
    },
    "nb_pattes" : {
        value : 0
    },
    "deplacement" : {
        value : function(){
            if ( this.zone_evolution() == "aquatique"){
                return "Nage";
            }else{
                return "undefined";
            }
        }
    }
});

var moby_dick = Object.create(Baleine, {"nom" : {value : "moby_dick"}, nb_pattes : {value : 0}});
console.log(moby_dick.son_nom());
console.log((moby_dick.est_bipede()) ? "Bipede" : "Non Bipede");

moby_dick.zone_evolution("aquatique");

console.log(moby_dick.zone_evolution());
console.log(moby_dick.deplacement());

Cette discussion ne fait que renforcer l'idée énoncée par EricRG :

citation :

je pense qu'il y a plusieurs "bonnes façons" de s'y prendre !

La question restant de savoir quelle est la meilleur ???
J'ai l'impression que l'approche syntaxique objet "strict" est intéressante, et la forme doit finir par influencer le fond.

Hors ligne

 

#18 2016-06-15 23:07:37 Re : Javascipt avec de la classe

touky
membre
Lieu: caen
Date d'inscription: 2006-06-28
Messages: 14

Re: Javascipt avec de la classe



tepaze tu as raison,

je l'ai nommé "create" et ca peut etre ambigue et en fin de compte tu pourrait mettre un autre mot , tel que 'instance' par exemple ca fonctionne tout aussi bien, c'est toi qui definit la clé tel que tu le souhaite, de mon coté j'ai pris cette habitude, je ne me sert jamais de la methode create associe a Object ( Object.create() ).
Bref tu nomme cette clé comme tu veux smile du moment que c est explicite pour tout le monde.


Maintenant a me rememorer du coté performance pour le JS, eviter le mot clé "this" et "new"

Puis pour le "use strict" il me semble que c'est une manière de controler la syntaxe dans le code qui suit le mot cle,  infiné c'est + stricte avec..

La meilleure methode reste celle qui te convient a toi pour te relire et travaille en equipe selon une norme et a voir les performances egalement smile

Dernière modification par touky (2016-06-15 23:08:01)


smile

Hors ligne

 

#19 2016-06-18 14:07:16 Re : Javascipt avec de la classe

EricRG
membre
Lieu: Bretagne
Date d'inscription: 2008-03-11
Messages: 169
Site web

Re: Javascipt avec de la classe



Bonjour,

- "use strict" : J'en ai entendu parler dans la vidéo : Comprende enfin Javascript (https://www.youtube.com/watch?v=PSeU1IJztkI)

C'est à utiliser systématiquement afin d'avoir les messages d'erreurs que l'on s'attend à avoir dans la console web du navigateur... sinon, c'est du grand n'importe quoi (je résume smile )

- Passage de paramètre via un seul objet :

Merci merci ! Oui, comment n'y ai-je pas pensé tout seul, c'est évident smile

- Autre façons de faire de l'héritage :
wao : oui, je comprends qu'en Javascript, étant donné que l'on peut passer en paramètre un objet entier cela permet de s'y prendre d'une tout autre dfaçon qu'avec les langages à classes/Instances.

Sinon, pour ma part, je vais essayer de me débrouiller avec la méthode avec les prototypes et les new et les this (vous parlez d'un ralentissement au niveau des performances : j'espère que ce n'est pas trop grave !)

En fait, je souhaite pouvoir faire des traductions de tout ou partie de programmes en Processing-Java et Processing-p5js à tout moment, donc j'ai besoin de pouvoir m'y prendre de la même manière au niveau des concepts

Ma première tâche est d'écrire une "petite bibliothèque" pour faire une GUI toute simple pour réécrire mes 3 anciens jeux vidéo en version javascript. Je vais la réécrire en parrallèle aussi pour Processing (j'aimerais les faire tourner sur android).
Une fois cela fait , j'aurai une base pour créer d'autres applis.

P.S. Je suis vraiment très content que ce fil de discussion intéresse d'autres personnes car je ne connais personne que ça intéresse vers chez moi ! smile

Hors ligne

 

#20 2016-06-18 17:31:21 Re : Javascipt avec de la classe

nononononono
membre
Lieu: Toulouse
Date d'inscription: 2011-02-04
Messages: 608

Re: Javascipt avec de la classe



et y'en a aussi qui regardent juste mais qui ont très interessés wink

Hors ligne

 

#21 2016-07-03 14:04:20 Re : Javascipt avec de la classe

EricRG
membre
Lieu: Bretagne
Date d'inscription: 2008-03-11
Messages: 169
Site web

Re: Javascipt avec de la classe



Pour information :

J'ai mis ce sujet "en attente" pour l'instant car je suis en train de me concentrer sur l'étude des chartes graphiques pour des sites internet (je regarde Foundation pour l'instant) et des CMS modx et silverstripe.

... mais je vais y revenir dès que je le pourrai !

Hors ligne

 

#22 2017-08-20 10:44:00 Re : Javascipt avec de la classe

EricRG
membre
Lieu: Bretagne
Date d'inscription: 2008-03-11
Messages: 169
Site web

Re: Javascipt avec de la classe



J'en reviens au début du fil !

Maintenant, il est possible d'écrire des classes avec le code ecmascript 6 (2015) , c'est à dire d'utiliser le mot clef class ...

et pour que ça fonctionne sur tous les navigateurs, le code ecmascript 6 peut être compilé en code ecmascript 5 facielement avec Babel :

https://babeljs.io/repl/#?babili=false& … ;code_lz=Q

Dernière modification par EricRG (2017-08-20 10:44:30)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2017