FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: krikan am 15 September 2014, 14:53:36

Titel: (gelöst) Test ob "at" existiert mit "exists" oder "defined"?
Beitrag von: krikan am 15 September 2014, 14:53:36
In diesem Thread http://forum.fhem.de/index.php/topic,27011.msg199677.html#msg199677 geht es um die Frage ein "at" auf die Existenz abzuprüfen.

Zwei Lösungsvarianten wurden vorgeschlagen:
a) Prüfung mit if(defined($defs{'objekt'}))...
b) Prüfung mit if(exists($defs{'objekt'})) ...

Welche Variante ist nun die Bessere/Richtigere?
Ich meine a) mit defined, da universeller:
Mit exists prüft man die reine Existenz eines Hash-Elementes, Wert interessiert nicht.
Mit defined prüft man, ob ein Hash-Element einen Wert anders als "undef" hat. Also neben Existenz des Hash-Elements auch den (Fehler-)wert "undef".
Ist mein Gedankengang falsch?

Danke, Christian

PS: Neuer Thread, da entsprechender Hinweis von einem Moderator im Ursprungsthread.
Titel: (gelöst) Test ob "at" existiert mit "exists" oder "defined"?
Beitrag von: justme1968 am 15 September 2014, 15:59:14
wie schon im anderen thread geschrieben:

exists und defined sind zwei unterschiedliche dinge und es gibt kein generelles besser oder schlechter. so wie bei größer und größer gleich. mal ist das eine richtig und mal das andere. in manchen konstellationen geht beides.

es kommt wirklich drauf an was du genau willst. universeller gibt es hier nicht.

im übrigen ist es genau umgekehrt. defined liefert true wenn der key vorhanden ist und der wert etwas anderes als undef ist. exists liefert true wenn es es den key gibt. auch wenn der wert undef ist.

im fall des at ist es eigentlich richtiger mit defined zu prüfen. den fall das der hash undefined enthält sollte es aber eigentlich nicht geben.

gruss
  andre
Titel: Antw:Test ob "at" existiert mit "exists" oder "defined"?
Beitrag von: krikan am 15 September 2014, 16:05:08
Danke Andre für Deine ausführliche Antwort. Denke ich habe das verstanden. Gruß, Christian

Und sorry, dass ich dies in 2 Threads gefragt habe.

EDIT: Danke für Dein Edit jetzt ist es für mich insgesamt verständlich.
Titel: Antw:(gelöst) Test ob "at" existiert mit "exists" oder "defined"?
Beitrag von: traveltheworld am 07 März 2016, 00:26:27
Die Lösungen mit exists bzw. defined haben bei mir nicht sauber funktioniert.

Die Lösung in diesem Thread https://forum.fhem.de/index.php?topic=13883.0 per Value funktioniert dagegen einfach und zuverlässig.
Titel: Antw:(gelöst) Test ob "at" existiert mit "exists" oder "defined"?
Beitrag von: marvin78 am 07 März 2016, 07:14:51
Ich denke, dass die Abfrage in 99% der Fälle nicht mehr nötig ist, wenn man defmod verwendet.
Titel: Antw:(gelöst) Test ob "at" existiert mit "exists" oder "defined"?
Beitrag von: traveltheworld am 08 März 2016, 14:20:09
Für einen (Re)Start eines Timers ja, aber nicht für einen (vorzeitigen) Abbruch desselben.
Zumindest lese ich das so aus der defmod Spezifikation.