Benannte Parameter

Startseite Foren Deutsches LiveCode-Forum Benannte Parameter

Ansicht von 11 Antwort-Themen
  • Autor
    Beiträge
    • #21457
      Dirk2
      Teilnehmer

        Hallo zusammen,

        nach meinen Recherchen kennt Livecode keine benannten Parameter.
        Ist es sinnvoll, dies über ein Array zu lösen?

        LG Dirk2

      • #21461
        Klaus Major
        Administrator

          Hallo Dirk,

          was genau ist ein “benannter Parameter”?
          Ich kenne nur Livecode, daher muss ich nachfragen.

          Gruß

          Klaus

        • #21464
          Dirk2
          Teilnehmer

            Hallo Klaus,

            bei Livecode ist die Reihenfolge der Parameter entscheidend. Bei benannten Parametern ist die Reihenfolge egal.
            LG Dirk2

          • #21465
            Dirk2
            Teilnehmer

              Bei Verwendung benannter Argumente bleibt es Ihnen erspart, sich an die Reihenfolge von Parametern in den Parameterlisten von aufgerufenen Methoden zu erinnern oder sie nachzuschauen. Der Parameter für jedes Argument kann vom Parameternamen angegeben werden. Eine Funktion, die beispielsweise Details zu einer Bestellung ausgibt (z.B. Verkäufername, Bestellnummer und Produktname), kann standardmäßig aufgerufen werden, indem anhand der Position Argumente in der Reihenfolge gesendet werden, die von der Funktion definiert wurde.
              PrintOrderDetails(“Gift Shop”, 31, “Red Mug”);

              Wenn Sie sich nicht an die Reihenfolge der Parameter erinnern, aber deren Namen wissen, können Sie die Argumente in einer beliebigen Reihenfolge senden.
              PrintOrderDetails(orderNum: 31, productName: “Red Mug”, sellerName: “Gift Shop”);

              PrintOrderDetails(productName: “Red Mug”, sellerName: “Gift Shop”, orderNum: 31);

            • #21466
              Klaus Major
              Administrator

                Aha, danke. In welcher Programmiersprache ist gibt es diese benannten Parameter?

                Livecode ist anders, wie Du sicher schon festgestellt hast.
                Daher würde ich Dir hier zu Arrays raten, wenn Du benannte Parameter benötigst und “wenn Sie sich nicht an die Reihenfolge der Parameter erinnern”. 😀

              • #21467
                Dirk2
                Teilnehmer

                  😉 Danke

                • #21468
                  Dirk2
                  Teilnehmer

                    Beim Ms Gedöns

                  • #21469
                    Klaus Major
                    Administrator

                      Beim Ms Gedöns

                      AHA! Würde ich nun aber auch nicht als “der Weisheit letzter Schluss” bezeichnen… 😀

                    • #21477
                      Torsten
                      Teilnehmer

                        Hi,

                        das kann man ja dann einfach selber im Handler machen?

                        Nehmen wir das Beispiel:
                        PrintOrderDetails(productName: "Red Mug", sellerName: "Gift Shop", orderNum: 31);

                        Man kann einen Handler bauen, dem die Reihenfolge der Parameter egal ist, weil er die bennanten Parameter selbst erkennt. Das geht allerdings nicht in der oben eingesetzten Notation, weil die Parameter in Livecode immer Container sein müssen, d.h. entweder eine Variable, ein Array oder ein String in Quotes).

                        Bauen wir den Aufruf also um: PrintOrderDetails(“productName:Red Mug”, “sellerName:Gift Shop”, “orderNum:31”)

                        Dieser Funktionsaufruf kann von folgendem Handler auch bei beliebiger Reihenfolge der Parameter korrekt verarbeitet werden:

                        function PrintOrderDetails 
                           
                           repeat with i = 1 to the paramCount
                              
                              put param(i) into tParameter
                              set itemdelimiter to ":"
                              put item 1 of tParameter into tKey
                              put item 2 of tParameter into tValue
                              
                              switch tKey
                                 case "productName"
                                    put tValue into tProductName
                                    break
                                 case "sellerName"
                                    put tValue into tSellerName
                                    break
                                 case "orderNum"
                                    put tValue into tOrderNum
                                    break
                              end switch
                           end repeat
                           
                           return "ProductName:" && tProductName & cr & "SellerName:" && tSellername & cr & "OrderNum:" && tOrderNum
                           
                        end PrintOrderDetails

                        Einfach mal testen, es kommt immer dasselbe heraus:

                        answer PrintOrderDetails("productName:Red Mug", "sellerName:Gift Shop", "orderNum:31")
                        answer PrintOrderDetails("sellerName:Gift Shop", "productName:Red Mug", "orderNum:31")
                        answer PrintOrderDetails("orderNum:31", "productName:Red Mug", "sellerName:Gift Shop")

                        Happy Coding mit Livecode!
                        Torsten

                        • #21478
                          Torsten
                          Teilnehmer

                            Vorteil:
                            – Reihenfolge egal
                            – man braucht mein Aufruf nicht alle Parameter anzugeben und erspart sich Fehler bei vielen Parametern z.B. ” Befehl(tParam,,,1)
                            – intern locker erweiterbar

                            Problem:
                            – man sollte überlegen, ob als Value auch Werte mit “:” vorkommen können. Wenn ja, dann muss man den Code noch etwas anpassen

                            put param(i) into tParameter
                            set itemdelimiter to ":"
                            put item 1 of tParameter into tKey
                            if the number of items in tParameter > 2 then
                               repeat with j = 2 to the number of items of tParameter
                                    put item j of tParameter into item j-1 of tValue
                                end repeat
                            else
                                put item 2 of tParameter into tValue
                            end if

                            Ach, Livecode macht so einen Spass 🙂

                            Happy Coding!
                            Torsten

                        • #21479
                          Dirk2
                          Teilnehmer

                            Danke Torsten,
                            du hast mir sehr geholfen.
                            Weil ich ja so vergesslich bin 😉

                          • #21486
                            GerryS
                            Teilnehmer

                              Hallo Dirk2,
                              das “VERGESSLICH” kann ich nur Großschreiben. Ich habe jetzt fast 1 Monat nichts mehr gemacht vom LiveCode.
                              Ich bin immer noch an meiner “Uhr” dran. Da habe ich ein Problem > Die Variablen Verteilung der Zeiten von Stunde, Minute und Sekunde habe ich ins global, also ganz vorne hingesetzt.
                              Wenn ich die jetzt benutzen möchte, Weiter unten im Programm, funktioniert es einmal da und einmal dort wieder nicht. Die eingestellte Zeit lässt sich mit der Systemzeit einmal berechnen und auf anderer Stelle wieder nicht. Die eingestellte Zeit hat natürlich immer andere Variable-Namen um einer Verwechslung zuvor zu kommen.
                              Irgend etwas ist da bei mit faul.
                              Was der Grund ist, ich weiß es nicht.
                              Hat da vielleicht von Euch jemand eine Idee?

                              Danke,
                              GerryS

                              • #21491
                                Torsten
                                Teilnehmer

                                  Hi Gerry,

                                  am besten mal den Code ins Forum stellen, sonst ist das immer schwierig zu beurteilen.

                                  Beste Grüße
                                  Torsten

                              • #21492
                                Klaus Major
                                Administrator

                                  Hi Gerry,

                                  bitte, bitte, bitte, erstelle einen neuen Thread für Dein Problem, sonst muss ich das tun, danke!

                                  Gruß

                                  Klaus

                              Ansicht von 11 Antwort-Themen
                              • Du musst angemeldet sein, um auf dieses Thema antworten zu können.