Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Functions mit optionalen Parametern

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Functions mit optionalen Parametern

    This topic has been deleted. Only users with topic management privileges can see it.
    • OliverIO
      OliverIO @Ben1983 last edited by OliverIO

      @ben1983 sagte in Functions mit optionalen Parametern:

      @oliverio wenn ich im JS in iobroker mit der Maus über die Funktion gehe, dann wird dort Type Any angezeigt.
      ............
      Das bedeutet ich kann jeder Functions soviel Parameter übergeben wie ich mag?

      im Prinzip ja. maximal wahrscheinlich mehr als du je brauchen kannst
      https://stackoverflow.com/questions/22747068/is-there-a-max-number-of-arguments-javascript-functions-can-accept

      Ist ja einerseits toll, aber wie soll derjenige, der die Funktion nicht selbst erstellt hat das dann durchblicken?

      wenn andere es benutzen sollen, dann sollte es eine dokumentation (auch inline) geben. wie bspw hier zu iobroker
      https://github.com/ioBroker/ioBroker.js-controller/blob/af51b33f700f2a3ba880e5f343fd70a208bbe497/doc/adapter.js.html#L3368

      mit Zusatzhilfsmitteln kann man aus solchen Notationen auch automatisch eine Hilfe erzeugen lassen.
      Es gibt dafür sogar Standards (kannst ja mal nach JSDoc suchen)

      1 Reply Last reply Reply Quote 0
      • Ben1983
        Ben1983 @OliverIO last edited by

        @oliverio wieso kann man jetzt hier mehr als einen Parameter übergeben?
        Sehe nur „Seperator“.... Gruß Ben

        OliverIO 1 Reply Last reply Reply Quote 0
        • OliverIO
          OliverIO @Ben1983 last edited by

          @ben1983 sagte in Functions mit optionalen Parametern:

          @oliverio wieso kann man jetzt hier mehr als einen Parameter übergeben?
          Sehe nur „Seperator“.... Gruß Ben

          Lese einfach mal die Seite die ich oben verlinkt habe.
          Die stehen alle in der bereits erwähnten Variable „arguments“ drin. Du selbst kannst keine Variable so nennen. Sie gehört zum sprachkonstrukt von javascript

          Ben1983 1 Reply Last reply Reply Quote 0
          • Ben1983
            Ben1983 @OliverIO last edited by

            @oliverio ok, aber wenn ich eine Functions anlegen, kann ich nicht mehr als die deklarierten übergeben.

            OliverIO 1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @Ben1983 last edited by

              @ben1983 sagte in Functions mit optionalen Parametern:

              @oliverio ok, aber wenn ich eine Functions anlegen, kann ich nicht mehr als die deklarierten übergeben.

              Hast du es ausprobiert? Gibt es eine Fehlermeldung?

              Ben1983 1 Reply Last reply Reply Quote 1
              • Ben1983
                Ben1983 @OliverIO last edited by

                @oliverio ja. Die Fehlermeldung lautet, das nur ein Parameter deklariert wurde.

                OliverIO 1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @Ben1983 last edited by

                  @ben1983 said in Functions mit optionalen Parametern:

                  @oliverio ja. Die Fehlermeldung lautet, das nur ein Parameter deklariert wurde.

                  dann probier das mal aus.
                  gerade im iobroker skript adapter ausprobiert

                  function abc() {
                      console.log("ergebnis");
                      console.log(arguments);
                  
                  }
                  abc(1,2,3,4,5);
                  
                  18.4.2021, 23:32:57.296	[info ]: javascript.0 (12017) Stop script script.js.Test.Skript_1
                  18.4.2021, 23:32:57.299	[info ]: javascript.0 (12017) Start javascript script.js.Test.Skript_1
                  18.4.2021, 23:32:57.303	[info ]: javascript.0 (12017) script.js.Test.Skript_1: ergebnis
                  18.4.2021, 23:32:57.304	[info ]: javascript.0 (12017) script.js.Test.Skript_1: {'0':1,'1':2,'2':3,'3':4,'4':5}
                  18.4.2021, 23:32:57.304	[info ]: javascript.0 (12017) script.js.Test.Skript_1: registered 0 subscriptions and 0 schedules
                  
                  Ben1983 1 Reply Last reply Reply Quote 0
                  • Ben1983
                    Ben1983 @OliverIO last edited by Ben1983

                    @oliverio Ah OK, man muss arguments in der function auch benutzen, sonst bekommt man beim Aufruf einen Fehler.
                    Allerdings hat man dann immer noch den nachteil, dass man beim Aufruf keinen definierten Namen oder eine Beschreibung hat.
                    Also bspw. arg[0] ist das, arg[1] ist das ....etc.

                    Und wie zum Geier definiert man den Typ eines Parameters 😄 das muss doch irgendwie in der Deklaration gehen, oder?
                    Ich kenne es von anderen Sprachen so: function xy(string x, int y)

                    Ps. wird bei deklarationen trotzdem das erste argument schon gezählt?
                    Hier ein Beispiel:

                    function xyz(a)
                    {
                        log(arguments[0]);
                    }
                    
                    xyz(1,8,3,4);
                    

                    der log gibt 1 raus, also das was eigentlich in Parameter "a" steht.
                    Das bedeutet die arguments zählen immer ab dem ersten Parameter und fangen nicht nach dem letzten deklarierten an?

                    OliverIO 1 Reply Last reply Reply Quote 0
                    • OliverIO
                      OliverIO @Ben1983 last edited by

                      @ben1983 sagte in Functions mit optionalen Parametern:

                      @oliverio Ah OK, man muss arguments in der function auch benutzen, sonst bekommt man beim Aufruf einen Fehler.

                      Nö. Gehts auch ohne benutzen. Aber dann kommst du nicht an die Parameter

                      Allerdings hat man dann immer noch den nachteil, dass man beim Aufruf keinen definierten Namen oder eine Beschreibung hat.
                      Also bspw. arg[0] ist das, arg[1] ist das ....etc.

                      Ja, Sinn macht es da nur, wenn du unbestimmt viele gleichartige Parameter übergeben willst

                      Und wie zum Geier definiert man den Typ eines Parameters 😄 das muss doch irgendwie in der Deklaration gehen, oder?
                      Ich kenne es von anderen Sprachen so: function xy(string x, int y)

                      Macht man es den sonst bei JavaScript? Nein.
                      Das ist einer der Vorteile aber auch Nachteile. Deswegen gibt es typescript wo du das kannst und in 100% JavaScript übersetzt werden kann.

                      Ps. wird bei deklarationen trotzdem das erste argument schon gezählt?
                      Hier ein Beispiel:

                      function xyz(a)
                      {
                          log(arguments[0]);
                      }
                      
                      xyz(1,8,3,4);
                      

                      der log gibt 1 raus, also das was eigentlich in Parameter "a" steht.
                      Das bedeutet die arguments zählen immer ab dem ersten Parameter und fangen nicht nach dem letzten deklarierten an?

                      Wie du selbst festgestellt hast, ja
                      Arguments gibt es immer, ob du Parameter definiert hast oder nicht.

                      Ben1983 1 Reply Last reply Reply Quote 0
                      • Ben1983
                        Ben1983 @OliverIO last edited by

                        @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.

                        OliverIO 1 Reply Last reply Reply Quote 0
                        • OliverIO
                          OliverIO @Ben1983 last edited by

                          @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);
                          
                          
                          Ben1983 1 Reply Last reply Reply Quote 0
                          • Ben1983
                            Ben1983 @OliverIO last edited by

                            @oliverio bei mir leider nicht.

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

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

                            OliverIO 1 Reply Last reply Reply Quote 0
                            • OliverIO
                              OliverIO @Ben1983 last edited by

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

                              Ben1983 1 Reply Last reply Reply Quote 0
                              • Ben1983
                                Ben1983 @OliverIO last edited by

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

                                OliverIO 1 Reply Last reply Reply Quote 0
                                • OliverIO
                                  OliverIO @Ben1983 last edited by

                                  @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.

                                  1 Reply Last reply Reply Quote 0
                                  • AlCalzone
                                    AlCalzone Developer last edited by

                                    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.

                                    paul53 Ben1983 2 Replies Last reply Reply Quote 0
                                    • paul53
                                      paul53 @AlCalzone last edited by

                                      @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

                                      AlCalzone 1 Reply Last reply Reply Quote 0
                                      • Ben1983
                                        Ben1983 @AlCalzone last edited by

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

                                        OliverIO 1 Reply Last reply Reply Quote 0
                                        • OliverIO
                                          OliverIO @Ben1983 last edited by 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

                                          Ben1983 1 Reply Last reply Reply Quote 0
                                          • Ben1983
                                            Ben1983 @OliverIO last edited by

                                            @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}

                                            OliverIO 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            777
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            38
                                            1974
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo