Joerg hat geschrieben: ↑8. Dez 2023 08:23
Das mit den Geltungsbereichen kenne ich von anderen Programmiersprachen. Dort aber nur innerhalb einer Funktion. Das es sowas auch innerhalb einer Schleife oder Bedingung gibt, kannte ich bisher nicht.
Das ist eigentlich der normale Weg. Jede bedingte Verzweigung erschafft einen neuen Kontext. Um mehr als einen Befehl im Kontext ausführen zu können, muss der Kontext sogar mit {} als Block markiert werden. Meines Wissens arbeiten alle (modernen) objektorientierten Programmiersprachen kontextbezogen. Bei vielen Sprachen fällt das nicht auf, weil man eh gelernt hat, alle Variablen und Konstanten zu Beginn der Funktion zu definieren
Joerg hat geschrieben: ↑8. Dez 2023 08:23
Die erste deiner Lösungen ist gedanklich für mich absolut nicht nachvollziehbar, zu hoch für mich. Wird eine if gehändelt wie eine Funktion? Warum muß da dann kein "return St_H_1" oder sowas stehen?
Das ist ein ternärer Operator. Die allgemeine Form lautet
Also, Falls b wahr ist, setze a = c, ansonsten a = d. Der ternäre Operator ist z.B. auch als Toggle sehr praktisch:
Sende einen Befehl an das Item
Licht, falls der aktuelle Status von
Licht nicht
ON ist, sende
ON, ansonsten
OFF.
Joerg hat geschrieben: ↑8. Dez 2023 08:23
Die letzte funktioniert bei mir nicht. Die Richtung hatte ich schon probiert, habe aber keinen Erfolg gehabt mit der Formatierung.
Hmmm... kann natürlich sein, dass Du noch ein .intValue ergänzen musst. Alternativ könnte man auch mit Float arbeiten:
Code: Alles auswählen
val String St_H_1 = String.format("%02d",(Startstunde_1.state as Number).intValue) // erzwinge Integer
val String St_H_1 = String.format("%02.0f",(Startstunde_1.state as Number)) // Verwende Float mit 0 Nachkommastellen
Die verwendeten Datentypen sind leider oft nicht einfach nachzuvollziehen (also zumindest, wenn man - wie ich auch - als ambitionierter Laie unterwegs ist).