Frage zu Deklarationsanforderungen: var vs. string

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
Rene_Mhm
Beiträge: 61
Registriert: 19.11.2016, 20:28
Hat sich bedankt: 5 Mal

Frage zu Deklarationsanforderungen: var vs. string

Beitrag von Rene_Mhm » 18.04.2019, 11:06

Ich habe mir jetzt gerade einen Wolf gesucht, warum ein Script nicht lief.
Und zwar nachvollziehbar ab folgender Zeile:

Code: Alles auswählen

foreach(dev, dom.GetObject(ID_CHANNELS).EnumUsedIDs())
Dabei hängt es offenbar daran, dass "dev" mit "var dev;" deklariert ist.

Code: Alles auswählen

var dev;
!string dev; 
foreach(dev, dom.GetObject(ID_DEVICES).EnumUsedIDs())
{
 var object = dom.GetObject(dev);
 WriteLine("Name: " # object.Name() # ": " #  object.ID());
}
WriteLine("\nfertig");
Sobald die 2. Zeile (wieder) aktiviert wird, kommen brav die Daten. Aber halt nur dann.
Und bisher hatte ich die Sprachbeschreibung eigentlich (!) so verstanden, dass "var" ein untypisierter Wert ist, und die Typisierung dann nach Bedarf zur Laufzeit erfolgt.
Wo liegt hier mein Denk- und/oder Verständnisfehler?
Bis dann ...
René

Benutzeravatar
Black
Beiträge: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 422 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: Frage zu Deklarationsanforderungen: var vs. string

Beitrag von Black » 18.04.2019, 11:25

du hast soweit alles richtig interpretiert.

aber foreach möchte nun mal im ersten parameter einen STRING haben. ein var, kein int, kein irgendwas, einen string.
einfach als gegeben hinnehmen.

ich finds aber besseren stil, wnen ich den typ schon kenne, dass ich auch direkt mit dem richtigen typ deklariere. macht später mal das verstehen einfacher.

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 321 Mal
Danksagung erhalten: 501 Mal

Re: Frage zu Deklarationsanforderungen: var vs. string

Beitrag von dtp » 18.04.2019, 11:33

Wobei ich es doch ziemlich ärgerlich finde, dass die ReGaHSS aus einem Real ganz schnell ein Integer macht, wenn man bei einer ganzzahligen Konstanten, die man per mathematischem Operator mit der Variablen verknüpft hat, mal das .0 vergisst.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Benutzeravatar
Black
Beiträge: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 422 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: Frage zu Deklarationsanforderungen: var vs. string

Beitrag von Black » 18.04.2019, 11:39

nicht nur das... meinem kleinen bin ich dabei beizubringen: es gilt punktrechnung vor strichrechnung... überall ? nein, nicht überall, es gibt computer, die beherrschen die nicht...
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

darkbrain85
Beiträge: 1343
Registriert: 27.06.2015, 22:17
Hat sich bedankt: 43 Mal
Danksagung erhalten: 32 Mal

Re: Frage zu Deklarationsanforderungen: var vs. string

Beitrag von darkbrain85 » 18.04.2019, 12:53

Black hat geschrieben:
18.04.2019, 11:39
nicht nur das... meinem kleinen bin ich dabei beizubringen: es gilt punktrechnung vor strichrechnung... überall ? nein, nicht überall, es gibt computer, die beherrschen die nicht...
Gallien ist ähnlich wie Leer! Nur das Leer nicht von Römern belagert ist. :D

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Frage zu Deklarationsanforderungen: var vs. string

Beitrag von alchy » 18.04.2019, 21:22

Rene_Mhm hat geschrieben:
18.04.2019, 11:06
Und bisher hatte ich die Sprachbeschreibung eigentlich (!) so verstanden, dass "var" ein untypisierter Wert ist, und die Typisierung dann nach Bedarf zur Laufzeit erfolgt.

Code: Alles auswählen

var irgendwas;
ist null. Ich dächte das wurde auch schon irgendwo mal angemahnt , glaube von BadenPower.

Code: Alles auswählen

integer irgendwas; 
ist 0

Code: Alles auswählen

real irgendwas;
ist 0.000000

Code: Alles auswählen

string irgendwas;
ist ""


In deinem Script statt

Code: Alles auswählen

var dev;
reicht eine Deklaration mit einfachen

Code: Alles auswählen

var dev = ""; 
um die RegaHss dazu zu animieren das dev nicht mehr null ist und der Type ein string .


Da du aber nun weißt warum es so ist, benutze

Code: Alles auswählen

string dev; 
wie schon beschrieben und gut ist.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“