• [^] # Re: javascript

    Posté par (site web personnel) . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 2.

    ra mais c'est pas vrai ça

    Non c'est vrai !

    > la classe mère qui gère le flag
    non, c'est la classe fille !

    > quand c'est bien fait, le truc que tu racontes est simplement et purement faux
    ben non, si c'était bien fait on aurait pas à faire toutes ces conneries de java


    Allez on reprend pour ceux du fond qui ne suivent pas.

    disclaimer : ceci est un exemple, pour comprendre, qu'on me sorte pas des conneries de collection ou autre c'est pour expliquer un principe, une logique, non pour écrire un exemple réel (j'suis pas sur que tout le monde ait compris ça déjà...)

    Imaginons une classe de tableau : (ha oui, j'écris ni en ruby, ni en java, ni en js, etc c'est juste pour comprendre sans s'en soucier, et oui j'ai pas mis de test, de validation, etc on s'en branle)

    class Array

    def get index
    return data_au_bon_index
    end

    def set index, value
    data_au_bon_index = value
    end
    end


    Maintenant j'ai deux classes utilisant ceci, en rajoutant des besoins spécifiques et non nécessaires à tous (oui les noms sont pourris je m'en fou aussi c'est un exemple) :

    class ArrayWithExtraFunctionnality1 < Array
    def plop
    [...]
    end
    end

    class ArrayWithMinMax <Array
    def getMinMax
    end
    end


    Version sympa :

    class ArrayWithMinMax < Array
    def getMinMax
    [...]
    return min, max
    end
    end


    Version "java"

    class ArrayWithMinMax < Array
    boolean internalStateModified = false

    def getMin
    if internalStateModified
    computeMinMax
    end

    return min
    end

    def getMax
    if internalStateModified
    computeMinMax
    end

    return max
    end

    def set index, value
    internalStateModified = true

    super.set(index, value)
    end
    end


    Maintenant je veux rajouter la méthode concat dans ma classe mère car je sais qu'elle sera utilisée par _toutes_ les classes filles :


    class Array
    [...]

    def concat otherArray
    [...]
    end
    end


    Avec la solution simple ... ben je change rien, je peux l'utiliser
    Avec la solution "java" :

    class ArrayWithMinMax < Array
    [...]

    def concat otherArray
    internalStateModified = true

    super.concat otherArray
    end
    end


    Il faut donc que je maintienne ma classe fille quand je rajoute des choses dans la classe mère.

    Ha oui, je veux pas que mon "internalStateModified" soit dans la classe mère, je veux juste rajouter un getMinMax qui est utile que pour ce cas précis.

    En gros, comment proposer une architecture complexe juste pour rajouter le calcul et le retour de deux valeurs simultanément...