Bedingt (Computerprogrammierung) – Wikipedia

before-content-x4

Wenn-Dann-Sonst-Flussdiagramm

Ein verschachteltes “Wenn-Dann-Sonst” -Flussdiagramm

In der Informatik bedingte Anweisungen, bedingte Ausdrücke und bedingte Konstrukte sind Merkmale einer Programmiersprache, die unterschiedliche Berechnungen oder Aktionen ausführen, je nachdem, ob ein vom Programmierer angegebener Boolescher Wert vorliegt Bedingung bewertet als wahr oder falsch. Abgesehen vom Fall der Verzweigungsprädikation wird dies immer erreicht, indem der Kontrollfluss basierend auf einer bestimmten Bedingung selektiv geändert wird.

after-content-x4

In imperativen Programmiersprachen wird üblicherweise der Begriff “bedingte Anweisung” verwendet, während in der funktionalen Programmierung die Begriffe “bedingter Ausdruck” oder “bedingtes Konstrukt” bevorzugt werden, da diese Begriffe alle unterschiedliche Bedeutungen haben.

Obwohl dynamischer Versand normalerweise nicht als bedingtes Konstrukt klassifiziert wird, ist es eine andere Möglichkeit, zur Laufzeit zwischen Alternativen zu wählen.

Wenn – dann (–else)[edit]

Das if–then konstruieren (manchmal genannt if–then–else) ist in vielen Programmiersprachen verbreitet. Obwohl die Syntax von Sprache zu Sprache unterschiedlich ist, sieht die Grundstruktur (in Pseudocode-Form) folgendermaßen aus:

If (boolean condition) Then
    (consequent)
Else
    (alternative)
End If

Zum Beispiel:

after-content-x4
If stock=0 Then
    message= order new stock
Else
    message= there is stock
End If

Im obigen Beispielcode wird der Teil durch dargestellt (Boolesche Bedingung) stellt eine Bedingung dar Ausdruckmit einem inneren Wert (z. B. kann er durch einen der Werte ersetzt werden True oder False) aber ohne intrinsische Bedeutung. Im Gegensatz dazu ist die Kombination dieses Ausdrucks, der If und Then es umgeben, und die Folge, die danach folgt, bilden eine Bedingung Erklärungmit intrinsischer Bedeutung (z. B. Ausdruck einer kohärenten logischen Regel), aber ohne intrinsischen Wert.

Wenn ein Dolmetscher eine findet Iferwartet es eine boolesche Bedingung – zum Beispiel x > 0Dies bedeutet, dass “die Variable x eine Zahl enthält, die größer als Null ist” – und bewertet diese Bedingung. Wenn die Bedingung ist true, die Aussagen nach dem then ausgeführt werden. Andernfalls wird die Ausführung im folgenden Zweig fortgesetzt – entweder im else Block (was normalerweise optional ist) oder wenn es keine gibt else Zweig, dann nach dem end If.

Nachdem einer der Zweige ausgeführt wurde, kehrt die Steuerung zu dem Punkt nach dem zurück end If.

In frühen Programmiersprachen, insbesondere einigen Dialekten von BASIC in den 1980er Jahren, waren Heimcomputer ein if–then Anweisung konnte nur enthalten GOTO Anweisungen (entspricht einer Verzweigungsanweisung). Dies führte zu einem schwer lesbaren Programmierstil, der als Spaghetti-Programmierung bekannt ist, wobei Programme in diesem Stil aufgerufen werden Spaghetti-Code. Infolgedessen strukturierte Programmierung, die es ermöglicht, (praktisch) beliebige Anweisungen in Anweisungsblöcken innerhalb eines zu platzieren if Aussage, die an Popularität gewann, bis sie selbst in den meisten BASIC-Programmierkreisen zur Norm wurde. Solche Mechanismen und Prinzipien basierten auf der älteren, aber fortgeschritteneren ALGOL-Sprachfamilie, und ALGOL-ähnliche Sprachen wie Pascal und Modula-2 beeinflussten viele Jahre lang moderne BASIC-Varianten. Während es nur während der Verwendung möglich ist GOTO Aussagen in if–then Anweisungen zum Schreiben von Programmen, die kein Spaghetti-Code sind und genauso gut strukturiert und lesbar sind wie Programme, die in einer strukturierten Programmiersprache geschrieben sind. Strukturierte Programmierung erleichtert dies und erzwingt dies. Strukturiert if–then–else Anweisungen wie das obige Beispiel sind eines der Schlüsselelemente der strukturierten Programmierung und in den gängigsten Programmiersprachen auf hoher Ebene wie C, Java, JavaScript und Visual Basic enthalten.

Eine Feinheit ist, dass die optionale else-Klausel in vielen Sprachen bedeutet, dass die kontextfreie Grammatik nicht eindeutig ist, da verschachtelte Bedingungen auf verschiedene Arten analysiert werden können. Speziell,

if a then if b then s else s2

kann analysiert werden als

if a then (if b then s) else s2

oder

if a then (if b then s else s2)

je nachdem ob die else ist mit dem ersten verbunden if oder zweitens if. Dies ist als “Dangling else” -Problem bekannt und wird je nach Sprache auf verschiedene Arten gelöst.

Sonst wenn[edit]

Durch die Nutzung else ifEs ist möglich, mehrere Bedingungen zu kombinieren. Es werden nur die Anweisungen ausgeführt, die auf die erste Bedingung folgen, die sich als wahr herausstellt. Alle anderen Anweisungen werden übersprungen.

if condition then
   --statements
elseif condition then
    -- more statements
elseif condition then
    -- more statements;
...
else
    -- other statements;
end if;

Zum Beispiel für einen Shop, der 30% Rabatt für einen Artikel bietet:

if discount < 11% then
    print (you have to pay $30)
elseif discount<21% then
    print (you have to pay $20)
elseif discount<31% then
    print (you have to pay $10)
end if;

Die Aussagen von elseif, in Ada, ist einfach syntaktischer Zucker für else gefolgt von if. In Ada ist der Unterschied, dass nur einer end if wird benötigt, wenn man verwendet elseif Anstatt von else gefolgt von if. PHP verwendet die elseif Stichwort[1] sowohl für die geschweiften Klammern als auch für die Doppelpunktsyntax. Perl liefert das Schlüsselwort elsif um die große Anzahl von Zahnspangen zu vermeiden, die von mehreren benötigt würden if und else Aussagen. Python verwendet das spezielle Schlüsselwort elif weil die Struktur eher durch Einrückung als durch geschweifte Klammern gekennzeichnet ist, ist eine wiederholte Verwendung von else und if würde nach jeder Bedingung eine erhöhte Einrückung erfordern. Einige Implementierungen von BASIC, wie z. B. Visual Basic,[2] verwenden ElseIf auch. Ebenso die früheren UNIX-Shells (später bis zur POSIX-Shell-Syntax zusammengefasst[3]) Verwenden Sie auch elif, aber wählen Sie zwischen Leerzeichen, Zeilenumbrüchen oder beidem.

In vielen Sprachen, die direkter von Algol abstammen, wie Algol68, Simula, Pascal, BCPL und C, ist diese spezielle Syntax für die else if Das Konstrukt ist weder vorhanden noch in den vielen syntaktischen Ableitungen von C wie Java, ECMAScript usw. vorhanden. Dies funktioniert, weil in diesen Sprachen keine Single Aussage (in diesem Fall if cond…) kann einer Bedingung folgen, ohne in einem Block eingeschlossen zu sein.

Diese Designauswahl hat in diesem Code leichte “Kosten” else if Der Zweig fügt effektiv eine zusätzliche Verschachtelungsebene hinzu, was den Job für einige Compiler (oder deren Implementierer) kompliziert, die beliebig lange analysieren und implementieren müssen else if Ketten rekursiv.

Wenn alle Begriffe in der Folge von Bedingungen den Wert eines einzelnen Ausdrucks testen (z. if x=0else if x=1else if x=2…), dann ist eine Alternative die switch-Anweisung, auch case-Anweisung oder select-Anweisung genannt. Umgekehrt können diese in Sprachen, die keine switch-Anweisung haben, durch eine Folge von erzeugt werden else if Aussagen.

Wenn – dann – sonst Ausdrücke[edit]

Unterstützung für viele Sprachen wenn Ausdrücke, die if-Anweisungen ähneln, aber als Ergebnis einen Wert zurückgeben. Sie sind also wahre Ausdrücke (die einen Wert ergeben), keine Aussagen (die im Kontext eines Wertes möglicherweise nicht zulässig sind).

Familie Algol[edit]

ALGOL 60 und einige andere Mitglieder der ALGOL-Familie erlauben if–then–else als Ausdruck:

  myvariable := if x > 20 then 1 else 2

Lisp Dialekte[edit]

In Dialekten von Lisp – Schema, Schläger und Common Lisp – Die erste davon wurde in hohem Maße von ALGOL inspiriert:

;; Scheme
(define myvariable (if (> x 12) 1 2))   ; Assigns 'myvariable' to 1 or 2, depending on the value of 'x'
;; Common Lisp
(let ((x 10))
  (setq myvariable (if (> x 12) 2 4)))  ; Assigns 'myvariable' to 2

Haskell[edit]

In Haskell 98 gibt es nur eine wenn Ausdruck, Nein if-Anweisung, und die else Teil ist obligatorisch, da jeder Ausdruck einen Wert haben muss.[4] Logik, die mit Bedingungen in anderen Sprachen ausgedrückt wird, wird normalerweise mit Mustervergleich in rekursiven Funktionen ausgedrückt.

Da Haskell faul ist, ist es möglich, Kontrollstrukturen zu schreiben, wie z wennals gewöhnliche Ausdrücke; Die faule Bewertung bedeutet, dass ein wenn Funktion kann nur den Zustand und den richtigen Zweig bewerten (wobei eine strenge Sprache alle drei bewerten würde). Es kann so geschrieben werden:[5]

if' :: Bool -> a -> a -> a
if' True x _ = x
if' False _ y = y

C-ähnliche Sprachen[edit]

C- und C-ähnliche Sprachen haben einen speziellen ternären Operator (? 🙂 für bedingte Ausdrücke mit einer Funktion, die durch eine Vorlage wie diese beschrieben werden kann:

condition ? evaluated-when-true : evaluated-when-false

Dies bedeutet, dass es im Gegensatz zu if-Anweisungen in C-ähnlichen Sprachen in Ausdrücke eingefügt werden kann:

my_variable = x > 10 ? "foo" : "bar";  // In C-like languages

was mit der Algol-Familie verglichen werden kann, wenn – dann – sonst Ausdrücke (im Gegensatz zu a Erklärung) (und ähnlich unter anderem in Ruby und Scala).

Um dasselbe mit einer if-Anweisung zu erreichen, würde dies mehr als eine Codezeile erfordern (unter typischen Layoutkonventionen) und “my_variable” zweimal erwähnen müssen:

if (x > 10)
    my_variable = "foo";
else
    my_variable = "bar";

Einige argumentieren, dass die explizite if / then-Anweisung leichter zu lesen ist und möglicherweise zu effizienterem Code kompiliert werden kann als der ternäre Operator.[6] während andere argumentieren, dass prägnante Ausdrücke leichter zu lesen sind als Aussagen, die über mehrere Zeilen mit Wiederholungen verteilt sind.

Kleine Basis[edit]

x = TextWindow.ReadNumber()
If (x > 10) Then
    TextWindow.WriteLine("My variable is named 'foo'.")
Else
    TextWindow.WriteLine("My variable is named 'bar'.")
EndIf

Wenn der Benutzer das Programm ausführt, erscheint zunächst ein Cursor, der darauf wartet, dass der Leser eine Zahl eingibt. Wenn diese Zahl größer als 10 ist, wird der Text “Meine Variable heißt ‘foo’.” wird auf dem Bildschirm angezeigt. Wenn die Zahl kleiner als 10 ist, wird die Meldung “Meine Variable heißt ‘bar'” angezeigt. wird auf dem Bildschirm gedruckt.

Visual Basic[edit]

In Visual Basic und einigen anderen Sprachen wird eine Funktion aufgerufen IIf wird bereitgestellt, der als bedingter Ausdruck verwendet werden kann. Es verhält sich jedoch nicht wie ein wahrer bedingter Ausdruck, da sowohl der wahre als auch der falsche Zweig immer ausgewertet werden. Es ist nur so, dass das Ergebnis eines von ihnen weggeworfen wird, während das Ergebnis des anderen von der IIf-Funktion zurückgegeben wird.

Tcl[edit]

In Tcl if ist kein Schlüsselwort, sondern eine Funktion (in Tcl als Befehl oder bekannt proc). Zum Beispiel

if {$x > 10} {
   puts "Foo!"
}

ruft eine Funktion mit dem Namen auf if Übergeben von 2 Argumenten: Das erste ist die Bedingung und das zweite ist der wahre Zweig. Beide Argumente werden als Zeichenfolgen übergeben (in Tcl ist alles in geschweiften Klammern eine Zeichenfolge).

Im obigen Beispiel wird die Bedingung vor dem Aufrufen der Funktion nicht ausgewertet. Stattdessen erfolgt die Umsetzung der if Die Funktion empfängt die Bedingung als Zeichenfolgenwert und ist dafür verantwortlich, diese Zeichenfolge als Ausdruck im Bereich des Aufrufers auszuwerten.[7]

Ein solches Verhalten ist durch Verwendung möglich uplevel und expr Befehle:

Uplevel ermöglicht die Implementierung neuer Steuerungskonstrukte als Tcl-Prozeduren (z. B. könnte Uplevel verwendet werden, um das while-Konstrukt als Tcl-Prozedur zu implementieren).[8]

weil if ist eigentlich eine Funktion, die auch einen Wert zurückgibt:

Der Rückgabewert des Befehls ist das Ergebnis des ausgeführten Körperskripts oder einer leeren Zeichenfolge, wenn keiner der Ausdrücke ungleich Null war und kein bodyN vorhanden war.[9]

Rost[edit]

In Rust, if ist immer ein Ausdruck. Es wird nach dem Wert der jeweils ausgeführten Verzweigung oder nach dem Einheitentyp ausgewertet () wenn keine Verzweigung ausgeführt wird. Wenn eine Verzweigung keinen Rückgabewert bereitstellt, wird sie ausgewertet () standardmäßig. Um die if Der Typ des Ausdrucks ist zur Kompilierungszeit bekannt. Jeder Zweig muss einen Wert desselben Typs ergeben. Aus diesem Grund kann ein else Zweig ist effektiv obligatorisch, es sei denn, die anderen Zweige bewerten zu (), weil ein if ohne ein else kann immer bewerten () standardmäßig.[10]

// Assign my_variable some value, depending on the value of x
let my_variable = if x > 20 {
    1
} else {
    2
};

// This variant will not compile because 1 and () have different types
let my_variable = if x > 20 {
    1
};

// Values can be omitted when not needed
if x > 20 {
    println!("x is greater than 20");
}

Arithmetik wenn[edit]

Bis Fortran 77 hat die Sprache Fortran eine “arithmetische if” -Anweisung, die auf halbem Weg zwischen einer berechneten IF- und einer case-Anweisung liegt, basierend auf der Trichotomie x <0, x = 0, x > 0. Dies war die früheste bedingte Aussage in Fortran:[11]

IF (e) label1, label2, label3

Wobei e ein numerischer Ausdruck ist (nicht unbedingt eine ganze Zahl); das ist äquivalent zu

IF (e .LT. 0) GOTO label1
IF (e .EQ. 0) GOTO label2
GOTO label3

Weil diese arithmetische IF gleichbedeutend mit mehreren ist GOTO Anweisungen, die an eine beliebige Stelle springen können, gelten als unstrukturierte Steueranweisung und sollten nicht verwendet werden, wenn strukturiertere Anweisungen verwendet werden können. In der Praxis wurde beobachtet, dass die meisten Arithmetik IF Anweisungen verwiesen auf die folgende Anweisung mit einem oder zwei der Bezeichnungen.

Dies war die einzige bedingte Steueranweisung in der ursprünglichen Implementierung von Fortran auf dem IBM 704-Computer. Auf diesem Computer hatte der Test-and-Branch-Op-Code drei Adressen für diese drei Zustände. Andere Computer hätten “Flag” -Register wie positiv, null, negativ, gerade, Überlauf, Übertrag, die mit den letzten arithmetischen Operationen verbunden sind, und würden Anweisungen wie “Verzweigen, wenn der Akkumulator negativ ist” und “Verzweigen, wenn der Akkumulator null” oder ähnliches verwenden. Beachten Sie, dass der Ausdruck ausgewertet wird nur einmalund in Fällen wie der Ganzzahlarithmetik, in denen ein Überlauf auftreten kann, würden auch die Überlauf- oder Übertragsflags berücksichtigt.

Objektorientierte Implementierung in Smalltalk[edit]

Im Gegensatz zu anderen Sprachen ist die bedingte Anweisung in Smalltalk kein Sprachkonstrukt, sondern in der Klasse definiert Boolean als abstrakte Methode, die zwei Parameter verwendet, beide Abschlüsse. Boolean hat zwei Unterklassen, True und False, die beide die Methode definieren, True nur die erste Schließung ausführen, False nur den zweiten Abschluss ausführen.[12]

var = condition 
    ifTrue: [ 'foo' ]
    ifFalse: [ 'bar' ]

JavaScript[edit]

Zwei Beispiele in JavaScript:

if (Math.random() < 0.5) {
  console.log("You got Heads!");
} else {
  console.log("You got Tails!");
}

[clarification needed]

var x = Math.random();
if (x < 1/3) {
  console.log("One person won!");
} else if (x < 2/3) {
  console.log("Two people won!");
} else {
  console.log("It's a three-way tie!");
}

[clarification needed]

Lambda-Kalkül[edit]

In der Lambda-Rechnung kann das Konzept einer Wenn-Dann-Sonst-Bedingung mit den folgenden Ausdrücken ausgedrückt werden:

true = λx. λy. x
false = λx. λy. y
ifThenElse = (λc. λx. λy. (c x y))
  1. true akzeptiert bis zu zwei Argumente. Sobald beide angegeben sind (siehe Currying), wird das erste angegebene Argument zurückgegeben.
  2. false akzeptiert bis zu zwei Argumente. Sobald beide angegeben sind (siehe Currying), wird das zweite angegebene Argument zurückgegeben.
  3. ifThenElse akzeptiert bis zu drei Argumente und wenn alle angegeben sind, übergibt es sowohl das zweite als auch das dritte Argument an das erste Argument (eine Funktion, die zwei Argumente angibt und ein Ergebnis erzeugt). Wir erwarten, dass ifThenElse nur true oder false als Argument verwendet. Beide projizieren die angegebenen zwei Argumente auf ihr bevorzugtes einzelnes Argument, das dann zurückgegeben wird.

Hinweis: Wenn ifThenElse übergeben wird, fungieren zwei Funktionen als linke und rechte Bedingung. es ist notwendig Übergeben Sie auch ein leeres Tupel () an das Ergebnis von ifThenElse, um die ausgewählte Funktion tatsächlich aufzurufen. Andernfalls gibt ifThenElse nur das Funktionsobjekt zurück, ohne aufgerufen zu werden.

In einem System, in dem Zahlen ohne Definition verwendet werden können (wie Lisp, traditionelle Papiermathematik usw.), kann das Obige als einzelner Abschluss unten ausgedrückt werden:

 ((λtrue. λfalse. λifThenElse.
     (ifThenElse true 2 3)
 )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))

Hier sind true, false und ifThenElse an ihre jeweiligen Definitionen gebunden, die am Ende ihres Blocks an ihren Gültigkeitsbereich übergeben werden.

Eine funktionierende JavaScript-Analogie (bei der nur Funktionen einer einzelnen Variablen für die Genauigkeit verwendet werden) lautet:

 var computationResult = ((_true => _false => _ifThenElse => 
     _ifThenElse(_true)(2)(3) 
 )(x => y => x)(x => y => y)(c => x => y => c(x)(y)));

Der obige Code mit multivariablen Funktionen sieht folgendermaßen aus:

 var computationResult = ((_true, _false, _ifThenElse) =>
     _ifThenElse(_true, 2, 3)
 )((x, y) => x, (x, y) => y, (c, x, y) => c(x, y));

Eine andere Version des früheren Beispiels ohne ein System, bei dem Zahlen angenommen werden, ist unten.

Das erste Beispiel zeigt den ersten Zweig, während das zweite Beispiel den zweiten Zweig zeigt.

 ((λtrue. λfalse. λifThenElse.
     (ifThenElse true (λFirstBranch. FirstBranch) (λSecondBranch. SecondBranch))
 )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))

 ((λtrue. λfalse. λifThenElse.
     (ifThenElse false (λFirstBranch. FirstBranch) (λSecondBranch. SecondBranch))
 )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))

Smalltalk verwendet eine ähnliche Idee für seine wahren und falschen Darstellungen, wobei True und False Singleton-Objekte sind, die auf Nachrichten ifTrue / ifFalse unterschiedlich reagieren.

Haskell verwendete dieses genaue Modell für seinen Booleschen Typ, aber zum Zeitpunkt des Schreibens verwenden die meisten Haskell-Programme syntaktisches Zucker-Konstrukt “if a then b else c”, das im Gegensatz zu ifThenElse nur komponiert, wenn es entweder in eine andere Funktion eingeschlossen oder neu implementiert wird wie im Abschnitt The Haskell dieser Seite gezeigt.

Case- und Switch-Anweisungen[edit]

Switch-Anweisungen (in einigen Sprachen, case Aussagen oder Mehrwegverzweigungen) vergleichen Sie einen bestimmten Wert mit bestimmten Konstanten und ergreifen Sie Maßnahmen gemäß der ersten übereinstimmenden Konstante. In der Regel ist vorgesehen, dass eine Standardaktion (“else”, “else”) ausgeführt wird, wenn keine Übereinstimmung erfolgreich ist. Switch-Anweisungen können Compiler-Optimierungen ermöglichen, z. B. Nachschlagetabellen. In dynamischen Sprachen sind die Fälle möglicherweise nicht auf konstante Ausdrücke beschränkt und erstrecken sich möglicherweise auf den Mustervergleich, wie im Shell-Skript-Beispiel rechts, in dem ‘*)’ den Standardfall als regulären Ausdruck implementiert, der mit einer beliebigen Zeichenfolge übereinstimmt.

Pascal: C: Shell-Skript:
case someChar of
  'a': actionOnA;
  'x': actionOnX;
  'y','z':actionOnYandZ;
  else actionOnNoMatch;
end;
switch (someChar) {
  case 'a': actionOnA; break;
  case 'x': actionOnX; break;
  case 'y':
  case 'z': actionOnYandZ; break;
  default: actionOnNoMatch;
}
case $someChar in 
   a)    actionOnA; ;;
   x)    actionOnX; ;;
   [yz]) actionOnYandZ; ;;
  *)     actionOnNoMatch  ;;
esac

Mustervergleich[edit]

Der Mustervergleich kann als Alternative zu beiden angesehen werden wenn – dann – sonst, und Fall Aussagen. Es ist in vielen Programmiersprachen mit funktionalen Programmierfunktionen verfügbar, wie Wolfram Language, ML und vielen anderen. Hier ist ein einfaches Beispiel in der OCaml-Sprache:

match fruit with
| "apple" -> cook pie
| "coconut" -> cook dango_mochi
| "banana" -> mix;;

Die Kraft des Mustervergleichs ist die Fähigkeit dazu prägnant passen nicht nur Aktionen, sondern auch Werte zu Datenmustern. Hier ist ein in Haskell geschriebenes Beispiel, das diese beiden Funktionen veranschaulicht:

map _ []      = []
map f (h : t) = f h : map f t

Dieser Code definiert eine Funktion Karte, der das erste Argument (eine Funktion) auf jedes der Elemente des zweiten Arguments (eine Liste) anwendet und die resultierende Liste zurückgibt. Die beiden Zeilen sind die beiden Definitionen der Funktion für die beiden in diesem Fall möglichen Arten von Argumenten – eine, bei der die Liste leer ist (geben Sie einfach eine leere Liste zurück), und die andere, bei der die Liste nicht leer ist.

Mustervergleich ist streng genommen nicht immer ein Auswahlkonstrukt, da es in Haskell möglich ist, nur eine Alternative zu schreiben, die garantiert immer übereinstimmt – in dieser Situation wird es nicht als Auswahlkonstrukt verwendet, sondern lediglich als Möglichkeit, Namen an Werte zu binden. Es wird jedoch häufig als Auswahlkonstrukt in den Sprachen verwendet, in denen es verfügbar ist.

Hash-basierte Bedingungen[edit]

In Programmiersprachen mit assoziativen Arrays oder vergleichbaren Datenstrukturen wie Python, Perl, PHP oder Objective-C ist es idiomatisch, diese zur Implementierung der bedingten Zuweisung zu verwenden.[13]

pet = raw_input("Enter the type of pet you want to name: ")
known_pets = {
    "Dog": "Fido",
    "Cat": "Meowsles",
    "Bird": "Tweety",
}
my_name = known_pets[pet]

In Sprachen, die anonyme Funktionen haben oder die es einem Programmierer ermöglichen, einer Variablenreferenz eine benannte Funktion zuzuweisen, kann der bedingte Fluss mithilfe eines Hash als Versandtabelle implementiert werden.

Prädikation[edit]

Eine Alternative zu bedingten Verzweigungsbefehlen ist die Prädikation. Die Prädikation ist eine Architekturfunktion, mit der Anweisungen bedingt ausgeführt werden können, anstatt den Kontrollfluss zu ändern.

Querverweis des Auswahlsystems[edit]

Diese Tabelle bezieht sich auf die aktuellste Sprachspezifikation jeder Sprache. Für Sprachen ohne Spezifikation wird auf die neueste offiziell veröffentlichte Implementierung verwiesen.

  1. ^ Dies bezieht sich auf den Mustervergleich als ein eindeutiges bedingtes Konstrukt in der Programmiersprache – im Gegensatz zur bloßen Unterstützung des String-Mustervergleichs, wie beispielsweise der Unterstützung regulärer Ausdrücke.
  2. 1 2 3 4 5 Das oft angetroffene else if In der C-Sprachfamilie sowie in COBOL und Haskell handelt es sich nicht um ein Sprachmerkmal, sondern um eine Reihe verschachtelter und unabhängiger Sprachen wenn dann sonst Anweisungen kombiniert mit einem bestimmten Quellcode-Layout. Dies bedeutet jedoch auch, dass in diesen Sprachen ein eindeutiges else-if-Konstrukt nicht wirklich benötigt wird.
  3. 1 2 In Haskell und F # ist ein separates Konstrukt mit konstanter Auswahl nicht erforderlich, da dieselbe Aufgabe mit dem Mustervergleich ausgeführt werden kann.
  4. ^ In einem Rubin case Konstrukt, regulärer Ausdrucksabgleich gehört zu den verfügbaren Alternativen zur bedingten Flusskontrolle. Ein Beispiel finden Sie unter diese Frage zum Stapelüberlauf.
  5. 1 2 SQL verfügt über zwei ähnliche Konstrukte, die beide Rollen erfüllen, die beide in SQL-92 eingeführt wurden. A “gesucht CASE” Ausdruck CASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 [...] ELSE exprDflt END funktioniert wie if ... else if ... else, während ein “einfach CASE” Ausdruck: CASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt END funktioniert wie eine switch-Anweisung. Einzelheiten und Beispiele finden Sie unter Case (SQL).
  6. ^ Arithmetik if ist in Fortran 90 veraltet.

Siehe auch[edit]

Verweise[edit]

Externe Links[edit]

after-content-x4