Warunkowe (programowanie komputerowe) - Conditional (computer programming)
W informatyce , warunkowych (czyli instrukcji warunkowych , wyrażeń warunkowych i konstrukcji warunkowych ,) są język programowania poleceń do obsługi decyzje. W szczególności warunki warunkowe wykonują różne obliczenia lub akcje w zależności od tego, czy warunek logiczny zdefiniowany przez programistę ma wartość prawda, czy fałsz. Jeśli chodzi o przepływ sterowania , decyzja jest zawsze podejmowana przez selektywną zmianę strumienia sterowania na podstawie pewnego warunku (poza przypadkiem predykacji rozgałęzienia ).
Chociaż dynamiczne wysyłanie nie jest zwykle klasyfikowane jako konstrukcja warunkowa, jest to inny sposób wyboru między alternatywami w czasie wykonywania .
Terminologia
W imperatywnych językach programowania zwykle używa się terminu „ instrukcja warunkowa ”, podczas gdy w programowaniu funkcjonalnym preferowane są terminy „ wyrażenie warunkowe ” lub „konstrukcja warunkowa”, ponieważ wszystkie te terminy mają różne znaczenia.
Jeśli-to(-inaczej)
if–then
Konstrukt (czasami nazywany if–then–else
) jest powszechne w wielu językach programowania. Chociaż składnia różni się w zależności od języka, podstawowa struktura (w postaci pseudokodu ) wygląda tak:
If (boolean condition) Then
(consequent)
Else
(alternative)
End If
Na przykład:
If stock=0 Then
message= order new stock
Else
message= there is stock
End If
W powyższym kodzie przykładowym część reprezentowana przez (warunek logiczny) stanowi wyrażenie warunkowe , mające wewnętrzną wartość (np. można ją zastąpić dowolną z wartości True
lub False
), ale nie mające wewnętrznego znaczenia. W przeciwieństwie do tego, połączenie tego wyrażenia, If
i Then
otaczającego je oraz następnika, który następuje później, tworzy zdanie warunkowe , mające samoistne znaczenie (np. wyrażające spójną regułę logiczną), ale nie mające żadnej samoistnej wartości.
Kiedy interpreter znajdzie If
, oczekuje warunku logicznego – na przykład , x > 0
co oznacza, że „zmienna x zawiera liczbę większą od zera” – i ocenia ten warunek. Jeśli warunkiem jest true
, then
wykonywane są następujące instrukcje . W przeciwnym razie wykonanie jest kontynuowane w kolejnej gałęzi – albo w else
bloku (co zwykle jest opcjonalne), albo jeśli nie ma else
gałęzi, to po end If
.
Po wykonaniu którejkolwiek gałęzi, sterowanie powraca do punktu po end If
.
Historia i rozwój
We wczesnych językach programowania, zwłaszcza w niektórych dialektach języka BASIC w komputerach domowych z lat 80. , if–then
instrukcja mogła zawierać tylko GOTO
instrukcje (odpowiednik instrukcji gałęzi ). Doprowadziło to do trudnego do odczytania stylu programowania znanego jako programowanie spaghetti , z programami w tym stylu zwanym kodem spaghetti . W rezultacie, programowanie strukturalne , które pozwala na umieszczanie (praktycznie) dowolnych instrukcji w blokach instrukcji wewnątrz if
instrukcji, zyskało na popularności, aż stało się normą nawet w większości kręgów programowania BASIC. Takie mechanizmy i zasady były oparte na starszych, ale bardziej zaawansowanej Algol rodziny języków i ALGOL podobny języków takich jak Pascal i Modula-2 pod wpływem nowoczesnych BASIC warianty od wielu lat. Chociaż możliwe jest używanie tylko GOTO
instrukcji w if–then
instrukcjach do pisania programów, które nie są kodem spaghetti i są równie dobrze zorganizowane i czytelne, jak programy napisane w strukturalnym języku programowania, programowanie strukturalne ułatwia to i wymusza to. if–then–else
Instrukcje strukturalne , takie jak powyższy przykład, są jednym z kluczowych elementów programowania strukturalnego i są obecne w większości popularnych języków programowania wysokiego poziomu, takich jak C , Java , JavaScript i Visual Basic .
Problem „wisiącego innego”
Słowo else
kluczowe jest skierowane na konkretną if–then
instrukcję, która je poprzedza, ale w przypadku instrukcji zagnieżdżonych if–then
klasyczne języki programowania, takie jak ALGOL 60, miały trudności z określeniem, na którą konkretną instrukcję należy kierować. Bez wyraźnych granic, dla której instrukcja jest którą, else
słowo kluczowe może wskazywać na dowolną poprzednią if–then
instrukcję w gnieździe, zgodnie z analizą.
if a then if b then s else s2
można przeanalizować jako
if a then (if b then s) else s2
lub
if a then (if b then s else s2)
w zależności od tego, czy else
jest skojarzony z pierwszym if
czy drugim if
. Jest to znane jako problem zwisającego else i jest rozwiązywany na różne sposoby, w zależności od języka (zwykle za pomocą end if
instrukcji lub {...}
nawiasów).
Inaczej, jeśli
Używając else if
, można połączyć kilka warunków. Tylko instrukcje następujące po pierwszym warunku, który zostanie uznany za spełniony, zostaną wykonane. Wszystkie inne stwierdzenia zostaną pominięte.
if condition then
--statements
elseif condition then
-- more statements
elseif condition then
-- more statements;
...
else
-- other statements;
end if;
Na przykład dla sklepu oferującego aż 30% rabatu na towar:
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;
Wyrażenie elseif
, na przykład w języku Ada , jest po prostu cukrem składniowym for else
a następnie if
. W Adzie różnica polega na tym, że end if
potrzebny jest tylko jeden , jeśli używa się elseif
zamiast else
następującego po nim if
. PHP używa elseif
słowa kluczowego zarówno w nawiasach klamrowych, jak i składni dwukropka. Perl dostarcza słowo kluczowe, elsif
aby uniknąć dużej liczby nawiasów, które byłyby wymagane przez instrukcje multiple if
i else
. Python używa słowa kluczowego special, elif
ponieważ struktura jest oznaczana przez wcięcie, a nie nawiasy klamrowe, więc wielokrotne użycie else
i if
wymagałoby zwiększonego wcięcia po każdym warunku. Niektóre implementacje BASIC , takie jak Visual Basic , ElseIf
również używają . Podobnie, wcześniejsze powłoki UNIX (później zebrane do składni powłoki POSIX) również używają elif, ale dają możliwość rozgraniczenia za pomocą spacji, łamania linii lub obu.
Jednak w wielu językach bardziej bezpośrednio wywodzących się od Algola, takich jak Simula , Pascal , BCPL i C , ta specjalna składnia else if
konstruktu nie występuje, ani nie występuje w wielu syntaktycznych pochodnych języka C, takich jak Java , ECMAScript i wkrótce. Działa to, ponieważ w tych językach każda pojedyncza instrukcja (w tym przypadku ...) może następować po warunkowym bez zamykania w bloku.
if cond
Ten wybór projektu ma niewielki „koszt”. Każda else if
gałąź skutecznie dodaje dodatkowy poziom zagnieżdżenia. To komplikuje pracę kompilatorowi (lub osobom, które go piszą), ponieważ kompilator musi analizować i implementować else if
rekurencyjnie dowolnie długie łańcuchy.
Jeśli wszystkie warunki w sekwencji warunków warunkowych testują wartość pojedynczego wyrażenia (np. if x=0
... else if x=1
... else if x=2
...), alternatywą jest instrukcja switch , zwana również instrukcją case lub instrukcją select. I odwrotnie, w językach, które nie mają instrukcji switch, mogą one być tworzone przez sekwencję else if
instrukcji.
Wyrażenia „jeżeli-to-inne”
Wiele języków obsługuje wyrażenia if , które są podobne do instrukcji if, ale jako wynik zwracają wartość. Są to zatem wyrażenia prawdziwe (które dają w wyniku wartość), a nie oświadczenia (które mogą nie być dozwolone w kontekście wartości).
Rodzina Algoli
ALGOL 60 i niektórzy inni członkowie rodziny ALGOL pozwalają if–then–else
jako wyrażenie:
myvariable := if x > 20 then 1 else 2
Dialekty lispowe
W dialektach Lisp – Scheme , Racket i Common Lisp – z których pierwszy był w dużej mierze zainspirowany przez ALGOL:
;; 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
W Haskell 98 istnieje tylko wyrażenie if , no if statement , a else
część jest obowiązkowa, ponieważ każde wyrażenie musi mieć jakąś wartość. Logika, która byłaby wyrażana za pomocą warunków warunkowych w innych językach, jest zwykle wyrażana za pomocą dopasowania wzorców w funkcjach rekurencyjnych.
Ponieważ Haskell jest leniwy , możliwe jest pisanie struktur kontrolnych, takich jak if , jako zwykłych wyrażeń; leniwa ocena oznacza, że funkcja if może ocenić tylko warunek i właściwą gałąź (gdzie ścisły język oceniłby wszystkie trzy). Można to napisać tak:
if' :: Bool -> a -> a -> a
if' True x _ = x
if' False _ y = y
Języki podobne do C
Języki C i C-podobne mają specjalny operator trójargumentowy ( ?: ) dla wyrażeń warunkowych z funkcją, która może być opisana przez szablon taki jak ten:
condition ? evaluated-when-true : evaluated-when-false
Oznacza to, że może być wbudowany w wyrażenia, w przeciwieństwie do instrukcji if, w językach podobnych do C:
my_variable = x > 10 ? "foo" : "bar"; // In C-like languages
które można porównać do wyrażeń z rodziny Algol if-then-else (w przeciwieństwie do stwierdzenia ) (i podobnych m.in. w Ruby i Scali).
Aby osiągnąć to samo za pomocą instrukcji if, zajęłoby to więcej niż jeden wiersz kodu (w typowych konwencjach układu) i wymagałoby dwukrotnego wzmianki „moja_zmienna”:
if (x > 10)
my_variable = "foo";
else
my_variable = "bar";
Niektórzy twierdzą, że wyraźna instrukcja if/then jest łatwiejsza do odczytania i może zostać skompilowana do bardziej wydajnego kodu niż operator trójargumentowy, podczas gdy inni twierdzą, że zwięzłe wyrażenia są łatwiejsze do odczytania niż instrukcje rozłożone na kilka wierszy zawierających powtórzenia.
Mały podstawowy
x = TextWindow.ReadNumber()
If (x > 10) Then
TextWindow.WriteLine("My variable is named 'foo'.")
Else
TextWindow.WriteLine("My variable is named 'bar'.")
EndIf
Po pierwsze, gdy użytkownik uruchamia program, pojawia się kursor oczekujący na wpisanie przez czytnik liczby. Jeśli ta liczba jest większa niż 10, tekst „Moja zmienna ma nazwę 'foo'”. jest wyświetlany na ekranie. Jeśli liczba jest mniejsza niż 10, pojawi się komunikat „Moja zmienna ma nazwę 'bar'”. jest drukowany na ekranie.
Visual Basic
W Visual Basic i niektórych innych językach dostępna jest wywoływana funkcja IIf
, która może być używana jako wyrażenie warunkowe. Jednak nie zachowuje się jak prawdziwe wyrażenie warunkowe, ponieważ zarówno gałęzie prawda, jak i fałsz są zawsze oceniane; po prostu wynik jednego z nich jest odrzucany, a wynik drugiego zwraca funkcja IIf.
Tcl
W Tcl if
nie jest słowem kluczowym, ale funkcją (w Tcl znane jako polecenie lub proc
). Na przykład
if {$x > 10} {
puts "Foo!"
}
wywołuje funkcję o nazwie if
przekazywanie 2 argumentów: pierwszy to warunek, a drugi to prawdziwa gałąź. Oba argumenty są przekazywane jako łańcuchy (w Tcl wszystko w nawiasach klamrowych jest łańcuchem).
W powyższym przykładzie warunek nie jest oceniany przed wywołaniem funkcji. Zamiast tego implementacja if
funkcji odbiera warunek jako wartość ciągu i jest odpowiedzialna za ocenę tego ciągu jako wyrażenia w zakresie wywołującym.
Takie zachowanie jest możliwe za pomocą poleceń uplevel
i expr
:
- Uplevel umożliwia implementację nowych konstrukcji kontrolnych jako procedur Tcl (na przykład uplevel może być użyty do zaimplementowania konstrukcji while jako procedury Tcl).
Ponieważ w if
rzeczywistości jest funkcją, zwraca również wartość:
- Wartość zwracana z polecenia jest wynikiem wykonanego skryptu treści lub pustym ciągiem, jeśli żadne z wyrażeń nie było niezerowe i nie było bodyN.
Rdza
W Rust , if
jest zawsze wyrazem. Ocenia się na wartość dowolnej gałęzi, która jest wykonywana, lub na typ jednostki, ()
jeśli żadna gałąź nie jest wykonywana. Jeśli gałąź nie dostarcza wartości zwracanej, ()
domyślnie przyjmuje wartość. Aby upewnić się, if
że typ wyrażenia jest znany w czasie kompilacji, każda gałąź musi oszacować wartość tego samego typu. Z tego powodu else
gałąź jest faktycznie obowiązkowa, chyba że inne gałęzie oceniają jako ()
, ponieważ if
bez else
może zawsze ()
domyślnie oceniać jako.
// 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");
}
Arytmetyka, jeśli
Aż do Fortran 77 język Fortran ma instrukcję „arytmetyczną if”, która znajduje się w połowie drogi między obliczonym IF a instrukcją case, opartą na trychotomii x < 0, x = 0, x > 0. To była najwcześniejsza instrukcja warunkowa w Fortran:
IF (e) label1, label2, label3
Gdzie e jest dowolnym wyrażeniem liczbowym (niekoniecznie liczbą całkowitą); to jest równoważne
IF (e .LT. 0) GOTO label1
IF (e .EQ. 0) GOTO label2
GOTO label3
Ponieważ ta arytmetycznaGOTO
instrukcja IF jest odpowiednikiem wielu instrukcji, które mogą przeskoczyć w dowolne miejsce, jest uważana za niestrukturalną instrukcję sterującą i nie należy jej używać, jeśli można użyć większej liczby instrukcji strukturalnych. W praktyce zaobserwowano, że większość IF
zdań arytmetycznych odwołuje się do następującego zdania z jedną lub dwiema etykietami.
Była to jedyna warunkowa instrukcja sterowania w oryginalnej implementacji Fortran na komputerze IBM 704 . Na tym komputerze kod operacyjny testu i rozgałęzienia miał trzy adresy dla tych trzech stanów. Inne komputery miałyby rejestry „flagowe”, takie jak dodatni, zerowy, ujemny, parzysty, przepełnienia, przeniesienia, związane z ostatnimi operacjami arytmetycznymi i używałyby instrukcji, takich jak „Rozgałęzienie, jeśli akumulator ujemny”, a następnie „Rozgałęzienie, jeśli akumulator zero” lub podobne. Należy zauważyć, że wyrażenie jest oceniane tylko raz , aw przypadkach takich jak arytmetyka liczb całkowitych, w których może wystąpić przepełnienie, flagi przepełnienia lub przeniesienia również będą brane pod uwagę.
Implementacja obiektowa w Smalltalk
W przeciwieństwie do innych języków, w Smalltalku instrukcja warunkowa nie jest konstrukcją językową, ale zdefiniowaną w klasie Boolean
jako abstrakcyjną metodę, która przyjmuje dwa parametry, oba domknięcia . Boolean
ma dwie podklasy True
i False
, które definiują metodę, True
wykonując tylko pierwsze zamknięcie, False
wykonując tylko drugie zamknięcie.
var = condition
ifTrue: [ 'foo' ]
ifFalse: [ 'bar' ]
JavaScript
Dwa przykłady w JavaScript :
if (Math.random() < 0.5) {
console.log("You got Heads!");
} else {
console.log("You got Tails!");
}
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!");
}
Rachunek lambda
W rachunku lambda pojęcie warunku warunkowego jeśli-to-inaczej można wyrazić za pomocą wyrażeń:
true = λx. λy. x false = λx. λy. y ifThenElse = (λc. λx. λy. (c x y))
- true przyjmuje do dwóch argumentów i gdy oba zostaną podane (patrz currying ), zwraca pierwszy podany argument.
- false przyjmuje do dwóch argumentów i gdy oba zostaną podane (patrz currying ), zwraca drugi podany argument.
- ifThenElse przyjmuje do trzech argumentów i gdy wszystkie zostaną podane, przekazuje zarówno drugi, jak i trzeci argument do pierwszego argumentu (który jest funkcją, która podaje dwa argumenty i daje wynik). Oczekujemy, że ifThenElse przyjmie tylko prawdę lub fałsz jako argument, z których oba rzutują podane dwa argumenty na preferowany pojedynczy argument, który jest następnie zwracany.
uwaga : jeśli ifThenElse jest przekazywane dwie funkcje jako lewy i prawy warunek; Jest to konieczne , aby również przekazać pustą krotki (), aby w wyniku ifThenElse aby rzeczywiście wywołać wybraną funkcję, inaczej będzie ifThenElse tylko zwrócić przedmiot bez funkcji nazywa uzyskiwanie.
W systemie, w którym liczby mogą być używane bez definicji (np. Lisp, tradycyjna matematyka na papierze itp.), powyższe można wyrazić jako pojedyncze zamknięcie poniżej:
((λtrue. λfalse. λifThenElse.
(ifThenElse true 2 3)
)(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))
Tutaj wartości true, false i ifThenElse są powiązane z odpowiednimi definicjami, które są przekazywane do ich zakresu na końcu ich bloku.
Działająca analogia JavaScript (używająca tylko funkcji pojedynczej zmiennej dla rygoru) to:
var computationResult = ((_true => _false => _ifThenElse =>
_ifThenElse(_true)(2)(3)
)(x => y => x)(x => y => y)(c => x => y => c(x)(y)));
Powyższy kod z funkcjami wielu zmiennych wygląda tak:
var computationResult = ((_true, _false, _ifThenElse) =>
_ifThenElse(_true, 2, 3)
)((x, y) => x, (x, y) => y, (c, x, y) => c(x, y));
kolejna wersja wcześniejszego przykładu bez systemu, w którym zakładane są liczby, znajduje się poniżej.
Pierwszy przykład pokazuje, że jest pobierana pierwsza gałąź, podczas gdy drugi przykład pokazuje, że pobierana jest druga gałąź.
((λ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 używa podobnego pomysłu dla swoich prawdziwych i fałszywych reprezentacji, przy czym True i False są pojedynczymi obiektami, które reagują na komunikaty ifTrue/ifFalse inaczej.
Haskell używał tego dokładnego modelu dla swojego typu logicznego, ale w czasie pisania tego tekstu większość programów Haskella używa konstruktu cukru składniowego „if a then b else c”, który w przeciwieństwie do ifThenElse nie tworzy, chyba że jest opakowany w inną funkcję lub ponownie zaimplementowany jak pokazano w sekcji Haskell tej strony.
Oświadczenia dotyczące przypadków i przełączników
Instrukcje switch (w niektórych językach, instrukcje case lub rozgałęzienia wielowymiarowe) porównują daną wartość z określonymi stałymi i podejmują działania zgodnie z pierwszą stałą do dopasowania. Zwykle istnieje przepis dotyczący domyślnego działania („inaczej”, „inaczej”), które należy podjąć, jeśli żaden mecz się nie powiedzie. Instrukcje Switch mogą umożliwiać optymalizację kompilatora , na przykład tabele przeglądowe . W językach dynamicznych przypadki mogą nie ograniczać się do wyrażeń stałych i mogą rozciągać się na dopasowanie wzorców , jak w przykładzie skryptu powłoki po prawej stronie, gdzie "*)" implementuje domyślną wielkość liter jako wyrażenie regularne pasujące do dowolnego łańcucha.
Pascal : | C : | Skrypt powłoki : |
---|---|---|
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
|
Dopasowanie wzorca
Dopasowywanie wzorców może być postrzegane jako alternatywa dla instrukcji if-then-else i case . Jest dostępny w wielu językach programowania z funkcjonalnymi funkcjami programowania, takimi jak Wolfram Language , ML i wiele innych. Oto prosty przykład napisany w języku OCaml :
match fruit with
| "apple" -> cook pie
| "coconut" -> cook dango_mochi
| "banana" -> mix;;
Siłą dopasowania wzorców jest możliwość zwięzłego dopasowania nie tylko działań, ale także wartości do wzorców danych. Oto przykład napisany w języku Haskell, który ilustruje obie te cechy:
map _ [] = []
map f (h : t) = f h : map f t
Ten kod definiuje funkcję map , która stosuje pierwszy argument (funkcja) do każdego elementu drugiego argumentu (listy) i zwraca wynikową listę. Dwie linie to dwie definicje funkcji dla dwóch możliwych w tym przypadku rodzajów argumentów – jeden, w którym lista jest pusta (po prostu zwróć pustą listę), a drugi przypadek, w którym lista nie jest pusta.
Dopasowywanie wzorców nie jest ściśle mówiąc zawsze konstrukcją wyboru, ponieważ w Haskell można napisać tylko jedną alternatywę, która ma gwarancję dopasowania – w tej sytuacji nie jest używana jako konstrukt wyboru, ale po prostu jako sposób powiązać nazwy z wartościami. Jednak jest często używany jako konstrukcja do wyboru w językach, w których jest dostępny.
Warunki warunkowe oparte na hashu
W językach programowania, które mają tablice asocjacyjne lub porównywalne struktury danych, takie jak Python , Perl , PHP lub Objective-C , idiomatyczne jest ich użycie do implementacji przypisania warunkowego.
pet = input("Enter the type of pet you want to name: ")
known_pets = {
"Dog": "Fido",
"Cat": "Meowsles",
"Bird": "Tweety",
}
my_name = known_pets[pet]
W językach, które mają funkcje anonimowe lub które umożliwiają programiście przypisanie nazwanej funkcji do odwołania do zmiennej, przepływ warunkowy można zaimplementować przy użyciu skrótu jako tabeli wysyłania .
Orzeczenie
Alternatywą dla warunkowych instrukcji rozgałęzienia jest orzekanie . Predykacja to funkcja architektury, która umożliwia warunkowe wykonywanie instrukcji zamiast modyfikowania przepływu sterowania .
Odniesienie do systemu wyboru
Ta tabela odnosi się do najnowszej specyfikacji językowej każdego języka. W przypadku języków, które nie mają specyfikacji, odwołuje się do najnowszej oficjalnie wydanej implementacji.
Język programowania | Zorganizowany, jeśli | przełącznik – wybierz – przypadek | Arytmetyka, jeśli | Dopasowanie wzorca | ||
---|---|---|---|---|---|---|
następnie | w przeciwnym razie | inaczej-jeśli | ||||
Ada | tak | tak | tak | tak | Nie | Nie |
APL | tak | tak | tak | tak | Nie | Nie |
Bash powłoki | tak | tak | tak | tak | Nie | tak |
C , C++ | tak | tak | tak | Upadek | Nie | Nie |
C# | tak | tak | Niepotrzebne | tak | Nie | Nie |
COBOL | tak | tak | Niepotrzebne | tak | Nie | Nie |
Eiffla | tak | tak | tak | tak | Nie | Nie |
F# | tak | tak | tak | Niepotrzebne | Nie | tak |
Fortran 90 | tak | tak | tak | tak | tak | Nie |
Udać się | tak | tak | Niepotrzebne | tak | Nie | Nie |
Haskell | tak | Potrzebne | Niepotrzebne | Tak, ale niepotrzebne | Nie | tak |
Jawa | tak | tak | Niepotrzebne | Upadek | Nie | Nie |
ECMAScript ( JavaScript ) | tak | tak | Niepotrzebne | Upadek | Nie | Nie |
Matematyka | tak | tak | tak | tak | Nie | tak |
Oberon | tak | tak | tak | tak | Nie | Nie |
Perl | tak | tak | tak | tak | Nie | Nie |
PHP | tak | tak | tak | Upadek | Nie | Nie |
Pascal , obiekt Pascal ( Delphi ) | tak | tak | Niepotrzebne | tak | Nie | Nie |
Pyton | tak | tak | tak | Nie | Nie | Nie |
QuickBASIC | tak | tak | tak | tak | Nie | Nie |
Rubin | tak | tak | tak | tak | Nie | tak |
Rdza | tak | tak | tak | Niepotrzebne | Nie | tak |
Scala | tak | tak | Niepotrzebne | Upadek | Nie | tak |
SQL | tak | tak | tak | tak | Nie | Nie |
Szybki | tak | tak | tak | tak | Nie | tak |
Tcl | tak | tak | tak | tak | Nie | tak |
Visual Basic , klasyczny | tak | tak | tak | tak | Nie | Nie |
Visual Basic .NET | tak | tak | tak | tak | Nie | Nie |
Windows PowerShell | tak | tak | tak | Upadek | Nie | Nie |
- ^ Odnosi się to do dopasowywania wzorców jako odrębnej konstrukcji warunkowej w języku programowania – w przeciwieństwie do zwykłej obsługi dopasowywania wzorców ciągów, takiej jakobsługawyrażeń regularnych.
- 1 2 3 4 5 Często spotykany
else if
w rodzinie języków C oraz w języku COBOL i Haskell nie jest cechą języka, ale zestawem zagnieżdżonych i niezależnych,jeśli to inaczej,instrukcji połączonych z określonym układem kodu źródłowego. Oznacza to jednak również, że odrębna konstrukcja else-if nie jest tak naprawdę potrzebna w tych językach. - 1 2 W Haskell i F# oddzielna konstrukcja stałego wyboru nie jest potrzebna, ponieważ to samo zadanie można wykonać za pomocą dopasowywania wzorców.
- ^ W
case
konstrukcjiRubydopasowaniewyrażeń regularnychjest jedną z dostępnych alternatyw warunkowych kontroli przepływu. Aby zapoznać się z przykładem, zobacztopytanie dotyczące przepełnienia stosu. - 1 2 SQL ma dwie podobne konstrukcje, które spełniają obie role, obie wprowadzone wSQL-92.
CASE
Wyrażenie„wyszukiwane”CASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 [...] ELSE exprDflt END
działa jakif ... else if ... else
, podczas gdy „prosteCASE
” wyrażenie:CASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt END
działa jak instrukcja switch. Aby uzyskać szczegółowe informacje i przykłady, zobaczCase (SQL). - ^ Arytmetyka
if
jest przestarzała w Fortranie 90. - ^ Dopasowanie wzorców zostało dodane w Ruby 3.0. Niektóre konstrukty dopasowujące do wzorców są nadal eksperymentalne.
Zobacz też
- Branża (informatyka)
- Kompilacja warunkowa
- Dynamiczna wysyłka to kolejny sposób na dokonywanie wyborów egzekucyjnych
- McCarthy Formalism dla historii i odniesień historycznych
- Nazwany warunek
- Operator relacyjny
- Test (Unix)
- Warunki Yody
- Ruch warunkowy
Bibliografia
Zewnętrzne linki
- Multimedia związane z programem warunkowym (programowanie komputerowe) w Wikimedia Commons
- Wideo JEŚLI NIE (ActionScript 3.0)