Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Functions mit optionalen Parametern

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Functions mit optionalen Parametern

Scheduled Pinned Locked Moved Skripten / Logik
38 Posts 6 Posters 2.5k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • OliverIOO OliverIO

    @ben1983 sagte in Functions mit optionalen Parametern:

    @oliverio also wenn ich die Arguments nicht nutze, dann bekomme ich beim Aufruf mit parameterübegabe wie gesagt die Fehlermeldung, dass keine Parameter übergeben werden können.

    hier kein fehler

    function abc() {
        console.log("ergebnis");
    }
    abc(1,2,3,4,5);
    
    
    Ben1983B Offline
    Ben1983B Offline
    Ben1983
    wrote on last edited by
    #21

    @oliverio bei mir leider nicht.

    
    function mytest()
    {
        log("Ergebins");
    }
    
    
    mytest(1,2,3,4);
    
    

    06B7ED0D-84B7-4A61-8AF4-E86992E1E22E.jpeg

    OliverIOO 1 Reply Last reply
    0
    • Ben1983B Ben1983

      @oliverio bei mir leider nicht.

      
      function mytest()
      {
          log("Ergebins");
      }
      
      
      mytest(1,2,3,4);
      
      

      06B7ED0D-84B7-4A61-8AF4-E86992E1E22E.jpeg

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      wrote on last edited by
      #22

      @ben1983
      Das ist der Editor der meckert. Wenn du es laufen lässt gibt kein Fehler.

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      Ben1983B 1 Reply Last reply
      0
      • OliverIOO OliverIO

        @ben1983
        Das ist der Editor der meckert. Wenn du es laufen lässt gibt kein Fehler.

        Ben1983B Offline
        Ben1983B Offline
        Ben1983
        wrote on last edited by
        #23

        @oliverio aha, das ist aber ja auch etwas doof. Oder etwa nicht? 😂

        OliverIOO 1 Reply Last reply
        0
        • Ben1983B Ben1983

          @oliverio aha, das ist aber ja auch etwas doof. Oder etwa nicht? 😂

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          wrote on last edited by
          #24

          @ben1983 sagte in Functions mit optionalen Parametern:

          @oliverio aha, das ist aber ja auch etwas doof. Oder etwa nicht? 😂

          Ja, das sollte eher eine Warnung sein.

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          1 Reply Last reply
          0
          • AlCalzoneA Offline
            AlCalzoneA Offline
            AlCalzone
            Developer
            wrote on last edited by
            #25

            Der Editor hat schon "Recht". arguments stammt noch aus der JS-Steinzeit und kann z.B. für Verwirrung sorgen, wenn man auf Arrow-Funktionen umstellt.

            Heutzutage macht man das mit Rest-Parametern, die mittlerweile auch überall unterstützt sind:

            function mytest(...args) {
               // ...
            }
            
            mytest(1,2,3,4);
            

            ist vollkommen OK. So kann man z.B. auch einige Parameter fest vorgeben und den Rest flexibel lassen:

            function mytest(ist, immer, da, ...nurManchmal) {
               // ...
            }
            
            mytest(1,2,3); // OK
            mytest(1,2,3,4); // OK
            mytest(1,2); // Nicht OK
            

            Allgemein empfehle ich für Funktionen mit vielen Parametern, die auch gerne mal optional sind, stattdessen das Bag-of-Options pattern:

            function mytest(options) {
              if (options.abc === 1) {
                // ...
              }
              // etc...
            }
            
            mytest({
              abc: 1,
              def: 7,
              //...
            });
            

            Das hat den Vorteil, dass man nicht die Hälfte der Funktion benötigt, um Overloads auseinander zu dividieren. und außerdem sieht man bei der Aufrufstelle direkt, wofür welcher Wert steht.

            Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

            paul53P Ben1983B 2 Replies Last reply
            0
            • AlCalzoneA AlCalzone

              Der Editor hat schon "Recht". arguments stammt noch aus der JS-Steinzeit und kann z.B. für Verwirrung sorgen, wenn man auf Arrow-Funktionen umstellt.

              Heutzutage macht man das mit Rest-Parametern, die mittlerweile auch überall unterstützt sind:

              function mytest(...args) {
                 // ...
              }
              
              mytest(1,2,3,4);
              

              ist vollkommen OK. So kann man z.B. auch einige Parameter fest vorgeben und den Rest flexibel lassen:

              function mytest(ist, immer, da, ...nurManchmal) {
                 // ...
              }
              
              mytest(1,2,3); // OK
              mytest(1,2,3,4); // OK
              mytest(1,2); // Nicht OK
              

              Allgemein empfehle ich für Funktionen mit vielen Parametern, die auch gerne mal optional sind, stattdessen das Bag-of-Options pattern:

              function mytest(options) {
                if (options.abc === 1) {
                  // ...
                }
                // etc...
              }
              
              mytest({
                abc: 1,
                def: 7,
                //...
              });
              

              Das hat den Vorteil, dass man nicht die Hälfte der Funktion benötigt, um Overloads auseinander zu dividieren. und außerdem sieht man bei der Aufrufstelle direkt, wofür welcher Wert steht.

              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #26

              @alcalzone sagte: So kann man z.B. auch einige Parameter fest vorgeben und den Rest flexibel lassen

              Man kann auch alle Parameter fest vorgeben, wenn man bei Nichtvorhandensein einen voreingestellten Wert zuweist.

              Bild_2021-04-20_191534.png

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              AlCalzoneA 1 Reply Last reply
              0
              • AlCalzoneA AlCalzone

                Der Editor hat schon "Recht". arguments stammt noch aus der JS-Steinzeit und kann z.B. für Verwirrung sorgen, wenn man auf Arrow-Funktionen umstellt.

                Heutzutage macht man das mit Rest-Parametern, die mittlerweile auch überall unterstützt sind:

                function mytest(...args) {
                   // ...
                }
                
                mytest(1,2,3,4);
                

                ist vollkommen OK. So kann man z.B. auch einige Parameter fest vorgeben und den Rest flexibel lassen:

                function mytest(ist, immer, da, ...nurManchmal) {
                   // ...
                }
                
                mytest(1,2,3); // OK
                mytest(1,2,3,4); // OK
                mytest(1,2); // Nicht OK
                

                Allgemein empfehle ich für Funktionen mit vielen Parametern, die auch gerne mal optional sind, stattdessen das Bag-of-Options pattern:

                function mytest(options) {
                  if (options.abc === 1) {
                    // ...
                  }
                  // etc...
                }
                
                mytest({
                  abc: 1,
                  def: 7,
                  //...
                });
                

                Das hat den Vorteil, dass man nicht die Hälfte der Funktion benötigt, um Overloads auseinander zu dividieren. und außerdem sieht man bei der Aufrufstelle direkt, wofür welcher Wert steht.

                Ben1983B Offline
                Ben1983B Offline
                Ben1983
                wrote on last edited by
                #27

                @alcalzone und optional ist irgendwo als JSON deklariert, oder wie?
                Ist eigentlich JSON sowas wie eine Klasse in C#?

                OliverIOO 1 Reply Last reply
                0
                • Ben1983B Ben1983

                  @alcalzone und optional ist irgendwo als JSON deklariert, oder wie?
                  Ist eigentlich JSON sowas wie eine Klasse in C#?

                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  wrote on last edited by OliverIO
                  #28

                  @ben1983 sagte in Functions mit optionalen Parametern:

                  @alcalzone und optional ist irgendwo als JSON deklariert, oder wie?
                  Ist eigentlich JSON sowas wie eine Klasse in C#?

                  Ist einfach nur eine Textdarstellung eines Objektes. Ein Objekt kann so etwas wie eine Klasse in C# sein. Dadurch lassen sich einfach und problemlos daten speichern, über Systemgrenzen hinweg transportieren und auch wieder einlesen und weiterverarbeitbar

                  In C# findest du die Entsprechung unter dem Stichwort serialize und deserialize. Da gibt es dann diverse (bspw binary und auch JSON)
                  https://de.wikipedia.org/wiki/JavaScript_Object_Notation

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  Ben1983B 1 Reply Last reply
                  0
                  • OliverIOO OliverIO

                    @ben1983 sagte in Functions mit optionalen Parametern:

                    @alcalzone und optional ist irgendwo als JSON deklariert, oder wie?
                    Ist eigentlich JSON sowas wie eine Klasse in C#?

                    Ist einfach nur eine Textdarstellung eines Objektes. Ein Objekt kann so etwas wie eine Klasse in C# sein. Dadurch lassen sich einfach und problemlos daten speichern, über Systemgrenzen hinweg transportieren und auch wieder einlesen und weiterverarbeitbar

                    In C# findest du die Entsprechung unter dem Stichwort serialize und deserialize. Da gibt es dann diverse (bspw binary und auch JSON)
                    https://de.wikipedia.org/wiki/JavaScript_Object_Notation

                    Ben1983B Offline
                    Ben1983B Offline
                    Ben1983
                    wrote on last edited by
                    #29

                    @oliverio OK, wie kann ich denn über createState einen STate mit JSON Inhalt deklarieren, oder eine lokale Variable?

                    Ziel soll sein, dass ich quasi eine Struktur erzeugen möchte.
                    Dies gerne durch ein JSON.

                    Bsp.
                    MyVar = {Name: MyName, Age: 37, Hair: Brown}

                    OliverIOO 1 Reply Last reply
                    0
                    • Ben1983B Ben1983

                      @oliverio OK, wie kann ich denn über createState einen STate mit JSON Inhalt deklarieren, oder eine lokale Variable?

                      Ziel soll sein, dass ich quasi eine Struktur erzeugen möchte.
                      Dies gerne durch ein JSON.

                      Bsp.
                      MyVar = {Name: MyName, Age: 37, Hair: Brown}

                      OliverIOO Offline
                      OliverIOO Offline
                      OliverIO
                      wrote on last edited by
                      #30

                      @ben1983 sagte in Functions mit optionalen Parametern:

                      @oliverio OK, wie kann ich denn über createState einen STate mit JSON Inhalt deklarieren, oder eine lokale Variable?

                      Ziel soll sein, dass ich quasi eine Struktur erzeugen möchte.
                      Dies gerne durch ein JSON.

                      Bsp.
                      MyVar = {Name: MyName, Age: 37, Hair: Brown}

                      Dein JSON hat Fehler. die Anführungsstriche vor den Strings fehlen.
                      Entweder du definierst es als richtigen String

                      var myVar = '{Name: "MyName", Age: 37, Hair: "Brown"}';
                      setState("javascript.0.test", MyVar, true);
                      

                      oder als Javascript-Objectliteral welches du dann in einen String umwandelst

                      var myVar = {
                          Name: "MyName",
                          Age: 37,
                          Hair: "Brown"
                      }
                      setState("javascript.0.test", JSON.stringify(myVar), true);
                      

                      in beiden Fällen muss man beim auslesen der Daten aus dem Datenpunkt den String wieder in ein Objekt zurückverwandeln

                      var myVar = JSON.parse(getState("javascript.0.test"));
                      

                      Meine Adapter und Widgets
                      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                      Links im Profil

                      Ben1983B 1 Reply Last reply
                      0
                      • OliverIOO OliverIO

                        @ben1983 sagte in Functions mit optionalen Parametern:

                        @oliverio OK, wie kann ich denn über createState einen STate mit JSON Inhalt deklarieren, oder eine lokale Variable?

                        Ziel soll sein, dass ich quasi eine Struktur erzeugen möchte.
                        Dies gerne durch ein JSON.

                        Bsp.
                        MyVar = {Name: MyName, Age: 37, Hair: Brown}

                        Dein JSON hat Fehler. die Anführungsstriche vor den Strings fehlen.
                        Entweder du definierst es als richtigen String

                        var myVar = '{Name: "MyName", Age: 37, Hair: "Brown"}';
                        setState("javascript.0.test", MyVar, true);
                        

                        oder als Javascript-Objectliteral welches du dann in einen String umwandelst

                        var myVar = {
                            Name: "MyName",
                            Age: 37,
                            Hair: "Brown"
                        }
                        setState("javascript.0.test", JSON.stringify(myVar), true);
                        

                        in beiden Fällen muss man beim auslesen der Daten aus dem Datenpunkt den String wieder in ein Objekt zurückverwandeln

                        var myVar = JSON.parse(getState("javascript.0.test"));
                        
                        Ben1983B Offline
                        Ben1983B Offline
                        Ben1983
                        wrote on last edited by
                        #31

                        @oliverio ok, aber was setzt Du da auf True?
                        Wie verändert man bspw. den Wert „Age“?

                        OliverIOO 1 Reply Last reply
                        0
                        • Ben1983B Ben1983

                          @oliverio ok, aber was setzt Du da auf True?
                          Wie verändert man bspw. den Wert „Age“?

                          OliverIOO Offline
                          OliverIOO Offline
                          OliverIO
                          wrote on last edited by OliverIO
                          #32

                          @ben1983

                          myVar.Age=11;

                          Das sind Basics in JavaScript
                          Ich empfehle dir mal ein Tutorial
                          https://wiki.selfhtml.org/wiki/JavaScript/Tutorials

                          Meine Adapter und Widgets
                          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                          Links im Profil

                          Ben1983B 1 Reply Last reply
                          0
                          • paul53P paul53

                            @alcalzone sagte: So kann man z.B. auch einige Parameter fest vorgeben und den Rest flexibel lassen

                            Man kann auch alle Parameter fest vorgeben, wenn man bei Nichtvorhandensein einen voreingestellten Wert zuweist.

                            Bild_2021-04-20_191534.png

                            AlCalzoneA Offline
                            AlCalzoneA Offline
                            AlCalzone
                            Developer
                            wrote on last edited by
                            #33

                            @paul53 sagte in Functions mit optionalen Parametern:

                            Man kann auch alle Parameter fest vorgeben, wenn man bei Nichtvorhandensein einen voreingestellten Wert zuweist.

                            Ohne jetzt eine Glaubensdiskussion vom Zaun brechen zu wollen, aber das gehört mmn. zumindest in die Funktionssignatur. Entweder als default-Parameter

                            function mytest(immer, manchmal = 0) {
                             // ...
                            }
                            

                            oder als JSDoc, welches den Parameter als optional deklariert:

                            /**
                             * @param {number} [manchmal] Wird nur manchmal mit einer Zahl befüllt
                             */
                            function mytest(immer, manchmal) {
                              if (manchmal === undefined) manchmal = 0;
                              // ...
                            }
                            

                            In beiden Fällen kann man dort sehen, wo man die Funktion nutzt, welche Parameter nötig sind und muss nicht immer die Implementation nachschlagen und nachvollziehen.

                            Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                            1 Reply Last reply
                            0
                            • OliverIOO OliverIO

                              @ben1983

                              myVar.Age=11;

                              Das sind Basics in JavaScript
                              Ich empfehle dir mal ein Tutorial
                              https://wiki.selfhtml.org/wiki/JavaScript/Tutorials

                              Ben1983B Offline
                              Ben1983B Offline
                              Ben1983
                              wrote on last edited by
                              #34

                              @oliverio ich hatte es genau so versucht.
                              Wieder Fehlermeldungen des Editors.
                              Wenn man natürlich immer Fehlermeldungen angezeigt bekommt, die keine sind, macht es die Sache nicht unbedingt einfacher.

                              OliverIOO 1 Reply Last reply
                              0
                              • Ben1983B Ben1983

                                @oliverio ich hatte es genau so versucht.
                                Wieder Fehlermeldungen des Editors.
                                Wenn man natürlich immer Fehlermeldungen angezeigt bekommt, die keine sind, macht es die Sache nicht unbedingt einfacher.

                                OliverIOO Offline
                                OliverIOO Offline
                                OliverIO
                                wrote on last edited by OliverIO
                                #35

                                @ben1983 sagte in Functions mit optionalen Parametern:

                                @oliverio ich hatte es genau so versucht.
                                Wieder Fehlermeldungen des Editors.
                                Wenn man natürlich immer Fehlermeldungen angezeigt bekommt, die keine sind, macht es die Sache nicht unbedingt einfacher.

                                Bei welchen Code gibt es welche Fehlermeldung?
                                Der verwendete Editor ist eigentlich schon gut. Da es die "Steinzeit"-Befehle als Fehler anzeigt, ist wohl Absicht, obwohl sie keine Fehler im engeren sinne sind.

                                Einfach das Skript laufen lassen. ggfs. die Debug und Verbose-Option anschalten.
                                die echten Fehlermeldungen (Konsolenausgabe in roter Farbe) kommen dann im Protokollbereich, wobei die Ausgabe da auch nicht immer optimal ist. Aber in der neuen Version mit dem aktivierbaren debugger hat sich das ein wenig gebessert.

                                Poste hier am besten mit konkreten Code-Beispielen, die man am besten direkt ausprobieren kann. ich und auch die anderen verfolgen nicht nur diesen Post, sondern noch einige mehr und wissen nicht immer, was da vorher alles so besprochen worden ist.

                                Meine Adapter und Widgets
                                TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                                Links im Profil

                                Ben1983B 1 Reply Last reply
                                0
                                • OliverIOO OliverIO

                                  @ben1983 sagte in Functions mit optionalen Parametern:

                                  @oliverio ich hatte es genau so versucht.
                                  Wieder Fehlermeldungen des Editors.
                                  Wenn man natürlich immer Fehlermeldungen angezeigt bekommt, die keine sind, macht es die Sache nicht unbedingt einfacher.

                                  Bei welchen Code gibt es welche Fehlermeldung?
                                  Der verwendete Editor ist eigentlich schon gut. Da es die "Steinzeit"-Befehle als Fehler anzeigt, ist wohl Absicht, obwohl sie keine Fehler im engeren sinne sind.

                                  Einfach das Skript laufen lassen. ggfs. die Debug und Verbose-Option anschalten.
                                  die echten Fehlermeldungen (Konsolenausgabe in roter Farbe) kommen dann im Protokollbereich, wobei die Ausgabe da auch nicht immer optimal ist. Aber in der neuen Version mit dem aktivierbaren debugger hat sich das ein wenig gebessert.

                                  Poste hier am besten mit konkreten Code-Beispielen, die man am besten direkt ausprobieren kann. ich und auch die anderen verfolgen nicht nur diesen Post, sondern noch einige mehr und wissen nicht immer, was da vorher alles so besprochen worden ist.

                                  Ben1983B Offline
                                  Ben1983B Offline
                                  Ben1983
                                  wrote on last edited by
                                  #36

                                  @oliverio ok.
                                  Was genau macht denn die Debug Funktion?
                                  Denn breakpoints kann man ja nicht setzen, oder? Oder einzelschritt.

                                  GarganoG OliverIOO 2 Replies Last reply
                                  0
                                  • Ben1983B Ben1983

                                    @oliverio ok.
                                    Was genau macht denn die Debug Funktion?
                                    Denn breakpoints kann man ja nicht setzen, oder? Oder einzelschritt.

                                    GarganoG Offline
                                    GarganoG Offline
                                    Gargano
                                    wrote on last edited by
                                    #37

                                    @ben1983 Breakpoints und Einzelschritt geht inzwischen. Mal den Käferbutton drücken, im Expertenmodus

                                    1 Reply Last reply
                                    0
                                    • Ben1983B Ben1983

                                      @oliverio ok.
                                      Was genau macht denn die Debug Funktion?
                                      Denn breakpoints kann man ja nicht setzen, oder? Oder einzelschritt.

                                      OliverIOO Offline
                                      OliverIOO Offline
                                      OliverIO
                                      wrote on last edited by
                                      #38

                                      @ben1983 said in Functions mit optionalen Parametern:

                                      @oliverio ok.
                                      Was genau macht denn die Debug Funktion?
                                      Denn breakpoints kann man ja nicht setzen, oder? Oder einzelschritt.

                                      Ab Version 5.1.3 des skript adapters geht das. das ist nagelneu. habe es selbst noch nicht so ausprobiert.

                                      die debug und verbose funktion gibt dir im protokoll bereich mehr informationen aus und bestimmte funktionen werden nur simuliert. probier es einfach aus. ich verwende sie selbst nicht so oft.

                                      Meine Adapter und Widgets
                                      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                                      Links im Profil

                                      1 Reply Last reply
                                      0
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes


                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      771

                                      Online

                                      32.5k

                                      Users

                                      81.7k

                                      Topics

                                      1.3m

                                      Posts
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                      ioBroker Community 2014-2025
                                      logo
                                      • Login

                                      • Don't have an account? Register

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Home
                                      • Recent
                                      • Tags
                                      • Unread 0
                                      • Categories
                                      • Unreplied
                                      • Popular
                                      • GitHub
                                      • Docu
                                      • Hilfe