FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: TomLee am 16 März 2021, 14:08:02

Titel: Korrekte Angabe des default-Wert in ReadingsNum mit oder ohne Hochkomma ?
Beitrag von: TomLee am 16 März 2021, 14:08:02
Hallo,

aus der commandref zieh ich mir diese Information nicht raus.
Es gibt auch keine Beispiele, zumindest in der modularen cref nicht, die Syntax wird beschrieben ja.

In der modularen cref findet man Beispiele zu ReadingsVal, die, wie ich meine mitgenommen zu haben, doch nicht wirklich korrekt sind.
Dort wird als default-Wert eine Zahl (0) ohne Hochkomma verwendet, wäre wenn mans genau nimmt nicht ein Text korrekt ?

Im Forum wird. mMn. in den letzten Monaten oft die Variante ohne Hochkomma bei ReadingsNum verwendet.

Ich mags mir angewöhnen den default-Wert in ReadingsNum korrekt anzugeben weiß aber nicht ob jetzt mit oder ohne Hochkomma, es ist beides möglich, nicht wie bei ReadingsVal mit Text da wird, wenn man über einen "Editor" arbeitet, die Angabe ohne Hochkomma moniert.

Verräts mir bitte jemand was richtig ist ?

Gruß

Thomas

Titel: Antw:Korrekte Angabe des default-Wert in ReadingsNum mit oder ohne Hochkomma ?
Beitrag von: DeeSPe am 16 März 2021, 14:12:27
Bei Zahlenwerten sind kein Hochkomma nötig!

Gruß
Dan
Titel: Antw:Korrekte Angabe des default-Wert in ReadingsNum mit oder ohne Hochkomma ?
Beitrag von: CoolTux am 16 März 2021, 14:17:55
Da sowohl ReadingsVal als auch ReadingsNum Perlfunktionen sind unterliegen die ihnen übergebenen Werte den Perlkriterien.
Titel: Antw:Korrekte Angabe des default-Wert in ReadingsNum mit oder ohne Hochkomma ?
Beitrag von: TomLee am 16 März 2021, 14:34:23
ZitatBei Zahlenwerten sind kein Hochkomma nötig!

Soweit, war/bin ich auch schon, aber auch korrekt ?

Zitat... unterliegen die ihnen übergebenen Werte den Perlkriterien.

welche Perlgrundlagen und am besten wo sollte ich dann genauer lesen um die Perlkriterien zu verstehen, wenn du es nicht verraten möchtest.
Meine Vermutung wäre jetzt nach dieser Aussage in einfachen Hochkomma wäre korrekt.
Titel: Antw:Korrekte Angabe des default-Wert in ReadingsNum mit oder ohne Hochkomma ?
Beitrag von: marvin78 am 16 März 2021, 14:47:57
Es kommt darauf an, was du mit dem Wert machen möchtest. Es ist ja DEIN Rückgabewert, wenn kein anderer gefunden wird.

Perl lernen kann man an vielen Stellen.
Titel: Antw:Korrekte Angabe des default-Wert in ReadingsNum mit oder ohne Hochkomma ?
Beitrag von: Beta-User am 16 März 2021, 14:50:11
M.E. geht es hier eigentlich um die Themenkreise "Perl data types" und "Quotes in Perl" (bitte erforderlichenfalls Suchmaschine anwerfen).

Zahlen und Text sind halt SCALARe, wobei Perl eben nur bei reinem Text wegen "Bareword" mault, wenn man ihn nicht explizit als Text kennzeichnet (egal, mit welcher Art "Quote"). Perlcritic seinerseits meckert dann, wenn man Zahlen > 2 (?) ohne Quotes verwendet, das aber eher aus "ästhetischen" Gründen ("wo kommt denn dieser Wert auf einmal her...? - erfunden?!?" .
Ansonsten kennt Perl keine wirkliche Untescheidung zwischen Zahlen und Text (oder Wahrheitswerten), das ist - anders als in den meisten (/allen?) anderen Programmiersprachen - mehr oder weniger beliebig wandelbar.

Einfache Quotes (bzw. q{}) sind immer dann (etwas) effizienter wie doppelte (bzw. qq{}), wenn nichts mehr extrapoliert werden muss (also keine aufzulösenden Variablen oder Konstanten (mehr) drin sind).

Ergo gibt es für die Frage, ob ein default-Zahlen-Rückgabewert in ReadingsVal() denn jetzt in Quotes gehört am ehesten die typische Perl-Antwort: TMTOWTDI (https://en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it). Ich finde ohne Quotes am einleuchtendsten (da per Syntax-highlighting einfach zu erkennen), aber wenn man Quotes nimmt, dann einfache (oder q{wunschwert})...
Titel: Antw:Korrekte Angabe des default-Wert in ReadingsNum mit oder ohne Hochkomma ?
Beitrag von: CoolTux am 16 März 2021, 15:05:16
Zitat von: Beta-User am 16 März 2021, 14:50:11
Perlcritic seinerseits meckert dann, wenn man Zahlen > 2 (?) ohne Quotes verwendet, das aber eher aus "ästhetischen" Gründen ("wo kommt denn dieser Wert auf einmal her...? - erfunden?!?" .

Das wird wohl was mit Fehlercode zutun haben. 0 bis 2 sind typische Rückgabewerte für Fehlerbehandlung
Titel: Antw:Korrekte Angabe des default-Wert in ReadingsNum mit oder ohne Hochkomma ?
Beitrag von: Beta-User am 16 März 2021, 15:18:45
Na ja, wir diskutieren da grade noch was auf Perlcritic-Level 2:
5 is not one of the allowed literal values (0, 1, 2). Use the Readonly or Const::Fast module or the "constant" pragma instead at [...] Unnamed numeric literals make code less maintainable. Log3($name, 5, "set $command - value: " . join q{ }, @values);
Da geht es also explizit um "Wartungsfreundlichkeit"; Wären es reine Fehlercodes, müßte man m.E. auch noch die "-1" aufnehmen...

(Wobei die hier dann (mit) empfohlene Nutzung von "constant" schon per Level 4 oder 5 als "nicht gut" gebrandmarkt würde - sehr konsequent :P ...)

Titel: Antw:Korrekte Angabe des default-Wert in ReadingsNum mit oder ohne Hochkomma ?
Beitrag von: TomLee am 17 März 2021, 11:55:37
ZitatEinfache Quotes (bzw. q{}) sind immer dann (etwas) effizienter wie doppelte (bzw. qq{}), wenn nichts mehr extrapoliert werden muss (also keine aufzulösenden Variablen oder Konstanten (mehr) drin sind).

Das ist mir schon einige Zeit klar gewesen, hat mir wer mal an anderer Stelle hier im Forum erläutert.




Ich leg denk ich für mich fest in Zukunft dann immer Hochkommas zu verwenden, heißt keinen Unterschied zu den Werten -1,0,1,2 machen.

Danke.
Titel: Antw:Korrekte Angabe des default-Wert in ReadingsNum mit oder ohne Hochkomma ?
Beitrag von: Christoph Morrison am 17 März 2021, 14:53:41
Zitat von: TomLee am 16 März 2021, 14:08:02
aus der commandref zieh ich mir diese Information nicht raus.
Es gibt auch keine Beispiele, zumindest in der modularen cref nicht, die Syntax wird beschrieben ja.

Die Perl-Funktionen sind hier umfangreich(er) dokumentiert: https://wiki.fhem.de/wiki/DevelopmentModuleAPI#Daten_abfragen.2Fauslesen (https://wiki.fhem.de/wiki/DevelopmentModuleAPI#Daten_abfragen.2Fauslesen)

Zitat von: TomLee am 16 März 2021, 14:08:02
In der modularen cref findet man Beispiele zu ReadingsVal, die, wie ich meine mitgenommen zu haben, doch nicht wirklich korrekt sind.
Dort wird als default-Wert eine Zahl (0) ohne Hochkomma verwendet, wäre wenn mans genau nimmt nicht ein Text korrekt ?

Nein, korrekt ist quasi alles, also jeder Datentyp, da $default einfach nur zurückgegeben wird, wenn kein Reading im entsprechenden Device gefunden werden konnte. Du kannst auch einen anonymen Hash oder - wichtig - einen undef-Wert (ohne Quotes) zurückliefern. Bei Skalaren musst du wie im Thread beschrieben quoten.