Ankündigung

Einklappen
Keine Ankündigung bisher.

Pflichtparameter in Funktion

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Pflichtparameter in Funktion

    Guten Abend zusammen,
    ich fange fehlende aber benötigte Parameter bei Funktionen so ab:
    Code:
    function myFunction(test){
      if (!test) alert ("Fehler: Parameter test fehlt!");
    }
    das ist nicht besonders elegant, wie löst ihr das?

  • #2
    Ja wirklich nicht sehr elegant,

    ich löse es wie folgt:


    HTML-Code:
    const neededParameter = (par) => {throw new Error('missing Parameter: '+ par +'!');}
    
    function myFunction(test = neededParameter('test'), testa = neededParameter('testa')){
      //..................
    }
    
    myFunction(1);

    Kommentar


    • #3
      kaminbausatz
      Danke, gute Idee.

      Kommentar


      • #4
        Ich finde den Ansatz vom kaminbausatz ziemlich witzig. Eine Alternative wäre eventuell sowas:

        PHP-Code:
        function force(){
          
        let args = Array.from(arguments);
          if(
        args.includes(undefined)){
            throw 
        'missing param #' args.indexOf(undefined);
          }
        }

        function 
        yolo(ab){
          
        force(ab);
          
        // ..

        [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

        Kommentar


        • #5
          lottikarotti

          Vielen Dank für den Vorschlag. die kaminbausatz Lösung gefällt mir deswegen weil die benötigten Parameter in der Funktionsdeklaration zu erkennen sind. Diese Lösung habe ich kopiert und eingefügt, sie läuft auf Anhieb.

          Der Vorschlag von dir läuft ebenso gut und ich verstehe sie auch.

          Bei dem kaminbausatz Vorschlag habe ich noch nicht verstanden wie das funktioniert. Er weist dem Parameter eine Funktion zu

          HTML-Code:
            test = neededParameter('test')
          und trotzdem wird der Parameter richtig an die Funktion übergeben?

          Kommentar


          • #6
            Er weist dem Parameter eine Funktion zu und trotzdem wird der Parameter richtig an die Funktion übergeben?
            Er weist ihm einen default-Wert zu ...

            Kommentar


            • #7
              Zitat von scriptkid Beitrag anzeigen
              Bei dem kaminbausatz Vorschlag habe ich noch nicht verstanden wie das funktioniert. Er weist dem Parameter eine Funktion zu (..) und trotzdem wird der Parameter richtig an die Funktion übergeben?
              Grob gesagt ermittelt JavaScript die Standardwerte für Parameter erst beim Funktionsaufruf - und nicht bei der Definition. Hier ein kleines Beispiel:

              PHP-Code:
              let a;

              function 
              fn(2){
                return 
              x;
              }

              10;
              fn(); // = 20 (10 * 2)

              20;
              fn(); // = 40 (20 * 2)

              30;
              fn(666); // = 666 
              Wenn der Parameter "x" nicht gegeben ist (=undefined), wird beim Funktionsaufruf stattdessen der Ausdruck "a * 2" ausgeführt und das Ergebnis dann "x" zugewiesen. Das klappt natürlich auch mit komplexeren Ausdrücken:

              PHP-Code:
              function fn(Math.random() * (100 1) + 1){
                return 
              Math.round(x);
              }

              fn(); // a random number between 1-100

              fn(); // *another* random number between 1-100

              fn(666); // 666

              fn(undefined); // yet *another* random number between 1-100 
              [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

              Kommentar


              • #8

                Hallo scriptkid

                ergänzend zu Vorgesagtem...

                Mir gefällt, dass Du offenbar vorausschauend programmierst und über fehlende Parameter nachdenkst.

                Außerdem bist Du höflich, das ist erfreulich nach meinen Negativerfahrungen in einem anderen Thread.

                Deswegen erläutere ich das kurz.

                Ich weise dem Funktionsparameter "test" keine Funktion zu, sondern nutze "default function parameter" die es erlauben formale Parameter mit vorgegebenen Werten zu initialisieren.

                nehmen wir folgenden Codeblock:

                Code:
                const setColor = (color) => document.body.style.background = color;
                setColor();
                Führe ich diesen Code aus, ist color = undefined, es passiert also nichts und es wird auch kein Fehler ausgeworfen.

                erst bei folgenden Code wird eine Fabe gesetzt:
                Code:
                const setColor = (color) => document.body.style.background = color;
                setColor('red');
                Jetzt kommen die "default function parameter" in´s Spiel:

                Code:
                const setColor = (color="red") => document.body.style.background = color;
                setColor();
                Führe ich diesen Code aus, wird, wenn kein Parameter gesetzt ist, als default die Farbe "red" gesetzt. Dieses Verhalten nutze ich dahingehend, dass ich eine Funktion ausführe wenn der Parameter color nicht gesetzt ist. in folgendem Beispiel wäre es die Funktion neededParameter, die dann einen Fehler auswirft, wenn der Parameter "color" nicht gesetzt ist.

                Code:
                const neededParameter = (par) => {throw new Error('missing Parameter: '+ par +'!');}
                const setColor = (color = neededParameter('color')) => document.body.style.background = color;
                setColor();

                Kommentar


                • #9
                  Kurze Anmerkung noch zu default-Parametern, diese wurden mit ES6/JavaScript2015 eingeführt. Ältere Browser kommen daher nicht damit zurecht.

                  Kommentar


                  • #10
                    lottikarotti

                    ich hoffe Du meinst mit "ziemlich witzig" nicht sinngemäß lächerlich...

                    Kommentar


                    • #11
                      lottikarotti, Dormilich , kaminbausatz

                      Vielen lieben Dank, jetzt habe ich es verstanden.

                      Kommentar

                      Lädt...
                      X