molily: OO bgColorChanger - next try: alles in einem Objekt - kl. opt.

Beitrag lesen

Weil du ja die Objektorientierung ins Spiel gebracht hat, könnte man jetzt einwenden, daß in diesem Fall eigentlich nur bgColorChange-Methode nach aussen sichtbar sein sollte, da alles andere eigentlich interne States sind.
Am Ende kann man dann auf ein eigenes Objekt verzichten. ;-)

Man kann viel, einen wirklichen Grund dafür gibt es nicht. Diesen Code finde ich ziemlich unlesbar und unverständlich. Eine klassische OOP-Lösung, die mit tatsächlichen Objekten arbeitet, würde ich hier vorziehen.

function createColorHandler(elem, prop, red, redRange, green, greenRange, blue, blueRange) {

createColorHandler ist ein ziemlich unpassender Name. Zurückgegeben wird ja eine Step-Funktion für eine Farb-Animation. Wieso nicht gleich die Animation als ganze wegkapseln?

function createColorObj(v, r) {
      var value = v;
      var max = v;
      var range = r;
      var dir = 1;
      return function() {
        if (value <= max - range || value >= max) {
          dir *= -1;
        }
        value += dir;
        return value;
      };
    }

Hier wird kein Objekt erzeugt, sondern eine Closure. Kein Problem an sich, aber createColorObj ist kein passender Name, eher createNextColorFunc oder so.

Allgemein: Kapselung in der Programmierung ist [link:http://molily.de/js/organisation-instanzen.html#kapselung@title=kein Selbstzweck] und hat auch nichts mit von außen effektiv nicht sichtbaren Interna zu tun. Kapselung soll einem ermöglichen, Programme zu strukturieren und sinnvolle Schnittstellen anzubieten, um die Schnittstelle von der Implementierung zu trennen. Konkret, nur weil man Closures hat, muss man nicht sämtlichen State in Closures kapseln.

var red = createColorObj(red, redRange);

Eine Funktion namens »red«? Sollte zumindest [pref:t=209455;m=1425820@title=nextRead] heißen.

window.setInterval(createColorHandler(myBody.style, "backgroundColor", 255, 55, 168, 10, 136, 16), 120);
};

  
Animationen kann man sehr schön objektorientiert lösen und abstrahieren. Dafür gibt es viele gute Beispiele. Dies hingegen ist m.E. keine schöne und lesbare API, ich würde sie nicht benutzen wollen.  
  
Vielleicht sollte jobo erst einmal versuchen, einfachen, klassischen OO-Code zu schreiben, verständliche APIs zu entwerfen und dann stärker funktional zu programmieren. Denn diesen Code finde ich alles andere als elegant.  
  
Mathias
0 59

OO Backgroundcolorchanger - optimieren /Kontext von this

jobo
  • javascript
  1. 0
    unknown
    1. 0

      OO - optimieren /Kontext von this - was macht der Browser da?

      jobo
      1. 0
        unknown
        1. 0
          jobo
          1. 0
            unknown
            1. 0
              jobo
              1. 0
                unknown
                1. 0
                  jobo
                  1. 0
                    unknown
  2. 0
    ChrisB
    1. 0
      jobo
      1. 0
        ChrisB
        1. 0
          jobo
          1. 0
            molily
            1. 0
              jobo
      2. 0
        molily
        1. 0
          jobo
          1. 0
            molily
            1. 0

              OO bgColorChanger - next try: alles in einem Objekt

              jobo
              1. 0

                OO bgColorChanger - next try: alles in einem Objekt - kl. opt.

                jobo
                1. 0
                  unknown
                  1. 0
                    jobo
                    1. 0
                      jobo
                      1. 0

                        colorChanger - rein funktional - Feinschliff

                        jobo
                        1. 0
                          jobo
                          1. 0

                            colorChanger - Feinschliff en Detail, macht das Sinn?

                            jobo
                            1. 0
                              molily
                              1. 0
                                jobo
                                1. 0
                                  molily
                          2. 0
                            molily
                            1. 0
                              jobo
                              1. 0
                                unknown
                                1. 0
                                  jobo
                                  1. 0
                                    unknown
                                2. 0
                                  molily
                                  1. 0
                                    unknown
                  2. 2
                    molily
                    1. 0
                      unknown
                      1. 0
                        molily
                        1. 0
                          molily
                          1. 0
                            unknown
                            1. 0
                              jobo
                            2. 0
                              jobo
                            3. 0

                              OO bgColorChanger - mit Closure (verschachtelte Objekte)

                              jobo
                            4. 0
                              molily
                              1. 0

                                OO bgColorChanger - elegant oder zumindest vernünftig!

                                jobo
                    2. 0
                      jobo
                    3. 0

                      bgColorChanger - OO vs. funktional

                      jobo
                      1. 1
                        molily
                        1. 0
                          jobo
  3. 0

    OO - Zugriff auf Objektmethode mittels Namen als Stringparameter

    jobo
    1. 0
      unknown
      1. 0
        jobo
        1. 0
          ChrisB
          1. 0
            jobo
        2. 0
          unknown
    2. 0
      molily
      1. 0
        jobo