Bedingt (Computerprogrammierung) – Wikipedia
![](https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/If-Then-Else-diagram.svg/220px-If-Then-Else-diagram.svg.png)
![](https://upload.wikimedia.org/wikipedia/commons/thumb/4/4d/IF-THEN-ELSE-END_flowchart.svg/220px-IF-THEN-ELSE-END_flowchart.svg.png)
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.
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:
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 If
erwartet es eine boolesche Bedingung – zum Beispiel x > 0
Dies 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 if
Es 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=0
… else if x=1
… else 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))
- true akzeptiert bis zu zwei Argumente. Sobald beide angegeben sind (siehe Currying), wird das erste angegebene Argument zurückgegeben.
- false akzeptiert bis zu zwei Argumente. Sobald beide angegeben sind (siehe Currying), wird das zweite angegebene Argument zurückgegeben.
- 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.
- ^ 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.
- 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. - 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.
- ^ 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. - 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
” AusdruckCASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 [...] ELSE exprDflt END
funktioniert wieif ... else if ... else
, während ein “einfachCASE
” Ausdruck:CASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt END
funktioniert wie eine switch-Anweisung. Einzelheiten und Beispiele finden Sie unter Case (SQL). - ^ Arithmetik
if
ist in Fortran 90 veraltet.
Siehe auch[edit]
Verweise[edit]
Externe Links[edit]
![]() |
Nachsehen dann oder sonst in Wiktionary, dem kostenlosen Wörterbuch. |
Recent Comments