Autor Thema: Meldung: called too early to check prototyp  (Gelesen 636 mal)

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 25286
Antw:Meldung: called too early to check prototyp
« Antwort #15 am: 07 Mai 2020, 15:58:29 »
Die leserlichkeit kann man aber beeinflussen

sub test {        # (var1,var2)

}
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://paypal.me/pools/c/8gULisr9BT
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net
Zustimmung Zustimmung x 1 Liste anzeigen

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22298
Antw:Meldung: called too early to check prototyp
« Antwort #16 am: 07 Mai 2020, 15:59:45 »
Fuer die, die Prototypen verwenden wollen, und bereit sind, den neuerdings deswegen hier ueblichen Shitstorm zu ignorieren:
bei einem rekursiven Aufruf muss man vor der Funktionsdefinition sie nochmal deklarieren
sub GewHaus_Bewaesserung_pr($$);
sub GewHaus_Bewaesserung_pr($$) {
....
}
Informativ Informativ x 1 Liste anzeigen

Offline Dittel

  • Sr. Member
  • ****
  • Beiträge: 588
Antw:Meldung: called too early to check prototyp
« Antwort #17 am: 07 Mai 2020, 16:09:37 »
Nun es ist auch für mich etwas ungewohnt nicht zu wissen wie viele Parameter ich übergeben kann, sollte oder habe wenn ich die Prototypes weg lasse. Ich frage mich nur was mich bewogen hat es immer "falsch" ?! zu machen. Irgendein Perl Buch muss es mir eben ganau so eingetrichtert haben oder hat sich an der Handhabung da mal was geändert?

Das Thema scheint ja ziemlich sensibel zu sein.  ;D

Offline Christoph Morrison

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1122
  • Maintainer von 12 Modulen + holiday-Files
    • Private Website
Antw:Meldung: called too early to check prototyp
« Antwort #18 am: 07 Mai 2020, 16:14:40 »
Fuer die, die Prototypen verwenden wollen, und bereit sind, den neuerdings deswegen hier ueblichen Shitstorm zu ignorieren:
bei einem rekursiven Aufruf muss man vor der Funktionsdefinition sie nochmal deklarieren
sub GewHaus_Bewaesserung_pr($$);
sub GewHaus_Bewaesserung_pr($$) {
....
}

Da hat man ja total was gewonnen! Mehr Code um ein Warning loszuwerden, das man mit weniger Code überhaupt nicht hätte. Und dann ändert man was an GewHaus_Bewaesserung_pr, vergisst die Dublette und bums.

Mich würde mal interessieren, wie der OP überhaupt dazu gekommen ist, Prototypen zu verwenden?
Maintainer von:
holidays · 59_Twilight · contrib/sacha_gloor · Buienradar

Online MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 7557
  • NIVEAu ist keine Creme...
Antw:Meldung: called too early to check prototyp
« Antwort #19 am: 07 Mai 2020, 16:14:47 »
Fuer die, die Prototypen verwenden wollen, und bereit sind, den neuerdings deswegen hier ueblichen Shitstorm zu ignorieren:
bei einem rekursiven Aufruf muss man vor der Funktionsdefinition sie nochmal deklarieren
sub GewHaus_Bewaesserung_pr($$);
sub GewHaus_Bewaesserung_pr($$) {
....
}

So wie ich es in "meiner" Welt kenne:

Prototyp ins h-File
Implementierung ins C(++)-File

Gruß, Joachim
FHEM PI3 Buster: HM-CFG-USB, 40x HM, ZWave-USB, 6x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, KODI, alexa-fhem, ...
FHEM PI2 Stretch: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, KODI, ha-bridge, ...
FHEM PI3 Buster (Test)
FHEM PI3 Stretch (Test)

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 25286
Antw:Meldung: called too early to check prototyp
« Antwort #20 am: 07 Mai 2020, 16:16:19 »
Nun es ist auch für mich etwas ungewohnt nicht zu wissen wie viele Parameter ich übergeben kann, sollte oder habe wenn ich die Prototypes weg lasse. Ich frage mich nur was mich bewogen hat es immer "falsch" ?! zu machen. Irgendein Perl Buch muss es mir eben ganau so eingetrichtert haben oder hat sich an der Handhabung da mal was geändert?

Das Thema scheint ja ziemlich sensibel zu sein.  ;D


Es ist nicht sensibel. Und wenn Du mit Prototypen arbeiten willst dann mach es, ist ok.
Frühere Perlbücher so bis 2006 glaube haben das auch noch so gemacht. Alles danach arbeitet komplett ohne.
Beispiel: Der Perl Programmierer
Dicker Wälzer. Wieso es empfohlen wird ohne Prototypen zu arbeiten kann man in Perl Best Praxis nach lesen.

Man kann einfach sagen es ist eine modernere Form für Perl. Gut zu lesen im Buch Modern Perl von 2014.


Grüße
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://paypal.me/pools/c/8gULisr9BT
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

Offline Dittel

  • Sr. Member
  • ****
  • Beiträge: 588
Antw:Meldung: called too early to check prototyp
« Antwort #21 am: 07 Mai 2020, 16:27:40 »
Zitat
Mich würde mal interessieren, wie der OP überhaupt dazu gekommen ist, Prototypen zu verwenden?


Als ich ich mit Fhem und Perl angefangen habe, waren mir nur die Sprache BASIC geläufig aus früheren C64 Kindertagen. Dann kam mit Perl ja gleich mal der Hammer und ich hab mich mit einer Ausgabe von 2005 "Mit Perl programmieren lernen" mal wieder an die Sache herangetraut. Dort muss es sich wohl festgesetzt haben, Parameter zu "zählen". Da ich aber rein privat noch wilden Code in Python schreibe, war mir das nicht fremd und auch dort ist es in ähnlicher Form ja gegeben. Das jetzt im nachhinein wieder "umzubiegen" ist ja wie schreiben lernen mit links.  :o

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 25286
Antw:Meldung: called too early to check prototyp
« Antwort #22 am: 07 Mai 2020, 16:33:28 »
Auch in Perl gab es mehrere Rechtschreibreformen  ;D
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://paypal.me/pools/c/8gULisr9BT
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

Offline Dittel

  • Sr. Member
  • ****
  • Beiträge: 588
Antw:Meldung: called too early to check prototyp
« Antwort #23 am: 07 Mai 2020, 16:43:38 »
Auch in Perl gab es mehrere Rechtschreibreformen  ;D

Dann würde ich auch hier wohl eher zu den Rebellierenden gehören.
Hab gerade mal ohne die Prototypes getestet und mal einen Parameter weggelassen.
Ich bekomme dann eine Fehlermeldung, die ohne den Code zu sichten erst mal nicht schlüssig ist.
Please define GewHaus_Bewaesserung_Manuell_pr first
Mit der Prototype Option weiß man dagegen sofort was klemmt.
Not enough arguments for main::GewHaus_Bewaesserung_pr at (eval 530) line 1, near "1)"
Ein Hoch auf die Prototypes.  ;D

Offline Christoph Morrison

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1122
  • Maintainer von 12 Modulen + holiday-Files
    • Private Website
Antw:Meldung: called too early to check prototyp
« Antwort #24 am: 07 Mai 2020, 16:56:20 »
Dann würde ich auch hier wohl eher zu den Rebellierenden gehören.
Hab gerade mal ohne die Prototypes getestet und mal einen Parameter weggelassen.

Niemand hat gesagt, dass du dich darauf verlassen sollst, dass immer x Parameter kommen. Denn du musst sowieso checken, ob die Parameter auch inhaltlich valide sind. Übergib doch mal undef oder irgendeinen Müll an die Funktion und du bekommst auch einen Fehler - weil deine sanity checks nicht wirklich existieren. Dazu bekommst du mit Prototypes aber auch noch unsichtbare magic:

perl -MData::Dumper -e 'sub t($$) { print Dumper(@_); }; t(1,(2,3,5));'
$VAR1 = 1;
$VAR2 = 5;

Hättest du das erwartet?
Maintainer von:
holidays · 59_Twilight · contrib/sacha_gloor · Buienradar

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22298
Antw:Meldung: called too early to check prototyp
« Antwort #25 am: 07 Mai 2020, 17:04:25 »
Ja, man kann abstruse Faelle konstruieren, wo nicht das passiert, was man erwartet.
Aber so wie ich denke und programmiere, sind die fuer mich hilfreich.
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Dittel

  • Sr. Member
  • ****
  • Beiträge: 588
Antw:Meldung: called too early to check prototyp
« Antwort #26 am: 07 Mai 2020, 17:29:07 »

Hättest du das erwartet?

Ähm, nein aber ein interessantes Beispiel. Das muss ich mal zerplücken und schauen warum das so ist.
- weil deine sanity checks nicht wirklich existieren.

Ja das stimmt, darauf sollte ich in Zukunft mehr Wert legen. Eigentlich waren meine Codeschnipsel immer soweit getestet und konsistent, daß größeres Fehlverhalten mir bisher erspart blieb. Aber ich möchte nicht wissen, was passiert wenn mal das Fhem statefile nicht aktuell ist oder verloren geht. Dann ist das Chaos erst einmal perfekt und das Haus lernt fliegen.
Inwieweit man aber auf jede erdenkliche Fehleingabe oder Situation eine Ausnahmebehandlung schreiben sollte sei mal dahingestellt und kommt wohl auf die angestrebte Funktion an. Bei einer Bewässerung ist dies wohl aber sehr wohl mehr von Bedeutung als bei einer Routine für ein paar Lampen.

Offline Christoph Morrison

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1122
  • Maintainer von 12 Modulen + holiday-Files
    • Private Website
Antw:Meldung: called too early to check prototyp
« Antwort #27 am: 07 Mai 2020, 18:44:08 »
Ja, man kann abstruse Faelle konstruieren, wo nicht das passiert, was man erwartet.
Aber so wie ich denke und programmiere, sind die fuer mich hilfreich.

In deiner Welt sind alles nur "abtruse Fälle" damit du ja nie hinterfragen musst, ob dein bisher Gelerntes vielleicht nicht nur einfach nicht mehr dem aktuellen Stand - also dem von 2005 oder wann PBP erschienen ist - entspricht. So ist es natürlich schön bequem.
Maintainer von:
holidays · 59_Twilight · contrib/sacha_gloor · Buienradar

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22298
Antw:Meldung: called too early to check prototyp
« Antwort #28 am: 07 Mai 2020, 19:18:12 »
Vielen Dank fuer den persoenlichen Angriff.
Du kennst mich schliesslich am besten.

Offline Christoph Morrison

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1122
  • Maintainer von 12 Modulen + holiday-Files
    • Private Website
Antw:Meldung: called too early to check prototyp
« Antwort #29 am: 07 Mai 2020, 19:58:06 »
Vielen Dank fuer den persoenlichen Angriff.
Du kennst mich schliesslich am besten.

Ach ja, aber "abstruse Fälle" ist natürlich professioneller, nicht-persönlicher Umgang, genau wie das Abqualifizieren von von dir ungeliebten Meinungen als "Shitstorm" (offensichtlich hast du noch keinen erlebt).

Dafür, dass du selbst gerne austeilst hast du aber ein ganz schön dünnes Fell.
Maintainer von:
holidays · 59_Twilight · contrib/sacha_gloor · Buienradar