In den meisten Wiki´s zu FHEM werden verschachtelte Anweisungen nach der Syntax else {if
abgearbeitet. Nun arbeite ich mich bei 30 Grad durch mein kleines Perl Kompendium und schreibe meine ersten kleinen Scripte, jedoch treu dem Buch nach dem Schema elsif (
. Was ist denn nun vor allem in Bezug auf FHEM zu bevorzugen. Persönlich habe ich mich jetzt schon an erstere Variante gewöhnt, muss aber sagen das ich letztere von der Klammersetzung fast übersichtlicher finde.
Kannst Du machen, wie Du möchtest. Für Anfänger ist die erste Variante leichter zu verstehen, für Fortgeschrittene ist die zweite Variante übersichtlicher.
Hallo,
ist nicht der Unterschied der das sich bei
else {if
das if einen eigenen Teil darstellt und mit dem if...else nichts zu tun hat und das else bezieht sich das vorhergehende if und bei
elsif (
wird sich nur auf das vorhergehende if bezogen?
mMn sind das 2 unterschiedliche Codes die so nichts miteinander zu tun haben (und auch nicht austauschbar sind).
Grüße
Edith: Ich such noch nach einem Beispiel um meinen Gedankengang verdeutlichen zu können 8)
Sehe ich wie Puschel. Die beiden codes machen nicht das gleiche.
Ein weiterer Unterschied ist das man mehrere elsif(){} haben kann, aber nur ein else{}
if( $a == 1 ){
}
elsif( $b == 1 ){
}
elsif( $c == 1 ){
if( $d == 1 ){
}
else{
}
}
else{
}
Grüße
if
elsif
elsif
elsif
else
macht dann der Übersicht halber dann Sinn, wenn Du für ein und die selbe Variable eine Liste von verschiedenen Werten abarbeiten möchtest und das letzte else ist dann das default, z.B. wenn die Eingabe überhaupt nicht passte ... usw.
Ich glaube ich weiß was du sagen willst Puschel, deswegen auch die verschiedenen Schreibweisen mit Einrückung. Da mein Mini Begrüßungsscript aber immer die gleiche Variable abruft, sollte die Schreibweise hier egal sein und ist in ersterer Variante deutlich leichter zu lesen.
#######Zufallsbegruessung############################
sub
Begruessung
{
my $zufallszahl;
$zufallszahl=int(rand(12));
if ($zufallszahl == 0) {fhem ("set MyTTS tts Hallo")}
elsif ($zufallszahl == 1) {fhem ("set MyTTS tts Hey.")}
elsif ($zufallszahl == 2) {fhem ("set MyTTS tts Willkommen.")}
elsif ($zufallszahl == 3) {fhem ("set MyTTS tts Wie gehts?")}
elsif ($zufallszahl == 4) {fhem ("set MyTTS tts Schön dich zu sehen.")}
elsif ($zufallszahl == 5) {fhem ("set MyTTS tts Wieder zurück?")}
elsif ($zufallszahl == 6) {fhem ("set MyTTS tts Wie war Dein Tag?")}
elsif ($zufallszahl == 7) {fhem ("set MyTTS tts Jetzt am besten eine schöne Tasse Kaffee.")}
elsif ($zufallszahl == 8) {fhem ("set MyTTS tts Endlich die Beine hochlegen.")}
elsif ($zufallszahl == 9) {fhem ("set MyTTS tts Zu Hause ists doch am schönsten.")}
elsif ($zufallszahl == 10) {fhem ("set MyTTS tts Freue mich dich zu sehen.")}
elsif ($zufallszahl == 11) {fhem ("set MyTTS tts Hi.")}
elsif ($zufallszahl == 12) {fhem ("set MyTTS tts Hier ist deine Hausnutte.")}
}
sub
Begruessung
{
my $zufallszahl;
$zufallszahl=int(rand(12));
if ($zufallszahl == 0) {fhem ("set MyTTS tts Hallo")}
else {if($zufallszahl == 1) {fhem ("set MyTTS tts Hey.")}
else {if($zufallszahl == 2) {fhem ("set MyTTS tts Willkommen.")}
else {if($zufallszahl == 3) {fhem ("set MyTTS tts Wie gehts?")}
else {if($zufallszahl == 4) {fhem ("set MyTTS tts Schön dich zu sehen.")}
else {if($zufallszahl == 5) {fhem ("set MyTTS tts Wieder zurück?")}
else {if($zufallszahl == 6) {fhem ("set MyTTS tts Wie war Dein Tag?")}
else {if($zufallszahl == 7) {fhem ("set MyTTS tts Jetzt am besten eine schöne Tasse Kaffee.")}
else {if($zufallszahl == 8) {fhem ("set MyTTS tts Endlich die Beine hochlegen.")}
else {if($zufallszahl == 9) {fhem ("set MyTTS tts Zu Hause ists doch am schönsten.")}
else {if($zufallszahl == 10) {fhem ("set MyTTS tts Freue mich dich zu sehen.")}
else {if($zufallszahl == 11) {fhem ("set MyTTS tts Hi.")}
else {if($zufallszahl == 12) {fhem ("set MyTTS tts Hier ist deine Hausnutte.")}
}
}
}
}
}
}
}
}
}
}
}
}
}
Mich wundert das deine 2. Version überhaupt klappt. Muss wohl eine Eigenheit in Perl sein das mehrere else Zweige nicht in einem Fehler enden.
http://perlmeme.org/howtos/syntax/ifelsifelse.html
Hallo fheinz.
Mit letzterer Variante hab ich bis jetzt alle Notifys basteln können, eigentlich ist die neue Methode meine erste Modulation in den 99_myUtils.
Hallo,
@Dittel
Danke für dein Beispiel ::)
Manches liegt so nah ;D
sub
Begruessung
{
my $zufallszahl;
my $buchstabe;
$zufallszahl=int(rand(12));
$buchstabe=A;
if ($zufallszahl == 0) {fhem ("set MyTTS tts Hallo")}
else {if($zufallszahl == 1) {fhem ("set MyTTS tts Hey.")}
else {if($buchstabe == A) {fhem ("set MyTTS Zufallszahl ist nicht 0 oder 1 aber Buchstabe ist A.")
}
Das hat mit den Einrückungen nichts zu tun.
An meinem von dir geklauten abgewandelten Beispiel siehst du das das letzte else zuschläft wenn $Zufallszahl ungleich 0 oder ungleich1 ist aber zusätzlich noch geprüft wird ob Buchstabe gleich A.
Ja ich weiß - auch ein blödes Beispiel.
Ich grübel immer noch nach einem vernüftigen.
Grüße
Ihr habt ja alle recht. Aber ich auch.
Es gibt nämlich durchaus Fälle, wo in beiden Syntaxanwendungen das Gleiche rauskommt. So ganz genau war die Fragestellung ja nicht formuliert.
Hab nochmal genauer hingesehen und für mich korrekt eingerückt.
Du schachtelst deinen code immer weiter, deswegen klappt das mit den ganzen else. Ich denke nicht das das sehr performant ist, oder belehrt mich eines besseren :P
if ($zufallszahl == 0) {
fhem ("set MyTTS tts Hallo")
}
else {
if($zufallszahl == 1) {
fhem ("set MyTTS tts Hey.")
}
else {
if($zufallszahl == 2) {
fhem ("set MyTTS tts Willkommen.")
}
else {
if($zufallszahl == 3) {
fhem ("set MyTTS tts Wie gehts?")
}
else {
if($zufallszahl == 4) {
fhem ("set MyTTS tts Schön dich zu sehen.")
}
else {
if($zufallszahl == 5) {
fhem ("set MyTTS tts Wieder zurück?")
}
else {
if($zufallszahl == 6) {
fhem ("set MyTTS tts Wie war Dein Tag?")
}
......
Meiner Meinung nach bist du auch in Sachen Geschwindigkeit mit elseif() besser dran.
Grüße
Naja, das mit dem Einrücken muss ich noch üben, aber ob nun die letztere Variante eher System belastendender ist, kann ich nicht sagen, würde mich aber doch mal genauer interessieren. Allerdings hat hier wohl niemand mehr nen C64 stehen.
Hallo,
else {if
ermöglicht eine neue if-Abfrage die mit dem einleitenden if nichts zu tun haben muss während sich
elsif
auf das einleitende if bezieht.
So. Nun hab ichs.
Grüße
Edith:
ZitatAllerdings hat hier wohl niemand mehr nen C64 stehen.
Ich habe meinen 1990 durch einen Amiga500 ersetzt ::)
Ich glaub ich habs begriffen. Danke an alle. :)
Hallo,
dann wie gehabt ...
Beitrag als Gelöst markieren ;)
Danke.
Grüße