wo ist der unterschied zwischen "elsif" und "if" "else"?
Alain
- programmiertechnik
hallo,
sorry wenn ich vielleicht naiv frage,
aber was ist der unterschied zwischen abfragen wie
"elsif" und "if"
wozu wird "elsif" überhaubt benötigt?
wird das auf eine ganzen if else strang angewendet oder sind das
einzelne "neu abfragen"
was ich noch wissen möchte ist beim cgi z.B.
wenn eine abfrage wie diese z.B.
{ irgendwas.......
if ($var[$count] eq "pin_exp_day"){
$pin_exp_day = $val[$count];
}
if ($var[$count] eq "pin_exp_month"){
$pin_exp_month = $val[$count];
}
if ($var[$count] eq "pin_subscription"){
$pin_subscription = $val[$count];
}
{$count = $count + 1;}}
stattfindet wird dann bei "einer" wahrheit die schlaufe abgebrochen
und der befehl ausgeführt oder speichert er alle daten beim durchgang
und führt dann die antwort aus?
und nochmal zu elsif
könnte dieses beispiel auch so geschrieben werden
{ irgendwas.......
elsif ($var[$count] eq "pin_exp_day"){
$pin_exp_day = $val[$count];
}
elsif ($var[$count] eq "pin_exp_month"){
$pin_exp_month = $val[$count];
}
if ($var[$count] eq "pin_subscription"){
$pin_subscription = $val[$count];
}
else
{$count = $count + 1;}}
Gruss Alain
Hallo,
aber was ist der unterschied zwischen abfragen wie
"elsif" und "if"
Zuerst: "if" fragt eine Bedingung ab; wenn die zutrifft, wird etwas gemacht. Das dürfte soweit klar sein, denke ich.
Mit "elsif" fragst Du weitere Bedingungen ab. Wenn die Bedingung, die mit "if" abgefragt wird, nicht zutrifft, wird damit eine zweite abgefragt - wenn die zutrifft, wird etwas anderes gemacht. Wenn das auch nicht der Fall ist, kanst Du über ein weiteres "elseif" noch ein drite Bedingung abfragen, usw.
"else" ist eine Restkategorie. Wenn keine der davor abgefragten Bedingungen zutrifft, wird das gemacht, was im "else"-Zweig notiert ist.
Ich hoffe, ich hab mich einigermaßen verständlich ausgedrückt :-)
Grüße,
Utz
hallo Nachbar ;-)
Ich hoffe, ich hab mich einigermaßen verständlich ausgedrückt :-)
ja, hast du. Allerdings gibts noch was Grundsätzliches zu den "bedingten Anweisungen" in den Programmiersprachen. "if" ist als Bedingung in allen, die ich kenne, identisch. Aber die Bedingung "und wenn ..." wird in verschiedenen Sprachen mit sehr geringen Unterschieden gehandhabt. Javascript befolgt "else if", C/C++ ebenfalls, PERL befolgt "elsif", in VBScript (ASP) muß man auch noch ein "endif" setzen usw.
Der Effekt ist, wie du es genannt hast, jeweils derselbe. Aber die Schreibweise kann einen manchmal zur Verzweiflung treiben.
So weit ich das bisher sehen kann, ist die einzige "bedingte Anweisung", die alle Sprachen mit derselben Syntax befolgen, die "while"-Schleife.
btw: kriegt man das aus historischem Interesse eigentlich noch raus, wer sich das mit "if" und "else" mal ausgedacht hat?
winkewinke
Christoph S.
Auch hallo Nachbar :-)
... wird in verschiedenen Sprachen mit sehr geringen Unterschieden gehandhabt. Javascript befolgt "else if", C/C++ ebenfalls, PERL befolgt "elsif", in VBScript (ASP) muß man auch noch ein "endif" setzen usw.
Einen hab ich da noch: in VBScript (zumindest die ASP-Variante) heißt es "elseif" :-)
Grüße,
Utz
Deine Frage ist schnell beantwortet:
sind nur if schleifen definiert,so prüft er jede schleife, egal ob die erstere richtig oder falsch ist.
bei if, dann elsif und dann else prüft perl (oder anderes) nur so lange, bis eine bedingung zutrifft und bricht danach ab. die danach stehenden abfragen werden dann nicht mehr kontrolliert!
ich denke, damit hat sich deine 2. frage erübrigt - ansonsten noch viel spass beim posten, aber am besten mal unter 'perl' bei 'bedingungen' in selfhtml schauen
sebastian
Hallo,
Deine Frage ist schnell beantwortet:
Na da bin ich ja mal gespannt.
sind nur if schleifen definiert,so prüft er jede schleife, egal ob die erstere richtig oder falsch ist.
Was haben Schleifen mit if zu tun? Du meinst wohl eher Verzweigungen. Selbst den Begriff "Abfragen" kann man gerade noch so gelten lassen. Aber mit Schleifen hat das ganze überhaupt nix zu tun. Schleifen sind Konstrukte, mit der eine Anweisung(sfolge) mehrmals durchlaufen werden kann.
bei if, dann elsif und dann else prüft perl (oder anderes) nur so lange, bis eine bedingung zutrifft und bricht danach ab.
Auch das mit den "bricht danach ab" kann ich so nicht ganz stehen lassen. Es wird überhaupt nichts abgebrochen, sondern die Anweisungsfolge wird einfach nur nicht ausgeführt wenn die dazugehörige mit if evaluierte Bedingung nicht stimmt.
ich denke, damit hat sich deine 2. frage erübrigt - ansonsten noch viel spass beim posten, aber am besten mal unter 'perl' bei 'bedingungen' in selfhtml schauen
Ahja .... ich glaube das ist auch besser so.
Gruss
MichaelB
PS: Normalerweise bin ich nicht pingelig. Aber wenn es so krass daneben geht muss man schon zum Schutze des Fragenden eingreifen.
Hallo,
Du brauchst nur das Programm mit "gesundem Menschenverstand" zu lesen und dabei "if" mit "falls", "else" mit "ansonsten" oder mit "und falls nicht dann" und "elsif" - schon selbstverständlich - mit "ansonsten falls" zu übersetzen. Falls du die falsche Schreibweise erwischst, sagt dir das schon der Compiler obzw. Interpreter.
wozu wird "elsif" überhaubt benötigt?
damit die nachfogende Bedingung nur abgefragt wird, wenn die vorausgehende (nach "if") ***nicht*** erfüllt ist.
wird das auf eine ganzen if else strang angewendet oder sind das
einzelne "neu abfragen"
"elsif" muß sich - genau wie "else" - auf ein vorausgehendes "if" oder "elseif" beziehen. Andernfalls wird ein Syntaxfehler gemeldet.
was ich noch wissen möchte ist beim cgi z.B.
wenn eine abfrage wie diese z.B.
{ irgendwas.......
if ($var[$count] eq "pin_exp_day"){
$pin_exp_day = $val[$count];
}
if ($var[$count] eq "pin_exp_month"){
$pin_exp_month = $val[$count];
}
if ($var[$count] eq "pin_subscription"){
$pin_subscription = $val[$count];
}
{$count = $count + 1;}}
stattfindet wird dann bei "einer" wahrheit die schlaufe abgebrochen
und der befehl ausgeführt oder speichert er alle daten beim durchgang
und führt dann die antwort aus?
Die Schleife wird nur dann abgebrochen, wenn das irgendwo ins Programm geschrieben wurde. Hier steht nirgends etwas davon. "count" zählt daher munter unendlich weiter, d.h. bis zu "overflow" des Zahlenbereichs oder bis irgend etwas anderes Schreckliches passiert. Es sei dann bei "irgendwas..." steht eine Abbruchbedingung, die du nicht gepostet hast. Jedesmal, wenn bei einem dieser Durchläufe eine der if-Bedingungen erfüllt ist, wird die entsprechende Variable überschrieben, der alte Wert ist weg.
und nochmal zu elsif
könnte dieses beispiel auch so geschrieben werden
{ irgendwas.......
elsif ($var[$count] eq "pin_exp_day"){
$pin_exp_day = $val[$count];
}
elsif ($var[$count] eq "pin_exp_month"){
$pin_exp_month = $val[$count];
}
if ($var[$count] eq "pin_subscription"){
$pin_subscription = $val[$count];
}
else
{$count = $count + 1;}}
Nein.
Dein erstes "elsif" bezieht sich nicht auf ein vorausgegangenes "if" und ist daher ein Syntaxfehler.
Das zweite "elsif" bewirkt nur, dass nicht mehr getestet wird, ob ($var[$count] eq "pin_exp_month") wahr ist, wenn bereits feststeht, dass ($var[$count] eq "pin_exp_day") wahr ist. Es schadet also nicht, hier elsif zu nehmen.
Vor "count" darf keinesfalls "else" stehen, sonst bleibt "count" unverändert und beim nächsten Schleifendurchlauf ist die Situation unverändert. Das bedeutet, es gibt dadurch eine "unendliche" Schleife, der Programm "hängt" und muß von außen abgebrochen werden.
Das "endif" in VB-Script und etlichen anderen Sprachen (z.B. PASCAL) hat nichts damit zu tun! Dort gibt es die geschweiften Klammern { } nicht: "then" ersetzt die öffnende Klammer { nach "if" oder "elseif" und "endif" ersetzt die zugehörige schließende Klammer } .
Gruß
Hans35