Donnerstag, 24. Juni 2010

If Abfrage mit Fragezeichen: (Bedingung) ? (falls true) : (falls false)

Hier mal schnell ein kurzer Post über eine Kurzform der if - else - Struktur in C# .Net, die ich auch im Programm aus dem vorigen Post verwendet habe.
Eine standardmäßige Verzweigung mit Wertzuweisung sieht in etwas so aus:

if (Bedingung)
{
Variable = "Bedingung erfüllt";
}
else
{
Variable = "Bedingung nicht erfüllt";
}

Diesen Code kann man auch kürzer schreiben, in dem man ein Fragezeichen (?) und einen Doppelpunkt (:) benutzt:

Variable = (Bedingung) ? "Bedingung erfüllt" : "Bedingung nicht erfüllt";

Hierbei wird Variable "Bedingung erfüllt" zugewiesen, wenn die Bedingung wahr ist, ansonsten "Bedingung nicht erfüllt".

Kommentare:

  1. kann man das auch für Methoden benutzen?
    if(Bool = true)
    {
    Methode;
    }
    else
    {
    ...
    }

    thx SomeONe

    AntwortenLöschen
  2. Hi,
    stimmt, für Methoden ist mir auch keine solche Kurzschreibweise bekannt.

    Man könnte natürlich z.B. eine Variable mit dieser Schreibweise setzen und dann eine allgemein Methode aufrufen, wo die entsprechenden Unteraufrufe getätigt werden, aber das trägt ja auch nicht unbedingt zur Leserlichkeit bei, bei Methoden sollte man also schon die "normale" Schreibweise verwenden

    AntwortenLöschen
  3. Das geht, solange die Methoden einen Return haben. void-Methoden lassen sich ja schnell anpassen..

    zB.
    bool dummy = (Bedingung) ? Methode1() : Methode2();

    oder ohne else:
    bool dummy = (Bedingung) ? Methode1() : false;

    AntwortenLöschen
  4. Hallo,
    also ich benutze immer folgende (Kurz-)Schreibweise für Funktionen, wenn ihr das meint:

    bool myFunction
    {
    int b = 1;
    ...
    ...

    return (b != 1) ? true : false;
    }

    AntwortenLöschen
    Antworten
    1. Geht auch noch kürzer:

      return (b != 1);

      Löschen
    2. Eigentlich sollte es in einer objekt-orientierten Sprache wie C# keine Funktionen geben.

      Es fehlt noch der Parameter-Teil im Methodenkopf.

      bool MyMethod([parameter])
      {
      int b;
      ...
      return (b != 0);
      }

      Wenn man weiß daß der Wert b aus definierter Quelle gesetzt wird, muss man ihn nicht initialisieren.

      Löschen
  5. Ich habe auch eine Frage:
    wenn ich beim Programmieren von Mikrocontrollern folgendes will:
    if(val)
    {
    PORTD |= _BV(PD3);
    }
    else
    {
    PORTD &= ~_BV(PD3);
    }
    wie muss ich das in der Kurzschreibweise machen? Geht das überhaupt? Weil das |= bzw. &= kann ich nicht in die Schreibweise einbinden oder?
    Danke für Eure Hilfe!

    AntwortenLöschen
  6. Also du hast das Problem, dass du keine direkte Zuweisung machst sondern ein |= oder &=. Da das allerdings nur Kurzschreibweisen sind für:
    PORTD = PORTD | _BV(PD3);
    und
    PORTD = PORTD & (~_BV(PD3));
    kannst du das ganz einfach so machen:
    PORTD = val ? (PORTD | _BV(PD3)) : ( PORTD & (~_BV(PD3)))
    also einfach die Kurzschreibweise der |= und &= ausgeschrieben.

    AntwortenLöschen
  7. Schreiben Sie die Bedingung ohne Vergleich.

    if (teiler_paar (i,j) == true) {
    Console.WriteLine(i + "und" + j);
    }

    Wie kann ich das machen? danke im Voraus

    AntwortenLöschen
    Antworten
    1. Hallo, ich denke, das ist mit dem ? - Operator nicht möglich - allerdings hat eine normale if - Abfrage ja auch keine Nachteile.

      Löschen