mb: viele Parameterübergabe! Wie umgehen?

Morgen liebe Community,

in meinem Projekt will ich sehr viele parameter von unterschiedlichen Datentyps übergeben. Ich habe konkrete vorstellungen:

  • die Parameter in Objekte und Arrays zu ordnen und auszuwerten

  • oder stück für stück jeweil an ein Funktionsobjekt zu übergeben.

  • oder Beides

Mir ist bewusst dass das vom jeweligen Kontext abhängt, aber ich wollte nur grob ne richtung von erfahrenden Programmieren wissen. Das Projekt nimmt ordnentliche dimensionen an. deshalb will ich sauber Programmieren.

Und sorry wenn ich mit meiner zunehmen impertinenten Fragen nerve. Meine Begründung habe ich ja genannt.

Liebe Grüß,

MB

  1. Tach!

    in meinem Projekt will ich sehr viele parameter von unterschiedlichen Datentyps übergeben. Ich habe konkrete vorstellungen:

    • die Parameter in Objekte und Arrays zu ordnen und auszuwerten
    • oder stück für stück jeweil an ein Funktionsobjekt zu übergeben.
    • oder Beides

    Mir ist bewusst dass das vom jeweligen Kontext abhängt, aber ich wollte nur grob ne richtung von erfahrenden Programmieren wissen.

    Wie du schon sagst, der kontext machts. Die Methoden kann man nur anhand der Anforderungen bewerten. Vielleicht ist dein Vorhaben an sich ncht sonderlich elegant und es gibt bessere Wege zum Ziel.

    "sehr viele parameter von unterschiedlichen Datentyps übergeben" - welcher Fall verlangt denn ein derartiges Chaos? Haben die Daten überhaupt nichts gemeinsames? Und wie liegen sie denn vor? Kommen sie schon als Array an oder musst du die einzeln irgendo einsammeln? Wie würdest du dann wissen, in welchen Variablen sie so rumlungern, wenn sie nicht an einem Ort gebündelt sind?

    Das Projekt nimmt ordnentliche dimensionen an. deshalb will ich sauber Programmieren.

    Dann ist ein ordentliches Datenmodell eine wichtige Grundlage. Was ordentlich oder angemessen ist, hängt von den Anforderungen ab. Ohne diese zu kennen, kann ich dir nur die allgmein bekannten Datenstrukturen nennen: Array und Objekt.

    dedlfix.

    1. Hallo dedlfix,

      "sehr viele parameter von unterschiedlichen Datentyps übergeben" - welcher Fall verlangt denn ein derartiges Chaos? Haben die Daten überhaupt nichts gemeinsames? Und wie liegen sie denn vor? Kommen sie schon als Array an oder musst du die einzeln irgendo einsammeln? Wie würdest du dann wissen, in welchen Variablen sie so rumlungern, wenn sie nicht an einem Ort gebündelt sind?

      Ich will n layout programmieren. abgespecktes borderLayout von Java. dazu brauche ich sehrviele parameter. z.B. Bezugspunkt, richtung, welche maße, die elemente, sowie dynamischer anfangspunkt-, endpunkt, kritische größen die elemente neue positionieren, usw. Ich will nix dem zufall überlassen ;-).

      Dann ist ein ordentliches Datenmodell eine wichtige Grundlage.

      Danke für den rat. Wie stelle ich mir n datenmodell vor? Ich hab n BuchÜber UML 2 von galileo und hab da mal an der oberflch gekratzt. Grobe Konzeptionen habe ich in schriftform - sehr grob.

      Grüße, mb

      1. Tach!

        Ich will n layout programmieren. abgespecktes borderLayout von Java.

        Reicht dir HTML+CSS dazu nicht?

        dazu brauche ich sehrviele parameter. z.B. Bezugspunkt, richtung, welche maße, die elemente, sowie dynamischer anfangspunkt-, endpunkt, kritische größen die elemente neue positionieren, usw.

        Diese sehr vielen Parameter werden ja wohl nicht nur eine Reihen von Zahlen sein, à la 0, 8, 15, 23, 42. Wie willst du daraus erkennen, was wofür steht?

        Dann ist ein ordentliches Datenmodell eine wichtige Grundlage.

        Danke für den rat. Wie stelle ich mir n datenmodell vor?

        Nun, indem man beispielsweise einen Punkt nicht als zwei lose Werte ansieht, sondern sich eine Struktur drumherum baut, aus der man erkennen kann, dass das ein Punkt sein soll und welche Eigenschaften der hat.

        function Point(x, y) {
          this.x = x || 0;
          this.y = y || 0;
        }
        

        Und wenn das Projekt umfangreicher werden soll, tät ich auch lieber Typescript und eine IDE nehmen, die damit umgehen kann (zum Beispiel PhpStorm/WebStorm). Das hilft beim Programmieren enorm, wenn die Autovervollständigung funktioniert und bei potentiellen Fehlern und Schludrigkeiten die betreffende Stelle markiert wird.

        class Point {
            private x;
            private y;
            
            constructor(x: number = 0, y: number = 0) {
                this.X = x;
                this.Y = y;
            }
        
            get X(): number { return this.x;}
            set X(value: number) { this.x = value; }
        
            get Y(): number { return this.y;}
            set Y(value: number) { this.y = value; }
        }
        

        Sieht etwas umfangreicher aus, ist es auch. Statt einfacher Eigenschaften gibt es richtige Getter/Setter. Kann man auch in reinem Javascript machen (Typescript übersetzt das auch nur dahin), schreibt sich aber wesentlich umständlicher.

        dedlfix.

        1. Moin!

          Das ES2015-Pendant[1] zu deinem Beispiel, sieht der TypeScript-Variante auch sehr ähnlich:

          const Point = ((_x = Symbol(),_y = Symbol()) => 
             class Point {
                constructor (x=0,y=0) {
                   this[_x] = x;
                   this[_y] = y;
                }
                get x() { return this[_x] }
                get y() { return this[_y] }
             })();
          

          Das werte ich als dickes Plus für TypeScript (verglichen mit anderen Dialekten wie CoffeeScript); da es sich um eine Supermenge von JavaScript handelt, muss bereits erworbenes Wissen nicht neu erlernt werden, sondern kann direkt auf TypeScript übertragen werden.

          Der ES2015-Code hat bei diesem Beispiel zwei größere Nachteile:

          • Für die private Kapselung ist ein verboser Workaround mit Closure und Symbols notwendig.
          • Da die Typannotationen wegfallen, verliert man sinnvolle Werkzeugunterstützungen, wie Typechecking und teilweise Autovervollständigung.

          1. http://jsfiddle.net/omjbrrLx/ ↩︎

        2. Hallo dedlfix

          dazu brauche ich sehrviele parameter. z.B. Bezugspunkt, richtung, welche maße, die elemente, sowie dynamischer anfangspunkt-, endpunkt, kritische größen die elemente neue positionieren, usw.

          Diese sehr vielen Parameter werden ja wohl nicht nur eine Reihen von Zahlen sein, à la 0, 8, 15, 23, 42. Wie willst du daraus erkennen, was wofür steht?

          Oh string-,Boolsche-, Integer und float-Parameter. Ich könnte das auch wirklich mit integern arbeiten aber dann ürd ich nochmehr planloser darstehen

          Dann ist ein ordentliches Datenmodell eine wichtige Grundlage.

          Danke für den rat. Wie stelle ich mir n datenmodell vor?

          Nun, indem man beispielsweise einen Punkt nicht als zwei lose Werte ansieht, sondern sich eine Struktur drumherum baut, aus der man erkennen kann, dass das ein Punkt sein soll und welche Eigenschaften der hat.

          also alles in eintelteile verhackstückt Mach ich ja für die übersicht.

          Und wenn das Projekt umfangreicher werden soll, tät ich auch lieber Typescript und eine IDE nehmen, die damit umgehen kann (zum Beispiel PhpStorm/WebStorm). Das hilft beim Programmieren enorm, wenn die Autovervollständigung funktioniert und bei potentiellen Fehlern und Schludrigkeiten die betreffende Stelle markiert wird.

          aha ok. Das nächste Projekt wird sowieso in PHP sein. Danke fü dn Rat.

          class Point { private x; private y;

          constructor(x: number = 0, y: number = 0) {
              this.X = x;
              this.Y = y;
          }
          
          get X(): number { return this.x;}
          set X(value: number) { this.x = value; }
          
          get Y(): number { return this.y;}
          set Y(value: number) { this.y = value; }
          

          }

          sieht ach ner aktuellen JavaScript version aus. Deswegen befasse ich mich nicht damit! außerem kann man getter und setter methoden doch auch mit js programmieren

          Lieben Gruß, MB

          1. Tach!

            class Point {
                private x;
                private y;
                
                constructor(x: number = 0, y: number = 0) {
                    this.X = x;
                    this.Y = y;
                }
            
                get X(): number { return this.x;}
                set X(value: number) { this.x = value; }
            
                get Y(): number { return this.y;}
                set Y(value: number) { this.y = value; }
            }
            

            sieht ach ner aktuellen JavaScript version aus. Deswegen befasse ich mich nicht damit! außerem kann man getter und setter methoden doch auch mit js programmieren

            Wie ich schrieb, ist das TypeScript. Ein Aufsatz auf Javascript, damit man die Vorteile der Typisierung nutzen kann (aber nicht muss). Und ich schrieb auch, dass Javascript Getter/Setter hat, nur sind die wesentlich umständlicher zu verwenden als die TypeScript-Notation.

            dedlfix.

            1. Hallo dedlfix,

              Wie ich schrieb, ist das TypeScript. Ein Aufsatz auf Javascript, damit man die Vorteile der Typisierung nutzen kann (aber nicht muss). Und ich schrieb auch, dass Javascript Getter/Setter hat, nur sind die wesentlich umständlicher zu verwenden als die TypeScript-Notation.

              sry, habe ich überlesen oder falsch verstanden.

              Grüße mb

          2. sieht ach ner aktuellen JavaScript version aus. Deswegen befasse ich mich nicht damit!

            TypeScript ist nicht direkt JavaScript, sondern ein moderner Verwandter davon. Um TypeScript im Browser ausführen zu können, fällt ein Zwischenschritt an, bei dem der Quelltext in JavaScript-Quelltext übersetzt wird. Bei diesem Kompilier-Schritt kannst du wählen, ob du als Zielversion JavaScript von 2009 (EcmaScript5) oder JavaScript von 1999 (EcmaScript3) haben möchtest. Wenn Abwärtskompatibilität für dich folglich eine wichtige Rolle spielt (und das lese ich aus deiner Anspielung), dann solltest du dich mit TypeScript (oder einem vergleichbaren Compile-To-JavaScript-Dialekt) beschäftigen.

            Eine weitere sinnvolle Alternative kann der Einsatz von es5-shim sein, das ist eine Bibliothek, die in vielen alten Browser die Features von EcmaScript5 mit gewissen Einschränkungen nachrüstet.

            Die letzte, ungeliebte Alternative ist, direkt EcmaScript3-Code zu programmieren und dabei alle Inkompatibilitäten der Uralt-Browser selbst im Auge zu behalten. Das erfordert viel Ausprobieren, Geduld und Nerven, gerade für dich als Umsteiger, wird es dir schwer fallen, zwischen Features der verschiedenen Versionen zu unterscheiden.

            1. Dankeschön. Ja das hast du richtig vermutet. ich möcht mich zwischen nicht mehr aktuelle und sehr neuen browser bewegen die die skriptsprache interpretieren können. das Layout welches ich dabei bin zu programmieren kann sich sehen lassen und dazu benötigt man sehr viel mehr als css 3.