CK1: If-Konflikte

Beitrag lesen

Hi Calocybe,

Schade, schon wieder falsch. ;-) In Perl duerfen die
geschweiften Klammern naemlich nicht einfach so weggelassen
werden wie in JS oder C. Der Perl-Autor meinte, dadurch
irgendeinen Konflikt vermeiden zu koennen, der angeblich
auftreten kann, wenn man die Klammern weglassen koennte.

Der Konflikt liegt in der Zuordnung der else-Sätze. Zur Anschauung:

if (ausdruck1)
  if(ausdruck2)
    tu_was;
else
  tu_was_anderes;

Von der Einrückung her ist das klar, wenn der 1. if-Satz NICHT
erfüllt ist, dann soll else ausgeführt werden. Der Compiler aber
ignoriert die White-Space-Zeichen - er ordnet das else dem ersten
freien if zu, in diesem Fall if(ausdruck2).
Das würde dann so ausgeführt:
wenn ausdruck1, dann
   wenn ausdruck2, dann mach was, ansonsten mach was anderes.

Wenn man das umschreibt in

if(ausdruck1)
{
if (ausdruck2)
  { mach_was; }

} else {
mach_was_anderes;
}

ist das ganze absolut eindeutig. Das war der Konflikt, den der
Autor vermeiden wollte ,)

mfg
CK1

P.S.: ich weiß nicht, wie das in JavaScript/JScript ist, aber in C ist
es so ,)