NEWS
Einfache Heizungsreglung
-
@pi-ter
Du musst da zwei Dinge unterscheiden:
Die erste Zuweisung passiert ja nur 1x - beim Start des Script.
Damit wird die Variable einfach nur auf einen definierten Startwert gesetzt.Das mit "im ersten Block passiert ... nix" habe ich vielleicht etwas unglücklich formuliert.
Es passiert dann nix, wenn dieser Block zum zweiten (oder weiteren) Mal erreicht wird. Wenn also der Trigger bereits einmal ausgelöst hat. Deswegen heißt das Ding ja auch "Sperrvariable".
Darum wird die auch beim Start auf "false" gesetzt.Vielleicht würde ein anderer Name das klarer machen: "heizungIstAn".
@codierknecht
Ist schon spät, daher nur kurz. Zunächst danke für feedback. Aber:Bitte, über wirklich simple Dinge wie die einmalige Initialisierung der Variablen müssen wir nun wirklich nicht reden. Seit 2004 beschäftigte ich mich erst mit perl, jetzt mit php. Ich bin also in einer ganzen Reihe von Basics wirklich einigermaßen fit. Was nicht heißen soll, dass ich alles weiß und über den Dingen stehe.
Dass ich gerade in JS etliche Wissenlücken habe, weiß ich selbst. Aber der Umgang mit Variablen, Operatoren und all der anderen Logik, die in Programmen und Programmabläufen steckt ist nicht ganz neu für mich. Und ich merke immer mehr, dass sich JS nicht soo doll von php unterscheidet.
Es passiert dann nix, wenn dieser Block zum zweiten (oder weiteren) Mal erreicht wird. Wenn also der Trigger bereits einmal ausgelöst hat. Deswegen heißt das Ding ja auch "Sperrvariable".
Siehe oben. Das ist mir doch alles bekannt. Aber auf die Frage, wieso mit "nicht heizung" abgefragt wird, habe ich noch keine nachvollziehbare Antwort erhalten. Das ist für mich das Unklare. Es ist für mich unlogisch.
Und dieses Problem, was ich doch eigentlich sehr deutlich skizziert habe, wird erstaunlicherweise von allen umschifft :-)BTW: Diese Hzg.-Regelung hat aber noch ganz andere Schönheitsfehler. Aber da bin ich noch dran.
Einen schönen Wochenanfang Euch allen...
VG
Peter -
@codierknecht
Ist schon spät, daher nur kurz. Zunächst danke für feedback. Aber:Bitte, über wirklich simple Dinge wie die einmalige Initialisierung der Variablen müssen wir nun wirklich nicht reden. Seit 2004 beschäftigte ich mich erst mit perl, jetzt mit php. Ich bin also in einer ganzen Reihe von Basics wirklich einigermaßen fit. Was nicht heißen soll, dass ich alles weiß und über den Dingen stehe.
Dass ich gerade in JS etliche Wissenlücken habe, weiß ich selbst. Aber der Umgang mit Variablen, Operatoren und all der anderen Logik, die in Programmen und Programmabläufen steckt ist nicht ganz neu für mich. Und ich merke immer mehr, dass sich JS nicht soo doll von php unterscheidet.
Es passiert dann nix, wenn dieser Block zum zweiten (oder weiteren) Mal erreicht wird. Wenn also der Trigger bereits einmal ausgelöst hat. Deswegen heißt das Ding ja auch "Sperrvariable".
Siehe oben. Das ist mir doch alles bekannt. Aber auf die Frage, wieso mit "nicht heizung" abgefragt wird, habe ich noch keine nachvollziehbare Antwort erhalten. Das ist für mich das Unklare. Es ist für mich unlogisch.
Und dieses Problem, was ich doch eigentlich sehr deutlich skizziert habe, wird erstaunlicherweise von allen umschifft :-)BTW: Diese Hzg.-Regelung hat aber noch ganz andere Schönheitsfehler. Aber da bin ich noch dran.
Einen schönen Wochenanfang Euch allen...
VG
Peter@pi-ter sagte in Einfache Heizungsreglung:
aber auf die Frage, wieso mit "nicht heizung" abgefragt wird, habe ich noch keine nachvollziehbare Antwort erhalten. Das ist für mich das Unklare. Es ist für mich unlogisch.
Vielleicht hab' ich einfach noch nicht verstanden, wo genau Dein Verständnisproblem liegt.
Du kannst sowohl!heizungals auch
heizung == falseverwenden. Das ist völlig gleichwertig. Es soll etwas passieren, wenn die Variable
falseist.
Geht übrigens in PHP genauso.
Wenn Dir das Zweite besser gefällt und für Dich verständlicher ist: Nimm das.Macht ja keinen Sinn ein Script zusammenzuklöppeln, das Du nicht sofort verstehst.
Nur um das nochmal klarzustellen: Es wird hier nicht "zweimal negiert". Das "zweimal" entsteht nur in Deinem Kopf, für den Fall dass die Variable gerade
falseenthält.Für den Compiler und den Prozessor ist die erste Variante übrigens die bessere. Ein
notarbeitet mit nur einem Operanden, wohingegen der Vergleich davon zwei benötigt. Es schreibt sich auch schneller und wird minimal schneller verarbeitet.
Auch in Blockly ist das einfacher, weil man nur 2 statt 3 Bausteine benötigt.
Die Variable "heizung" macht das auch etwas schwierig zu lesen.
Nehmen wir vielleicht mal sowas hier

Und nehmen wir weiter an, wir hätten das bereits in eine gleichnamige Variable eingelesen.
Dann würde das mit good old Basic oder Pascal wie folgt formuliert:if not isDayTimebzw.
if isDayTime = false, wenn man prüfen möchte ob es gerade Nacht ist .Vielleicht wird so eher klar, dass beide Ausdrücke vom Sinn her gleich sind.
Will man hier prüfen, ob es gerade Tag ist, schreibt man ja auch
if isDayTimewas das Gleiche ist wie
if isDayTime = trueAnsonsten bin ich mit meinem Latein am Ende. Ich wüsste jetzt nicht, wie ich es besser erklären könnte.
Ist aber ein tolles Beispiel, welche Auswirkungen die Benennung von Variablen (und Methoden, Objekten etc.) haben kann (siehe meine Signatur).dass sich JS nicht soo doll von php unterscheidet.
In der Syntax nicht. Aber das Konzept der Ereignissteuerung und der Asynchronität ist ja nochmal etwas anderes.
Ich komme aus der Windows-Entwicklung. JS (genauer: NodeJS) ist für mich auch noch relativ neu.
Unter Windows muss man gehörigen Aufwand treiben, um nebenläufige Prozesse sauber hinzukriegen.
Unter NodeJS ist das Standard und es braucht Kniffe, um synchron zu programmieren. -
@pi-ter sagte in Einfache Heizungsreglung:
aber auf die Frage, wieso mit "nicht heizung" abgefragt wird, habe ich noch keine nachvollziehbare Antwort erhalten. Das ist für mich das Unklare. Es ist für mich unlogisch.
Vielleicht hab' ich einfach noch nicht verstanden, wo genau Dein Verständnisproblem liegt.
Du kannst sowohl!heizungals auch
heizung == falseverwenden. Das ist völlig gleichwertig. Es soll etwas passieren, wenn die Variable
falseist.
Geht übrigens in PHP genauso.
Wenn Dir das Zweite besser gefällt und für Dich verständlicher ist: Nimm das.Macht ja keinen Sinn ein Script zusammenzuklöppeln, das Du nicht sofort verstehst.
Nur um das nochmal klarzustellen: Es wird hier nicht "zweimal negiert". Das "zweimal" entsteht nur in Deinem Kopf, für den Fall dass die Variable gerade
falseenthält.Für den Compiler und den Prozessor ist die erste Variante übrigens die bessere. Ein
notarbeitet mit nur einem Operanden, wohingegen der Vergleich davon zwei benötigt. Es schreibt sich auch schneller und wird minimal schneller verarbeitet.
Auch in Blockly ist das einfacher, weil man nur 2 statt 3 Bausteine benötigt.
Die Variable "heizung" macht das auch etwas schwierig zu lesen.
Nehmen wir vielleicht mal sowas hier

Und nehmen wir weiter an, wir hätten das bereits in eine gleichnamige Variable eingelesen.
Dann würde das mit good old Basic oder Pascal wie folgt formuliert:if not isDayTimebzw.
if isDayTime = false, wenn man prüfen möchte ob es gerade Nacht ist .Vielleicht wird so eher klar, dass beide Ausdrücke vom Sinn her gleich sind.
Will man hier prüfen, ob es gerade Tag ist, schreibt man ja auch
if isDayTimewas das Gleiche ist wie
if isDayTime = trueAnsonsten bin ich mit meinem Latein am Ende. Ich wüsste jetzt nicht, wie ich es besser erklären könnte.
Ist aber ein tolles Beispiel, welche Auswirkungen die Benennung von Variablen (und Methoden, Objekten etc.) haben kann (siehe meine Signatur).dass sich JS nicht soo doll von php unterscheidet.
In der Syntax nicht. Aber das Konzept der Ereignissteuerung und der Asynchronität ist ja nochmal etwas anderes.
Ich komme aus der Windows-Entwicklung. JS (genauer: NodeJS) ist für mich auch noch relativ neu.
Unter Windows muss man gehörigen Aufwand treiben, um nebenläufige Prozesse sauber hinzukriegen.
Unter NodeJS ist das Standard und es braucht Kniffe, um synchron zu programmieren.@codierknecht sagte in Einfache Heizungsreglung:
Hinweis an Moderatoren: Falls die Diskussion hier zu sehr ausartet, bitte verschieben. Vlt. langweilt es ja die Profis, während andere, wie ich, was lernen wollen. - Danke.
Moin,
wow... vielen Dank, dass Du Dir nochmal die Zeit genommen hast. Jetzt kommen wir der Sache näher und dann löst sich sicher auch der Knoten im BioRam.Vielleicht hab' ich einfach noch nicht verstanden, wo genau Dein Verständnisproblem liegt.
Das kann nich nachvollziehen :-)
Das "zweimal" entsteht nur in Deinem Kopf, für den Fall dass die Variable gerade
falseenthält.Das ist wohl das Problem. Ich weiß.
Meine Überlegung war:Variable deklarieren:
var MeineVariable;Ich könnte wohl auch die Deklaration mit let machen. Sie existiert nun, aber hat den Wert "undefined".
Nun weise ich der Variablen einen Wert zu:
MeineVariable = false;Eine if-Abfrage
if ( MeineVariable == false) // oder bei gleichen Typen if (MeineVaraible === falsesollte also true zurückgeben, während
if (MeineVariable == true)in diesem Fall false liefern sollte.
Und wie @paul53 sagte:
Der nicht-Operator (Ausrufezeichen) negiert den Wert: false wird true und true wird false.
müsste damit
!MeineVariableden Wert true zurückgeben, denn MeineVariable hat ja den Wert false und das Ausrufezeichen negiert diesen Wert.
Ich wundere mich jetzt im Alter :-) , dass mir bei php dieses Problem noch nie so aufgefallen ist. Hm....
Auch in Blockly ist das einfacher, weil man nur 2 statt 3 Bausteine benötigt.

Dieses Beispiel ist für mich insofern irritierend, da hier mit istVormittag eine Variable vorliegt, deren Name auch irreführend sein kann. Welchen Wert hat denn in diesem Beispiel die Variable? Vermutlich true :-)
Und was, wenn sie auf false gesetzt war?Mit dem zweiten Beispiel isDayTime liegt der Fall ähnlich.
Will man hier prüfen, ob es gerade Tag ist, schreibt man ja auch
if isDayTimewas das Gleiche ist wie
if isDayTime = trueDiese Beispiele setzen doch immer voraus, dass der Name der Variablen auch den Wert der Variablen repräsentiert. Aber zwischen Namen und Wert sehe ich schon einen Unterschied.
Vielleicht macht es gerade das aus, dass ich mich da so schwer tue mit dem geistigen Aha-Effekt.
Ansonsten bin ich mit meinem Latein am Ende. Ich wüsste jetzt nicht, wie ich es besser erklären könnte.
:-) ja, das kann ich Dir nicht übelnehmen. Vielleicht bin ich ein rettungsloser Fall.
Ok, wenn es für meinen Knoten im Kopf keine bessere oder überhaupt eine Erklärung gibt, bin ich damit einverstanden, diese Diskussion zu beenden.
Ist aber ein tolles Beispiel, welche Auswirkungen die Benennung von Variablen (und Methoden, Objekten etc.) haben kann (siehe meine Signatur).
Yepp
dass sich JS nicht soo doll von php unterscheidet.
In der Syntax nicht. Aber das Konzept der Ereignissteuerung und der Asynchronität ist ja nochmal etwas anderes.
Ok, das habe ich befürchtet :-) aber so weit bin ich noch nicht.
In meiner ganzen Weblaufbahn habe ich mich immer vor JS gedrückt, auch aus Gründen der sogenannten Barrierefreiheit. Nun muss ich mich halt damit beschäftigen.
Ich danke Dir für die Zeit, die Du investiert hast.
VG Peter
-
@codierknecht sagte in Einfache Heizungsreglung:
Hinweis an Moderatoren: Falls die Diskussion hier zu sehr ausartet, bitte verschieben. Vlt. langweilt es ja die Profis, während andere, wie ich, was lernen wollen. - Danke.
Moin,
wow... vielen Dank, dass Du Dir nochmal die Zeit genommen hast. Jetzt kommen wir der Sache näher und dann löst sich sicher auch der Knoten im BioRam.Vielleicht hab' ich einfach noch nicht verstanden, wo genau Dein Verständnisproblem liegt.
Das kann nich nachvollziehen :-)
Das "zweimal" entsteht nur in Deinem Kopf, für den Fall dass die Variable gerade
falseenthält.Das ist wohl das Problem. Ich weiß.
Meine Überlegung war:Variable deklarieren:
var MeineVariable;Ich könnte wohl auch die Deklaration mit let machen. Sie existiert nun, aber hat den Wert "undefined".
Nun weise ich der Variablen einen Wert zu:
MeineVariable = false;Eine if-Abfrage
if ( MeineVariable == false) // oder bei gleichen Typen if (MeineVaraible === falsesollte also true zurückgeben, während
if (MeineVariable == true)in diesem Fall false liefern sollte.
Und wie @paul53 sagte:
Der nicht-Operator (Ausrufezeichen) negiert den Wert: false wird true und true wird false.
müsste damit
!MeineVariableden Wert true zurückgeben, denn MeineVariable hat ja den Wert false und das Ausrufezeichen negiert diesen Wert.
Ich wundere mich jetzt im Alter :-) , dass mir bei php dieses Problem noch nie so aufgefallen ist. Hm....
Auch in Blockly ist das einfacher, weil man nur 2 statt 3 Bausteine benötigt.

Dieses Beispiel ist für mich insofern irritierend, da hier mit istVormittag eine Variable vorliegt, deren Name auch irreführend sein kann. Welchen Wert hat denn in diesem Beispiel die Variable? Vermutlich true :-)
Und was, wenn sie auf false gesetzt war?Mit dem zweiten Beispiel isDayTime liegt der Fall ähnlich.
Will man hier prüfen, ob es gerade Tag ist, schreibt man ja auch
if isDayTimewas das Gleiche ist wie
if isDayTime = trueDiese Beispiele setzen doch immer voraus, dass der Name der Variablen auch den Wert der Variablen repräsentiert. Aber zwischen Namen und Wert sehe ich schon einen Unterschied.
Vielleicht macht es gerade das aus, dass ich mich da so schwer tue mit dem geistigen Aha-Effekt.
Ansonsten bin ich mit meinem Latein am Ende. Ich wüsste jetzt nicht, wie ich es besser erklären könnte.
:-) ja, das kann ich Dir nicht übelnehmen. Vielleicht bin ich ein rettungsloser Fall.
Ok, wenn es für meinen Knoten im Kopf keine bessere oder überhaupt eine Erklärung gibt, bin ich damit einverstanden, diese Diskussion zu beenden.
Ist aber ein tolles Beispiel, welche Auswirkungen die Benennung von Variablen (und Methoden, Objekten etc.) haben kann (siehe meine Signatur).
Yepp
dass sich JS nicht soo doll von php unterscheidet.
In der Syntax nicht. Aber das Konzept der Ereignissteuerung und der Asynchronität ist ja nochmal etwas anderes.
Ok, das habe ich befürchtet :-) aber so weit bin ich noch nicht.
In meiner ganzen Weblaufbahn habe ich mich immer vor JS gedrückt, auch aus Gründen der sogenannten Barrierefreiheit. Nun muss ich mich halt damit beschäftigen.
Ich danke Dir für die Zeit, die Du investiert hast.
VG Peter
@pi-ter sagte in Einfache Heizungsreglung:
Ich schicke mal voraus: Das alles soll keine "Belehrung" sein. Natürlich habe ich die Weisheit nicht mit Löffeln gefressen. Ich weiß nur nicht, wo genau Dein Knoten sitzt. Darum kann es sein, dass ich Dinge erkläre die Dir bereits völlig klar sind.
Diese Beispiele setzen doch immer voraus, dass der Name der Variablen auch den Wert der Variablen repräsentiert
Nein - der Name einer Variablen repräsentiert ja niemals ihren Wert - sonst wäre es eine Konstante.
Der Name soll den "Sinn" darstellen.
Ich vermute mal, das ist hier Dein Knoten im Kopf. Du gehst davon aus, dass dort immer ein bestimmter Wert (false) drinsteht. Tut es aber nicht.Um bei dem Beispiel zu bleiben:

Beim Start wird die Variable einmal auffalsegesetzt, um einen definierten Wert zu haben und damit der Trigger bei der ersten Ausführung auch tut was er soll. Er schaltet die Heizung ein und setzt die Variable auftrue.Nehmen wir also an, der Trigger feuert, weil das Thermometer gerade auf 2.9 °C springt.
=> Heizung an und Variable auftrue.
Jetzt feuert der Trigger ein zweites Mal, weil die Heizung den Raum auf 3.0 °C gebracht hat.
Die Variable sitzt aber jetzt bereits auftrue. Das!heizungsorgt dafür. dass jetzt nix geschaltet wird. Warum auch? Die Heizung ist ja bereits an.
Erst wenn die Temperatur erreicht ist wird die Variable wieder auffalsegesetzt. Sinkt die Temperatur dann später wieder, wird auch die Heizung wieder eingeschaltet.Wir sind uns ja einig, dass das gleiche Ergebnis auch mit einem
heizung == falseerreicht wird. Der "not"-Operator ist einfach nur eine vereinfachte Schreibweise (und in der Ausführung besser).
Beide Ausdrücke
!heizung heizung == falsewerden ja als Ganzes ausgewertet und liefern wiederum entweder
trueoderfalse.
Enthält die Variable einfalse, weil die Heizung gerade nicht eingeschaltet ist, liefern beide eintruezurück.
Enthält sietrue, weil Heizung läuft, werden beide Ausdrücke zufalseausgewertet.Dieses Beispiel ist für mich insofern irritierend, da hier mit istVormittag eine Variable vorliegt, deren Name auch irreführend sein kann. Welchen Wert hat denn in diesem Beispiel die Variable? Vermutlich true 🙂
Und was, wenn sie auf false gesetzt war?
Eine Variable
isVormittagsoll repräsentieren, ob gerade Vormittag ist. Es würde dann irgendwo eine Zuweisung nach dem Motto (Pseudocode)isVormittag = GetCurrentTime() < 12erfolgt sein.
Dann liefertisVormittageintruewenn es Vormittag ist und einfalsewenn nicht.Darum mein Beispiel mit der Systemvariablen
isDayTime.
Die ist "einfach so" vorhanden. Um den Inhalt kümmert sich die Javascript-Instanz (oder der JS-Controller - ist an der Ecke egal).
Die liefert am Tag eintrueund in der Nacht einfalse.Ist vielleicht der Unterschied zwischen "Variable" oder "Konstante" das Problem?
Man könnte das natürlich auch als Funktion formulieren
function getIsVormittag() { return GetCurrentTime() < 12; }Da aber der Aufruf einer Funktion für den Compiler/Prozessor mehr Aufwand ist, nimmt man stattdessen eben eine Variable und stopft den Wert dort nur einmal rein, wenn man das Ergebnis an mehreren Stellen benötigt.
Das ist ja mit ziemlicher Sicherheit nix Neues für Dich.Ach so: Tröste Dich - als ich Ende der 80'er angefangen habe zu programmieren, habe ich das mit dem "negieren" zuerst auch nicht kapiert

-
@pi-ter sagte in Einfache Heizungsreglung:
Ich schicke mal voraus: Das alles soll keine "Belehrung" sein. Natürlich habe ich die Weisheit nicht mit Löffeln gefressen. Ich weiß nur nicht, wo genau Dein Knoten sitzt. Darum kann es sein, dass ich Dinge erkläre die Dir bereits völlig klar sind.
Diese Beispiele setzen doch immer voraus, dass der Name der Variablen auch den Wert der Variablen repräsentiert
Nein - der Name einer Variablen repräsentiert ja niemals ihren Wert - sonst wäre es eine Konstante.
Der Name soll den "Sinn" darstellen.
Ich vermute mal, das ist hier Dein Knoten im Kopf. Du gehst davon aus, dass dort immer ein bestimmter Wert (false) drinsteht. Tut es aber nicht.Um bei dem Beispiel zu bleiben:

Beim Start wird die Variable einmal auffalsegesetzt, um einen definierten Wert zu haben und damit der Trigger bei der ersten Ausführung auch tut was er soll. Er schaltet die Heizung ein und setzt die Variable auftrue.Nehmen wir also an, der Trigger feuert, weil das Thermometer gerade auf 2.9 °C springt.
=> Heizung an und Variable auftrue.
Jetzt feuert der Trigger ein zweites Mal, weil die Heizung den Raum auf 3.0 °C gebracht hat.
Die Variable sitzt aber jetzt bereits auftrue. Das!heizungsorgt dafür. dass jetzt nix geschaltet wird. Warum auch? Die Heizung ist ja bereits an.
Erst wenn die Temperatur erreicht ist wird die Variable wieder auffalsegesetzt. Sinkt die Temperatur dann später wieder, wird auch die Heizung wieder eingeschaltet.Wir sind uns ja einig, dass das gleiche Ergebnis auch mit einem
heizung == falseerreicht wird. Der "not"-Operator ist einfach nur eine vereinfachte Schreibweise (und in der Ausführung besser).
Beide Ausdrücke
!heizung heizung == falsewerden ja als Ganzes ausgewertet und liefern wiederum entweder
trueoderfalse.
Enthält die Variable einfalse, weil die Heizung gerade nicht eingeschaltet ist, liefern beide eintruezurück.
Enthält sietrue, weil Heizung läuft, werden beide Ausdrücke zufalseausgewertet.Dieses Beispiel ist für mich insofern irritierend, da hier mit istVormittag eine Variable vorliegt, deren Name auch irreführend sein kann. Welchen Wert hat denn in diesem Beispiel die Variable? Vermutlich true 🙂
Und was, wenn sie auf false gesetzt war?
Eine Variable
isVormittagsoll repräsentieren, ob gerade Vormittag ist. Es würde dann irgendwo eine Zuweisung nach dem Motto (Pseudocode)isVormittag = GetCurrentTime() < 12erfolgt sein.
Dann liefertisVormittageintruewenn es Vormittag ist und einfalsewenn nicht.Darum mein Beispiel mit der Systemvariablen
isDayTime.
Die ist "einfach so" vorhanden. Um den Inhalt kümmert sich die Javascript-Instanz (oder der JS-Controller - ist an der Ecke egal).
Die liefert am Tag eintrueund in der Nacht einfalse.Ist vielleicht der Unterschied zwischen "Variable" oder "Konstante" das Problem?
Man könnte das natürlich auch als Funktion formulieren
function getIsVormittag() { return GetCurrentTime() < 12; }Da aber der Aufruf einer Funktion für den Compiler/Prozessor mehr Aufwand ist, nimmt man stattdessen eben eine Variable und stopft den Wert dort nur einmal rein, wenn man das Ergebnis an mehreren Stellen benötigt.
Das ist ja mit ziemlicher Sicherheit nix Neues für Dich.Ach so: Tröste Dich - als ich Ende der 80'er angefangen habe zu programmieren, habe ich das mit dem "negieren" zuerst auch nicht kapiert

@codierknecht sagte in Einfache Heizungsreglung:
Ich schicke mal voraus: Das alles soll keine "Belehrung" sein.
So verstehe ich es auch nicht, keine Sorge. Und ich schicke mal voraus, dass mein ständiges Nachfragen keine Drängelei, Meckerei oder was auch immer sein soll.
Ich weiß nur nicht, wo genau Dein Knoten sitzt.
Wenn ich es jetzt nur selbst wüsste, nach all den Erläuterungen :(
Diese Beispiele setzen doch immer voraus, dass der Name der Variablen auch den Wert der Variablen repräsentiert
Nein - der Name einer Variablen repräsentiert ja niemals ihren Wert - sonst wäre es eine Konstante.
Der Name soll den "Sinn" darstellen.Da hab ich mich wohl ungeschickt ausgedrückt. Nein, ich gehe nicht davon aus, dass der Name den Wert repräsentiert. Und daher habe ich ja diese Beispiele "bemeckert" :-) weil sie genau das aber implizieren.
Schau hier, wo ich schrieb.
Dieses Beispiel ist für mich insofern irritierend, da hier mit istVormittag eine Variable vorliegt, deren Name auch irreführend sein kann. Welchen Wert hat denn in diesem Beispiel die Variable? Vermutlich true 🙂
Und was, wenn sie auf false gesetzt war?Aber zwischen Namen und Wert sehe ich schon einen Unterschied.
Vielleicht macht es gerade das aus, dass ich mich da so schwer tue mit dem geistigen Aha-Effekt.@codierknecht sagte in Einfache Heizungsreglung:
Ich vermute mal, das ist hier Dein Knoten im Kopf. Du gehst davon aus, dass dort immer ein bestimmter Wert (
false) drinsteht.Nö, siehe oben. Das ist ja mein Problem :-) Es wäre einfacher für mich, wenn ich genau das denken würde
Beide Ausdrücke
!heizung heizung == falsewerden ja als Ganzes ausgewertet und liefern wiederum entweder
trueoderfalse.
Enthält die Variable einfalse, weil die Heizung gerade nicht eingeschaltet ist, liefern beide eintruezurück.Ha, jetzt sind wir wieder an dem Punkt, wo ich nicht mit klar komme.
Ich verstehe es einfach nicht, wie die negierte Variable heizung (also!heizung) den gleichen Wert wie das "Original" (heizung) zurückliefert.Dieses Beispiel ist für mich insofern irritierend, da hier mit istVormittag eine Variable vorliegt, deren Name auch irreführend sein kann. Welchen Wert hat denn in diesem Beispiel die Variable? Vermutlich true 🙂
Und was, wenn sie auf false gesetzt war?
Eine Variable
isVormittagsoll repräsentieren, ob gerade Vormittag ist. Es würde dann irgendwo eine Zuweisung nach dem Motto (Pseudocode)isVormittag = GetCurrentTime() < 12erfolgt sein.
Dann liefertisVormittageintruewenn es Vormittag ist und einfalsewenn nicht.`So sehe ich das auch, aber was liefert dann ein
!isVormittagzurück?Ist vielleicht der Unterschied zwischen "Variable" oder "Konstante" das Problem?
Nein, ist mir aus php bekannt.
Da aber der Aufruf einer Funktion für den Compiler/Prozessor mehr Aufwand ist, nimmt man stattdessen eben eine Variable und stopft den Wert dort nur einmal rein, wenn man das Ergebnis an mehreren Stellen benötigt.
Das ist ja mit ziemlicher Sicherheit nix Neues für Dich.Yepp :-) Zumindest was die mehrfache Verwendung der Variablen / Funktionen angeht. Mit Compiler/Prozessor - Problemen, habe ich mich noch nicht beschäftigt.
Ach so: Tröste Dich - als ich Ende der 80'er angefangen habe zu programmieren, habe ich das mit dem "negieren" zuerst auch nicht kapiert

Sehr tröstlich :-)
-
@codierknecht sagte in Einfache Heizungsreglung:
Ich schicke mal voraus: Das alles soll keine "Belehrung" sein.
So verstehe ich es auch nicht, keine Sorge. Und ich schicke mal voraus, dass mein ständiges Nachfragen keine Drängelei, Meckerei oder was auch immer sein soll.
Ich weiß nur nicht, wo genau Dein Knoten sitzt.
Wenn ich es jetzt nur selbst wüsste, nach all den Erläuterungen :(
Diese Beispiele setzen doch immer voraus, dass der Name der Variablen auch den Wert der Variablen repräsentiert
Nein - der Name einer Variablen repräsentiert ja niemals ihren Wert - sonst wäre es eine Konstante.
Der Name soll den "Sinn" darstellen.Da hab ich mich wohl ungeschickt ausgedrückt. Nein, ich gehe nicht davon aus, dass der Name den Wert repräsentiert. Und daher habe ich ja diese Beispiele "bemeckert" :-) weil sie genau das aber implizieren.
Schau hier, wo ich schrieb.
Dieses Beispiel ist für mich insofern irritierend, da hier mit istVormittag eine Variable vorliegt, deren Name auch irreführend sein kann. Welchen Wert hat denn in diesem Beispiel die Variable? Vermutlich true 🙂
Und was, wenn sie auf false gesetzt war?Aber zwischen Namen und Wert sehe ich schon einen Unterschied.
Vielleicht macht es gerade das aus, dass ich mich da so schwer tue mit dem geistigen Aha-Effekt.@codierknecht sagte in Einfache Heizungsreglung:
Ich vermute mal, das ist hier Dein Knoten im Kopf. Du gehst davon aus, dass dort immer ein bestimmter Wert (
false) drinsteht.Nö, siehe oben. Das ist ja mein Problem :-) Es wäre einfacher für mich, wenn ich genau das denken würde
Beide Ausdrücke
!heizung heizung == falsewerden ja als Ganzes ausgewertet und liefern wiederum entweder
trueoderfalse.
Enthält die Variable einfalse, weil die Heizung gerade nicht eingeschaltet ist, liefern beide eintruezurück.Ha, jetzt sind wir wieder an dem Punkt, wo ich nicht mit klar komme.
Ich verstehe es einfach nicht, wie die negierte Variable heizung (also!heizung) den gleichen Wert wie das "Original" (heizung) zurückliefert.Dieses Beispiel ist für mich insofern irritierend, da hier mit istVormittag eine Variable vorliegt, deren Name auch irreführend sein kann. Welchen Wert hat denn in diesem Beispiel die Variable? Vermutlich true 🙂
Und was, wenn sie auf false gesetzt war?
Eine Variable
isVormittagsoll repräsentieren, ob gerade Vormittag ist. Es würde dann irgendwo eine Zuweisung nach dem Motto (Pseudocode)isVormittag = GetCurrentTime() < 12erfolgt sein.
Dann liefertisVormittageintruewenn es Vormittag ist und einfalsewenn nicht.`So sehe ich das auch, aber was liefert dann ein
!isVormittagzurück?Ist vielleicht der Unterschied zwischen "Variable" oder "Konstante" das Problem?
Nein, ist mir aus php bekannt.
Da aber der Aufruf einer Funktion für den Compiler/Prozessor mehr Aufwand ist, nimmt man stattdessen eben eine Variable und stopft den Wert dort nur einmal rein, wenn man das Ergebnis an mehreren Stellen benötigt.
Das ist ja mit ziemlicher Sicherheit nix Neues für Dich.Yepp :-) Zumindest was die mehrfache Verwendung der Variablen / Funktionen angeht. Mit Compiler/Prozessor - Problemen, habe ich mich noch nicht beschäftigt.
Ach so: Tröste Dich - als ich Ende der 80'er angefangen habe zu programmieren, habe ich das mit dem "negieren" zuerst auch nicht kapiert

Sehr tröstlich :-)
@pi-ter sagte: was liefert dann ein !isVormittag zurück?
Am Vormittag ein false und sonst ein true (den negierten Wert von
isVormittag).Bei folgenden Werten liefert der Not-Operator(!) true:
- '' (Leerstring)
- null
- undefined
- 0 (Zahl)
- false (boolean)
- NaN (not a number)
Bei allen anderen Werten wird false geliefert.
Der Not-Operator wandelt jeden Wert in einen booleschen Wert. -
@codierknecht sagte in Einfache Heizungsreglung:
Ich schicke mal voraus: Das alles soll keine "Belehrung" sein.
So verstehe ich es auch nicht, keine Sorge. Und ich schicke mal voraus, dass mein ständiges Nachfragen keine Drängelei, Meckerei oder was auch immer sein soll.
Ich weiß nur nicht, wo genau Dein Knoten sitzt.
Wenn ich es jetzt nur selbst wüsste, nach all den Erläuterungen :(
Diese Beispiele setzen doch immer voraus, dass der Name der Variablen auch den Wert der Variablen repräsentiert
Nein - der Name einer Variablen repräsentiert ja niemals ihren Wert - sonst wäre es eine Konstante.
Der Name soll den "Sinn" darstellen.Da hab ich mich wohl ungeschickt ausgedrückt. Nein, ich gehe nicht davon aus, dass der Name den Wert repräsentiert. Und daher habe ich ja diese Beispiele "bemeckert" :-) weil sie genau das aber implizieren.
Schau hier, wo ich schrieb.
Dieses Beispiel ist für mich insofern irritierend, da hier mit istVormittag eine Variable vorliegt, deren Name auch irreführend sein kann. Welchen Wert hat denn in diesem Beispiel die Variable? Vermutlich true 🙂
Und was, wenn sie auf false gesetzt war?Aber zwischen Namen und Wert sehe ich schon einen Unterschied.
Vielleicht macht es gerade das aus, dass ich mich da so schwer tue mit dem geistigen Aha-Effekt.@codierknecht sagte in Einfache Heizungsreglung:
Ich vermute mal, das ist hier Dein Knoten im Kopf. Du gehst davon aus, dass dort immer ein bestimmter Wert (
false) drinsteht.Nö, siehe oben. Das ist ja mein Problem :-) Es wäre einfacher für mich, wenn ich genau das denken würde
Beide Ausdrücke
!heizung heizung == falsewerden ja als Ganzes ausgewertet und liefern wiederum entweder
trueoderfalse.
Enthält die Variable einfalse, weil die Heizung gerade nicht eingeschaltet ist, liefern beide eintruezurück.Ha, jetzt sind wir wieder an dem Punkt, wo ich nicht mit klar komme.
Ich verstehe es einfach nicht, wie die negierte Variable heizung (also!heizung) den gleichen Wert wie das "Original" (heizung) zurückliefert.Dieses Beispiel ist für mich insofern irritierend, da hier mit istVormittag eine Variable vorliegt, deren Name auch irreführend sein kann. Welchen Wert hat denn in diesem Beispiel die Variable? Vermutlich true 🙂
Und was, wenn sie auf false gesetzt war?
Eine Variable
isVormittagsoll repräsentieren, ob gerade Vormittag ist. Es würde dann irgendwo eine Zuweisung nach dem Motto (Pseudocode)isVormittag = GetCurrentTime() < 12erfolgt sein.
Dann liefertisVormittageintruewenn es Vormittag ist und einfalsewenn nicht.`So sehe ich das auch, aber was liefert dann ein
!isVormittagzurück?Ist vielleicht der Unterschied zwischen "Variable" oder "Konstante" das Problem?
Nein, ist mir aus php bekannt.
Da aber der Aufruf einer Funktion für den Compiler/Prozessor mehr Aufwand ist, nimmt man stattdessen eben eine Variable und stopft den Wert dort nur einmal rein, wenn man das Ergebnis an mehreren Stellen benötigt.
Das ist ja mit ziemlicher Sicherheit nix Neues für Dich.Yepp :-) Zumindest was die mehrfache Verwendung der Variablen / Funktionen angeht. Mit Compiler/Prozessor - Problemen, habe ich mich noch nicht beschäftigt.
Ach so: Tröste Dich - als ich Ende der 80'er angefangen habe zu programmieren, habe ich das mit dem "negieren" zuerst auch nicht kapiert

Sehr tröstlich :-)
@pi-ter sagte in Einfache Heizungsreglung:
So sehe ich das auch, aber was liefert dann ein !isVormittag zurück?
Wird das vielleicht verständlicher wenn man sagt: Den Kehrwert?
Die Variable
isVormittagkann entwedertrueoderfalsesein.
Man kann am Namen erwarten, dass sie am Vormittag eintrueund ansonsten einfalseenthält.
Wie auch immer der Code aussieht, der das irgendwann da rein klöppelt.Wenn ich jetzt wissen will, ob gerade Vormittag ist, sind wir uns hoffentlich einig dass das mit
if (isVormittag) if (isVormittag == true)bestens funktioniert. Auf beide Arten.
Wenn ich aber für mein Programm wissen muss, ob es nicht Vormittag ist, fragt man entweder so ab
if (isVormittag == false) // alternativ if (isVormittag != true)oder man ist faul und denkt auch an den Compiler/Prozessor und formuliert
if (!isVormittag)Hinter dem
ifwird etwas formuliert, was als Ganzes (also als Ausdruck - zwischen den Klammern) entwedertrueoderfalsezurückgibt.
Wenn ich wissen will, ob eine Variablefalseenthält, sind diese beiden Ausdrücke gleichwertig:if (isVormittag == false) if (!isVormittag)Beide liefern dem
ifeintrue, wenn in der Variablen gerade einfalsesteckt.Randbemerkung:
Ich finde das ist ein hervorragendes Beispiel dafür, welchen Anteil gut benamste Bezeichner an der Lesbarkeit von Code haben.
Die im Beispiel verwendete Variableheizungkönnte man viel besser mitheizungIstAnbenennen.
Dann dürfte das vielleicht klarer werden.if (heizungIstAn == false) // ist (für mich) genau so gut lesbar und verständlich wie if (!heizungIstAn) -
@pi-ter sagte in Einfache Heizungsreglung:
So sehe ich das auch, aber was liefert dann ein !isVormittag zurück?
Wird das vielleicht verständlicher wenn man sagt: Den Kehrwert?
Die Variable
isVormittagkann entwedertrueoderfalsesein.
Man kann am Namen erwarten, dass sie am Vormittag eintrueund ansonsten einfalseenthält.
Wie auch immer der Code aussieht, der das irgendwann da rein klöppelt.Wenn ich jetzt wissen will, ob gerade Vormittag ist, sind wir uns hoffentlich einig dass das mit
if (isVormittag) if (isVormittag == true)bestens funktioniert. Auf beide Arten.
Wenn ich aber für mein Programm wissen muss, ob es nicht Vormittag ist, fragt man entweder so ab
if (isVormittag == false) // alternativ if (isVormittag != true)oder man ist faul und denkt auch an den Compiler/Prozessor und formuliert
if (!isVormittag)Hinter dem
ifwird etwas formuliert, was als Ganzes (also als Ausdruck - zwischen den Klammern) entwedertrueoderfalsezurückgibt.
Wenn ich wissen will, ob eine Variablefalseenthält, sind diese beiden Ausdrücke gleichwertig:if (isVormittag == false) if (!isVormittag)Beide liefern dem
ifeintrue, wenn in der Variablen gerade einfalsesteckt.Randbemerkung:
Ich finde das ist ein hervorragendes Beispiel dafür, welchen Anteil gut benamste Bezeichner an der Lesbarkeit von Code haben.
Die im Beispiel verwendete Variableheizungkönnte man viel besser mitheizungIstAnbenennen.
Dann dürfte das vielleicht klarer werden.if (heizungIstAn == false) // ist (für mich) genau so gut lesbar und verständlich wie if (!heizungIstAn)Erst einmal Dank an Euch beide, die ihr Euch redlich Mühe gegeben habt, mich in die Spur zu bringen.
Dass es noch nicht ganz gelungen ist, liegt nicht an Euch und wir sollten das auch nach diesem Post von mir beenden. Wir kommen sonst in eine unerwünschte Zeitschleife, die das Forum zumüllt :-) und Eure Zeit bindet.
Muss nicht sein...Ich sehe immer noch für einen Widerspruch, den ich jetzt aber mit mir selbst ausmachen muss.
Wenn ich wissen will, ob eine Bedingung erfüllt ist, muss ich doch gegen einen anderen Wert (oder gegen den Wert einer anderen Variable) prüfen. Und dann scheint es mir doch entscheident zu sein, ob ich einen gegebenen Wert (oder Zustand) gegen den Wert oder gegen dessen Kehrwert prüfe.
Aber bitte, lassen wir das mal auf sich beruhen. Ich muss das jetzt mal sacken lassen.
Ich werde das so machen, wie vor vielen Jahren mit php: Lesen, nachschlagen, in einfachen Testscript umsetzen und schauen, wie das Ergebnis ist.Aber einen Tipp hätte ich gern noch:
In php habe ich mir Ergebnisse / Zwischenergebnisse immer per
echo $variable; exit;ausgeben lassen, oder aber eingebettet in einer html-Umgebung.
Wie mache ich das in ioBroker / Blockly? Nur über das Log bzw. wie setze ich ich den Baustein debug output ein?
Danke schon mal.
VG Peter
-
Erst einmal Dank an Euch beide, die ihr Euch redlich Mühe gegeben habt, mich in die Spur zu bringen.
Dass es noch nicht ganz gelungen ist, liegt nicht an Euch und wir sollten das auch nach diesem Post von mir beenden. Wir kommen sonst in eine unerwünschte Zeitschleife, die das Forum zumüllt :-) und Eure Zeit bindet.
Muss nicht sein...Ich sehe immer noch für einen Widerspruch, den ich jetzt aber mit mir selbst ausmachen muss.
Wenn ich wissen will, ob eine Bedingung erfüllt ist, muss ich doch gegen einen anderen Wert (oder gegen den Wert einer anderen Variable) prüfen. Und dann scheint es mir doch entscheident zu sein, ob ich einen gegebenen Wert (oder Zustand) gegen den Wert oder gegen dessen Kehrwert prüfe.
Aber bitte, lassen wir das mal auf sich beruhen. Ich muss das jetzt mal sacken lassen.
Ich werde das so machen, wie vor vielen Jahren mit php: Lesen, nachschlagen, in einfachen Testscript umsetzen und schauen, wie das Ergebnis ist.Aber einen Tipp hätte ich gern noch:
In php habe ich mir Ergebnisse / Zwischenergebnisse immer per
echo $variable; exit;ausgeben lassen, oder aber eingebettet in einer html-Umgebung.
Wie mache ich das in ioBroker / Blockly? Nur über das Log bzw. wie setze ich ich den Baustein debug output ein?
Danke schon mal.
VG Peter
@pi-ter sagte: gegen den Wert oder gegen dessen Kehrwert prüfe.
Zum Verständnis:
if(Ausdruck) { // Aktionen, wenn Ausdruck wahr ist } else { // Aktionen, wenn Ausdruck falsch ist }Ausdruck kann der Wert einer Variablen oder eines Datenpunktes, der Rückgabewert einer Funktion, das Ergebnis eines Vergleichs oder ... sein.
@pi-ter sagte in Einfache Heizungsreglung:
Nur über das Log bzw. wie setze ich ich den Baustein debug output ein?
Ja, beides entspricht dem "echo".
log(variable); // = echo $variable; -
Erst einmal Dank an Euch beide, die ihr Euch redlich Mühe gegeben habt, mich in die Spur zu bringen.
Dass es noch nicht ganz gelungen ist, liegt nicht an Euch und wir sollten das auch nach diesem Post von mir beenden. Wir kommen sonst in eine unerwünschte Zeitschleife, die das Forum zumüllt :-) und Eure Zeit bindet.
Muss nicht sein...Ich sehe immer noch für einen Widerspruch, den ich jetzt aber mit mir selbst ausmachen muss.
Wenn ich wissen will, ob eine Bedingung erfüllt ist, muss ich doch gegen einen anderen Wert (oder gegen den Wert einer anderen Variable) prüfen. Und dann scheint es mir doch entscheident zu sein, ob ich einen gegebenen Wert (oder Zustand) gegen den Wert oder gegen dessen Kehrwert prüfe.
Aber bitte, lassen wir das mal auf sich beruhen. Ich muss das jetzt mal sacken lassen.
Ich werde das so machen, wie vor vielen Jahren mit php: Lesen, nachschlagen, in einfachen Testscript umsetzen und schauen, wie das Ergebnis ist.Aber einen Tipp hätte ich gern noch:
In php habe ich mir Ergebnisse / Zwischenergebnisse immer per
echo $variable; exit;ausgeben lassen, oder aber eingebettet in einer html-Umgebung.
Wie mache ich das in ioBroker / Blockly? Nur über das Log bzw. wie setze ich ich den Baustein debug output ein?
Danke schon mal.
VG Peter
@pi-ter sagte in Einfache Heizungsreglung:
Mein letzter Versuch - dann halt' ich die KlappeWenn ich wissen will, ob eine Bedingung erfüllt ist, muss ich doch gegen einen anderen Wert (oder gegen den Wert einer anderen Variable) prüfen
Eben nicht.
Die Prüfung gegen einen anderen Wert liefert ja auch nurtrueoderfalse... Prüfung erfolgreich oder auch nicht.Hinter dem
ifsteht ja ein Ausdruck (das in Klammern). Das Ganze gibttrueoderfalsezurück. Dasifreagiert nur auf das Ergebnis des gesamten Ausdrucks!// liefert true, wenn in aValue gerade eine 42 steckt - sonst false if (aValue == 42) // liefert true, wenn es früher als 12:00 Uhr ist if (new Date().getHours() >= 12) // isVormittag ist vom Typ Boolean und enthält entweder true oder false // prüfen ob Vormittag if (isVormittag == true) if (isVormittag) // prüfen ob NICHT Vormittag if (isVormittag == false) if (!isVormittag)Versuch macht klug: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_NOT
https://javascript.info/ifelse#the-if-statement
https://javascript.info/logical-operators#not
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden