Forum: Mikrocontroller und Digitale Elektronik verschalchtelung mit else if


von Ingo L. (grobian)


Lesenswert?

ist folgende Anweisung möglich ?

if (bedingung)
   {
    anweisung;
   }
else
   {
       if(bedingung1)
          {
           andere_Anweiseung;
          }
       else
          {
           noch_ne_andere_Anweisung;
          }
    }

von if else (Gast)


Lesenswert?

Ja.

von Michael R. (dj_motionx)


Lesenswert?

Ja klar.
L.g. Michi

von Karl H. (kbuchegg)


Lesenswert?

Wenn deine Struktur genau so ist, dann kann man das ganze optisch auch 
so schreiben
1
  if (bedingung)
2
  {
3
    anweisung;
4
  }
5
6
  else if (bedingung1)
7
  {
8
    andere_Anweiseung;
9
  }
10
11
  else
12
  {
13
    noch_ne_andere_Anweisung;
14
  }

dann vermeidet man die großen Schachtelungstiefen von ineinander 
geschachtelten Blöcken, die ansonsten den Code ganz schnell an den 
rechten Bildschirmrand treiben.

Für viele ist diese Schreibweise auch etwas logischer und 
durchsichtiger. Da steht schön untereinander:
Es gibt 3 Fälle. Wenn A vorliegt, dann mach das. Wenn B vorliegt, dann 
mach dieses. In allen anderen Fällen mach ganz was anderes.


Syntaktisch und semantisch (also bedeutungsmässig) ist es aber 100% 
gleichwertig zu deiner Schachtelung, wie man sich ganz leicht durch 
überlegen, ob die Klammerung beim ersten else notwendig ist und etwas 
umformatieren überzeugen kann.

von if else (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Syntaktisch und semantisch (also bedeutungsmässig) ist es aber 100%
> gleichwertig zu deiner Schachtelung.

Im Original folgt dem ersten else ein Anweisungsblock. In deiner 
Variante nur eine einfache Anweisung.

von if else (Gast)


Lesenswert?

Ah, hast es selber gemerkt und deinen Beitrag editiert.

von P. S. (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Da steht schön untereinander:
> Es gibt 3 Fälle. Wenn A vorliegt, dann mach das. Wenn B vorliegt, dann
> mach dieses. In allen anderen Fällen mach ganz was anderes.

Ob es 3 Faelle sind oder 2 Faelle von denen sich einer nochmal aufteilt, 
kommt auf die jeweilige Situation an. Und je nachdem ist die eine oder 
andere Variante logischer, so pauschal kann man das nicht sagen.

von Karl H. (kbuchegg)


Lesenswert?

Peter Stegemann schrieb:
> Karl Heinz Buchegger schrieb:
>
>> Da steht schön untereinander:
>> Es gibt 3 Fälle. Wenn A vorliegt, dann mach das. Wenn B vorliegt, dann
>> mach dieses. In allen anderen Fällen mach ganz was anderes.
>
> Ob es 3 Faelle sind oder 2 Faelle von denen sich einer nochmal aufteilt,
> kommt auf die jeweilige Situation an. Und je nachdem ist die eine oder
> andere Variante logischer, so pauschal kann man das nicht sagen.

Hast recht. Da hab ich nicht gut genug drüber nachgedacht. So pauschal 
sollte ich das tatsächlich nicht behaupten.

von Frank (Gast)


Lesenswert?

Ich finde ja das case-select-Statement viel übersichtlicher. Je nach 
Programmierspreche ist die Syntax im Detail etwas anders, in Realbasic 
ist sie so:

select case x (z.B. ein Integer)

case 1

 ... (wenn x=1 ist)

case 2

 ... (wenn x=2 ist)

case 76

 ... usw.

else

 (für alle nicht aufgeführten Fälle)

end select

Geht auch mit anderen Datentypen, z.B. Strings.

von switch (Gast)


Lesenswert?

Frank schrieb:
> Ich finde ja das case-select-Statement viel übersichtlicher.

Das ist aber nicht vergleichbar.

von P. S. (Gast)


Lesenswert?

switch schrieb:
> Frank schrieb:
>> Ich finde ja das case-select-Statement viel übersichtlicher.
> Das ist aber nicht vergleichbar.

Beides sind Fallunterscheidungen. Dass die in C technisch betrachtet 
voellig unterschiedlich sind, braucht den Basic-Entwickler nicht zu 
kuemmern.

von switch (Gast)


Lesenswert?

???

Bei case habe ich nur ein Ergebnis und verzweige je nach Wert.
Bei jedem if erhalte ich ein neues völlig unabhängiges Ergebnis.

von P. S. (Gast)


Lesenswert?

switch schrieb:
> ???

Ja, so geht es mir auch gerade. Koenntest du mal ein Beispiel machen, 
was du meinst?

von switch (Gast)


Lesenswert?

switch (a * b)
  case 1:
    ...
  case 5:
    ...
  else
    ...

if ((a*b) = 5)
  ...
else if ((i+t) < k)
  ...
else
  ...

von horst (Gast)


Lesenswert?

ist möglich.

So wie du die Anweisungen gesetzt hast ist die Variante von KHB ein 
gleichwertiger Ersatz. In deiner Variante hast du aber noch zusätzliche 
Möglichkeiten Anweisungen zu verwenden.

z.B.:
1
struct Person ich;
2
...
3
if (ich.betrunken)
4
{
5
    falleUnternTisch (ich);
6
}
7
else
8
{
9
    rufe (Bedienung);    //bei dir keine Anweisung an dieser stelle
10
11
    if (ich.Biertrinker)
12
    {
13
        bestelle (Stiegl);
14
    }
15
    else
16
    {
17
        bestelle (Wieselburger);
18
    }
19
20
    aufGetränkFreuen (ich);    //und auch hier nicht
21
}
22
...

von switch (Gast)


Lesenswert?

horst schrieb:
> So wie du die Anweisungen gesetzt hast ist die Variante von KHB ein
> gleichwertiger Ersatz.

Das liegt schon weiter hinter uns. KHB hat den Beitrag ja editiert.

Das Bsp. bezieht sich auf die Nachfrage von Peter S. und soll ihm den 
Unterschied zu case verdeutlichen: keep it simple!

von P. S. (Gast)


Lesenswert?

switch schrieb:

> Das Bsp. bezieht sich auf die Nachfrage von Peter S. und soll ihm den
> Unterschied zu case verdeutlichen: keep it simple!

Ich kenne den Unterschied zwischen case und if in verschiedenen 
Sprachen. Natuerlich sind die unterschiedlich, aber die 
Anwendungsbereiche ueberschneiden sich je nach Sprache mehr oder weniger 
stark. Deswegen sind beide aber immer noch Fallunterscheidungen und 
daher durchaus vergleichbar - und eigentlich tust du gerade genau das, 
du vergleichst beide Konstrukte.

von Denker (Gast)


Lesenswert?

fette Logik, natürlich ist alles vergleichbar, Äpfel mit Birnen, ...

Es muss bei einem Vergelich ja auch keine Gemeinsammkeiten geben, lass 
das noch einmal sacken.

lg Denker

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.