Entscheidungsoperation IF/else oder ?

#3391805
Lesenswert?

Das "?" ist kürzer!

Nachteil zu if/else-Konstrukten:

if()...
else if()...
else if()...
else if()...
-> so viele Fälle auf einer Ebene wie du brauchst

... <= (Bedingung)? Fall 1 (Bed. erfüllt) : Fall 2 (Bed. nicht erfüllt);
oder
... <= (Bedingung)? Fall 1 (Bed. erfüllt) : ((Bedingung 2)? Fall 2.1 : 
(Bedingung 3) Fall 3.1 ...;
-> nur 2 Fälle pro Entscheidungsebene, mehrere Fälle nur über 
Verschachtlung möglich.

Zusammenfassung:
? bei einfachen Ja/Nein-Abfragen praktischer
Moderator (Firma: Titel) Persönliche Seite #3392041
Lesenswert?

Daniel T. schrieb:
> Gibt es irgend einen Vorteils diese "?"?
In der Kürze liegt die Würze...

> Ich persönlich finde solchen Code nämlich sehr unschön.
Über Schönheit darf gestritten werden. Der ?-Operator gefällt mir schon 
in C sehr gut. In VHDL vermisse ich so was knackiges und kompaktes...

EDIT:
Hurra, ich hab ihn wieder gefunden, den 
Beitrag "Re: VHDL: 4Bit Hex -> ASCII" mit dem 
Fragezeichenoperator...  ;-)
Moderator #3392781
Lesenswert?

Trundle Trollkönig schrieb:
> -> nur 2 Fälle pro Entscheidungsebene, mehrere Fälle nur über
> Verschachtlung möglich.

Wenn du das als If-Else-Kette hinschreibst, ist diese ebenfalls
verschachtelt. Normalerweise würde sie so aussehen:
1
  if(Bedingung1) {
2
    Fall1;
3
  }
4
  else {
5
    if(Bedingung2) {
6
      Fall2;
7
    }
8
    else {
9
      if(Bedingung3) {
10
        Fall3;
11
      }
12
      else {
13
        if(Bedingung4) {
14
          Fall4;
15
        }
16
        else {
17
          Fall5;
18
        }
19
      }
20
    }
21
  }

Oft wird diese Verschachtelung etwas kaschiert, indem man überflüssige
Klammen und die Einrückung weglässt:
1
if (Bedingung1) Fall1;
2
else if (Bedingung2) Fall2;
3
else if (Bedingung3) Fall3;
4
else if (Bedingung4) Fall4;
5
else Fall5;

Entsprechendes kann man aber beim ?:-Operator ebenfalls machen:
1
Bedingung1 ? Fall1 :
2
Bedingung2 ? Fall2 : 
3
Bedingung3 ? Fall3 :
4
Bedingung4 ? Fall4 :
5
             Fall5 ;

Das sieht dann sogar noch etwas übersichtlicher aus als das Beispiel
davor.
#3393100
Lesenswert?

ich kann gerade nicht 100 prozentige Bestätigen ob
1
if(Bedingung1) {
2
    Fall1;
3
  }
4
  else {
5
    if(Bedingung2) {
6
      Fall2;
7
    }
8
    else {
9
      if(Bedingung3) {
10
        Fall3;
11
      }
12
      else {
13
        if(Bedingung4) {
14
          Fall4;
15
        }
16
        else {
17
          Fall5;
18
        }
19
      }
20
    }
21
  }

und
1
if (Bedingung1) Fall1;
2
else if (Bedingung2) Fall2;
3
else if (Bedingung3) Fall3;
4
else if (Bedingung4) Fall4;
5
else Fall5;

in verilog wirklich das gleiche ist???

beim ersten gibts es klar ne Priorisierung der Abfragen (ich will es 
jetzt nicht Sequenz nennen weil ja alles noch in einem Takt passieren 
kann).

und ich weiß nicht ob das bei Fall 2 ebenso ist, speziell wenn man 
Bedingungen betrachtet wo Bedinung 2 eine Untermenge von Bedingung 1 
oder so ist.

ich will nicht behaupten, das man mit beiden konstrukten nicht gleiches 
Verhalten herstellen kann, aber ob das immer so ist ohne nochmal was 
umzustellen keine ahnung...
Persönliche Seite #3393267
Lesenswert?

Trundle Trollkönig schrieb:
> ich kann gerade nicht 100 prozentige Bestätigen ob
> [beides] in verilog wirklich das gleiche ist???

Mal abgesehen, dass die entsprechende Verilog Syntax im ersten Fall 
natürlich etwas anders aussieht ist es das gleiche.

> beim ersten gibts es klar ne Priorisierung der Abfragen
> und ich weiß nicht ob das bei Fall 2 ebenso ist, speziell wenn man
> Bedingungen betrachtet wo Bedinung 2 eine Untermenge von Bedingung 1
> oder so ist.

Wenn die Syntese beweisen kann, dass zwei Fälle mutually exclusive 
sind, kann sie damit machen was sie will. Wenn nicht, muss priorisiert 
werden. Der Simulation ist das alles sowieso egal.

In SystemVerilog kann man mit unique if auch der Simulation bekannt 
geben, dass man keinen Prioritätsencoder haben möchte. Dann wird zur 
Laufzeit überprüft ob die Exclusivität der Fälle gegeben ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren