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
      Keymaster

      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
      Keymaster

      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
      Keymaster

      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
      Keymaster

      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.