NEWS
Blockly erkennt Zahl nicht bei einer OR Prüfung
-
Hi zusammen,
ich möchte gerne Montag, Mittwoch und Freitag etwas ausführen. Dazu nutze ich das Datumsobjekt als Wochentag als Zahl.
Wenn ich den Tag einzeln prüfe klappt die Prüfung, wenn ich es jedoch in einem ODER zusammenbaue schlägt die Prüfung fehl. Einen "Wenn Wert IN..." Block habe ich nicht gefunden.
Der Screenshot ist natürlich nicht mein ganzes Script, zeigt aber mein Problem dabei.
Zum einen die Frage: Fehler? Oder verschachtelt das ODER hier irgendwie anders als ich es erwarte?
Und wie würde ich das ganze anders lösen? Natürlich kann ich drei "Falls Blöcke" bauen, das erscheint mit jedoch etwas umständlich.
Danke & Grüße
-
@gutgut30 sagte in Blockly erkennt Zahl nicht bei einer OR Prüfung:
Oder verschachtelt das ODER hier irgendwie anders als ich es erwarte?
Du machst
1 || 3 || 5
und vergleichst das Ergebnis davon mit dem aktuellen Wert. Bei JavaScript käme da immer1
raus.So funktioniert ein "oder" nicht. Du brauchst 3 separate Prüfungen auf ist die Werte. So:
Oder legst eine Liste mit den gültigen Werten an und schaust ob der aktuelle Wert in der Liste vorkommt.
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="debug" id="/0h^^V4gBh-DuB%E@LMH" x="-63" y="138"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="XW0HcXt|LXk=S]zF2vRQ"> <field name="TEXT">test</field> </shadow> <block type="logic_compare" id="7HQ:cIT4,R^wF:,E_9:S"> <field name="OP">GT</field> <value name="A"> <block type="lists_indexOf" id="5p=$(h7^#xv_]9F%Uboq" inline="false"> <field name="END">FIRST</field> <value name="VALUE"> <block type="lists_create_with" id="lh.8xenMM16tdkBIfm0="> <mutation items="3"></mutation> <value name="ADD0"> <block type="math_number" id="ogaJ./js~cS%T_k8-WYt"> <field name="NUM">1</field> </block> </value> <value name="ADD1"> <block type="math_number" id="oi1k|XfS2jd9-Q8FaDdF"> <field name="NUM">3</field> </block> </value> <value name="ADD2"> <block type="math_number" id="5Ak:V2=4U=e/lc7cgBVv"> <field name="NUM">5</field> </block> </value> </block> </value> <value name="FIND"> <block type="time_get" id="ios#i^N@+Nf}}zw@CPIm"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation> <field name="OPTION">wd</field> </block> </value> </block> </value> <value name="B"> <block type="math_number" id="HM?8g%7-_mZ2cmj}1%0~"> <field name="NUM">0</field> </block> </value> </block> </value> </block> </xml>
-
@haus-automatisierung sagte in Blockly erkennt Zahl nicht bei einer OR Prüfung:
Bei JavaScript käme da immer 1 raus
... oder exakter:
true
@gutgut30
Einführung in die bool'sche Algebra - Teil 1:Das "oder" ist hier ein logischer (bool'scher) Operator. Dieser Operator liefert
true
, wenn einer der Teilausdrücketrue
ist. Deine Teilausdrücke1
,3
und5
sind aber alle nichtfalse
(alle Ziffern != 0 werden alstrue
ausgewertet). Darum kommt da dann als Endergebnis wiedertrue
raus. -
@codierknecht sagte in Blockly erkennt Zahl nicht bei einer OR Prüfung:
Bei JavaScript käme da immer 1 raus
... oder exakter: true
Nein, numerisch
1
.Ein
false || 3
ist liefert z.B. auch3
. Das nutzen viele für Standard-Parameter. -
@haus-automatisierung sagte in Blockly erkennt Zahl nicht bei einer OR Prüfung:
So funktioniert ein "oder" nicht.
Das liegt aber an der schlampigen Verwendung bool'scher Begtiffe in der Umgangssprache.
Ebenso wie das und/oder bei 'Montag und Mittwoch', was korrekterweise einem falls Mo oder Mi entspricht -
@haus-automatisierung sagte in Blockly erkennt Zahl nicht bei einer OR Prüfung:
Nein, numerisch 1.
Du hast tatsächlich Recht.
Ich bleibe dabei: Komische Sprache, bei der ein bool'scher Ausdruck nicht ausschließlichtrue
oderfalse
ist.
Daran, dass das im Speicher als 0 oder 1 abgebildet wird, stören sich andere Sprachen ja auch nicht. -
@codierknecht sagte in Blockly erkennt Zahl nicht bei einer OR Prüfung:
Ich bleibe dabei: Komische Sprache, bei der ein bool'scher Ausdruck nicht ausschließlich true oder false ist.
Das ist ein logisches oder und nicht nur ein boolscher Operator. Meistens verwendet man den natürlich mit boolean Werten. Aber ist eben noch etwas flexibler. Ich bevorzuge für solche Dinge auch den Nullish coalescing operator
??
. Der verhält sich aber etwas anders.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR#using_or
However, the || operator actually returns the value of one of the specified operands, so if this operator is used with non-Boolean values, it will return a non-Boolean value.
-
@haus-automatisierung
Der Hinweis auf "was würde JavaScript machen" hat mir den Gedankenfehler auch klar aufgezeigt.Ganz vielen Dank.
-
@haus-automatisierung
... macht mir die Sprache nicht wirklich weniger suspekt -
@codierknecht Ich fänd' es deutlich suspekter, wenn bei
1 || 3
eintrue
das Ergebnis wäre. Machen viele Sprache ja genauso. PHP, Python usw. -
Eigentlich hast Du ja Recht.
Sowas wie
1 || 3
funktioniert eh nur wegen der fehlenden Typsicherheit.
In Delphi z.B. meckert sofort mein Compiler, wenn ich versuche nicht-bool'sche Typen mit 'nemor
oderand
zu behandeln. Da müsste ich die Operanden erst Type-casten.Lass gut sein. Ich wollte ja nicht @gutgut30's Thread kapern.