Korrekte Angabe des default-Wert in ReadingsNum mit oder ohne Hochkomma ?

Begonnen von TomLee, 16 März 2021, 14:08:02

Vorheriges Thema - Nächstes Thema

TomLee

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


DeeSPe

MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

CoolTux

Da sowohl ReadingsVal als auch ReadingsNum Perlfunktionen sind unterliegen die ihnen übergebenen Werte den Perlkriterien.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

TomLee

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.

marvin78

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.

Beta-User

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. Ich finde ohne Quotes am einleuchtendsten (da per Syntax-highlighting einfach zu erkennen), aber wenn man Quotes nimmt, dann einfache (oder q{wunschwert})...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Beta-User

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 ...)

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

TomLee

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.

Christoph Morrison

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

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.