Podmíněné (počítačové programování) - Conditional (computer programming)
V informatice , conditionals (to znamená, podmíněné příkazy , podmíněné výrazy a podmíněných konstrukty ,) je programovací jazyk příkazy pro manipulaci rozhodnutí. Konkrétně kondicionály provádějí různé výpočty nebo akce v závislosti na tom, zda je logická podmínka definovaná programátorem vyhodnocena jako true nebo false. Pokud jde o řídicí tok , rozhodnutí je vždy dosaženo selektivní změnou řídicího toku na základě nějaké podmínky (kromě případu predikce větve ).
Přestože dynamické odesílání není obvykle klasifikováno jako podmíněná konstrukce, je to další způsob, jak vybírat mezi alternativami za běhu .
Terminologie
V imperativních programovacích jazycích se obvykle používá termín „podmíněný příkaz “, zatímco ve funkčním programování jsou upřednostňovány výrazy „podmíněný výraz “ nebo „podmíněný konstrukt“, protože všechny tyto výrazy mají odlišný význam.
Jestliže pak jinak)
if–then
Konstrukt (někdy nazývaný if–then–else
) je běžné v mnoha programovacích jazycích. Ačkoli se syntaxe liší jazyk od jazyka, základní struktura (ve formě pseudokódu ) vypadá takto:
If (boolean condition) Then
(consequent)
Else
(alternative)
End If
Například:
If stock=0 Then
message= order new stock
Else
message= there is stock
End If
Ve výše uvedeném příkladu kódu část reprezentovaná (booleovskou podmínkou) představuje podmíněný výraz , který má vnitřní hodnotu (např. Může být nahrazen některou z hodnot True
nebo False
), ale nemá žádný vnitřní význam. Naproti tomu kombinace tohoto výrazu, jeho If
a jeho Then
okolí a následného, které následuje poté, tvoří podmíněné prohlášení mající vnitřní význam (např. Vyjadřující koherentní logické pravidlo), ale žádnou vnitřní hodnotu.
Když tlumočník najde an If
, očekává logickou podmínku - například, x > 0
což znamená „proměnná x obsahuje číslo větší než nula“ - a vyhodnotí tuto podmínku. Pokud je podmínka splněna true
, then
provedou se příkazy následující za . Jinak provádění pokračuje v následující větvi - buď v else
bloku (který je obvykle volitelný), nebo pokud neexistuje žádná else
větev, pak po end If
.
Po provedení kterékoli větve se ovládací prvek vrátí do bodu za end If
.
Historie a vývoj
V raných programovacích jazycích, zejména v některých dialektech BASIC v domácích počítačích 80. let , if–then
mohl GOTO
příkaz obsahovat pouze příkazy (ekvivalent instrukce větve ). To vedlo k těžko čitelnému stylu programování známému jako programování špaget , přičemž programy v tomto stylu se nazývaly kód špagety . V důsledku toho získávalo na popularitě strukturované programování , které umožňuje (virtuálně) libovolné příkazy vkládat do příkazových bloků uvnitř if
příkazu, až se stalo normou i ve většině ZÁKLADNÍCH programovacích kruhů. Takové mechanismy a principy byly založeny na starší, ale pokročilejší ALGOL rodiny jazyků, a ALGOL podobné jazyky, jako Pascal a Modula-2 ovlivnil moderní základních variantách po mnoho let. I když je možné při psaní příkazů, které nejsou spaghetti kódem a jsou stejně strukturované a čitelné jako programy napsané ve strukturovaném programovacím jazyce, používat pouze GOTO
příkazy v if–then
příkazech, strukturované programování to usnadňuje a vynucuje. Strukturované if–then–else
příkazy jako výše uvedený příklad jsou jedním z klíčových prvků strukturovaného programování a jsou přítomny ve většině populárních programovacích jazyků na vysoké úrovni, jako jsou C , Java , JavaScript a Visual Basic .
Problém „visícího jiného“
else
Klíčové slovo je také cílit na konkrétní if–then
prohlášení předchozí, ale pro vnořené if–then
prohlášení, klasické programovací jazyky, jako je ALGOL 60 se snažila určit, jaké konkrétní prohlášení cíli. Bez jasných hranic, pro který příkaz je který, by else
klíčové slovo mohlo cílit na jakýkoli předchozí if–then
příkaz v hnízdě, jak je analyzováno.
if a then if b then s else s2
lze analyzovat jako
if a then (if b then s) else s2
nebo
if a then (if b then s else s2)
podle toho, zda else
je spojen s prvním if
nebo druhým if
. Toto je známé jako problém visícího jiného problému a je řešeno různými způsoby v závislosti na jazyce (obvykle pomocí end if
příkazu nebo {...}
závorek).
Jinak kdyby
Použitím else if
je možné kombinovat několik podmínek. Budou provedeny pouze příkazy následující po první podmínce, která bude shledána jako pravdivá. Všechna ostatní prohlášení budou přeskočena.
if condition then
--statements
elseif condition then
-- more statements
elseif condition then
-- more statements;
...
else
-- other statements;
end if;
Například pro obchod nabízející až 30% slevu na zboží:
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;
elseif
Prohlášení, v Ada jazyka například jednoduše syntaktický cukr pro else
následovalo if
. V Ada je rozdíl v tom, že end if
je potřeba pouze jeden , pokud jeden použije elseif
místo else
následuje if
. PHP používá elseif
klíčové slovo jak pro své složené závorky, tak pro syntaxe dvojtečky. Perl poskytuje klíčové slovo, elsif
aby se vyhnul velkému počtu složených závorek, které by vyžadovaly násobky if
a else
příkazy. Python používá speciální klíčové slovo, elif
protože struktura je označena spíše odsazením než složenými závorkami, takže opakované použití else
a if
by vyžadovalo zvýšené odsazení po každé podmínce. Některé implementace BASIC , například Visual Basic , také používají ElseIf
. Podobně dřívější skořepiny UNIX (později shromážděné do syntaxe prostředí POSIX shell) používají také elif, ale dávají na výběr oddělování mezerami, zalomeními řádků nebo obojí.
V mnoha jazycích pocházejících přímo z Algolu, jako jsou Simula , Pascal , BCPL a C , však tato speciální syntaxe pro else if
konstrukci neexistuje, ani není přítomna v mnoha syntaktických derivátech C, jako je Java , ECMAScript a již brzy. To funguje, protože v těchto jazycích může každý jednotlivý příkaz (v tomto případě ...) následovat podmíněný, aniž by byl uzavřen v bloku.
if cond
Tato volba designu má mírné „náklady“. Každá else if
větev efektivně přidává další úroveň vnoření. To komplikuje práci kompilátoru (nebo lidem, kteří kompilátor píšou), protože kompilátor musí else if
rekurzivně analyzovat a implementovat libovolně dlouhé řetězce.
Pokud všechny výrazy v posloupnosti podmíněných testují hodnotu jednoho výrazu (např. if x=0
... else if x=1
... else if x=2
...), je alternativou příkaz switch , který se také nazývá case-statement nebo select-statement. Naopak v jazycích, které nemají příkaz switch, je lze vytvořit sekvencí else if
příkazů.
Pokud výrazy – pak – jinak
Mnoho jazyků podporuje výrazy if , které jsou podobné příkazům if, ale ve výsledku vrací hodnotu. Jsou to tedy pravdivé výrazy (které se hodnotí na hodnotu), nikoli prohlášení (což v kontextu hodnoty nemusí být povoleno).
Algolská rodina
ALGOL 60 a někteří další členové rodiny ALGOL umožňují if–then–else
jako výraz:
myvariable := if x > 20 then 1 else 2
Lisp dialekty
V dialektech Lisp - Scheme , Racket a Common Lisp - první z nich byl do značné míry inspirován 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
V Haskell 98 existuje pouze výraz if , no if a else
část je povinná, protože každý výraz musí mít nějakou hodnotu. Logika, která by byla v jiných jazycích vyjádřena pomocí podmíněností, je obvykle vyjádřena pomocí shody vzorů v rekurzivních funkcích.
Protože je Haskell líný , je možné psát řídicí struktury, jako například if , jako běžné výrazy; opožděné hodnocení znamená, že funkce if může vyhodnotit pouze podmínku a správnou větev (kde přísný jazyk vyhodnotí všechny tři). Lze to napsat takto:
if' :: Bool -> a -> a -> a
if' True x _ = x
if' False _ y = y
Jazyky podobné C
Jazyky C a C mají speciální ternární operátor ( ? :) Pro podmíněné výrazy s funkcí, kterou lze popsat šablonou takto:
condition ? evaluated-when-true : evaluated-when-false
To znamená, že může být vloženo do výrazů, na rozdíl od příkazů if, v jazycích podobných C:
my_variable = x > 10 ? "foo" : "bar"; // In C-like languages
které lze přirovnat k výrazům Algol-rodina if – then – else (na rozdíl od tvrzení ) (a podobně v Ruby a Scale, mimo jiné).
Chcete-li dosáhnout stejného pomocí příkazu if, zabere to více než jeden řádek kódu (podle typických konvencí rozložení) a bude nutné dvakrát zmínit „my_variable“:
if (x > 10)
my_variable = "foo";
else
my_variable = "bar";
Někteří tvrdí, že explicitní příkaz if/then je čitelnější a že se může kompilovat do efektivnějšího kódu než ternární operátor, zatímco jiní tvrdí, že stručné výrazy jsou čitelnější než příkazy rozložené na několika řádcích obsahujících opakování.
Malý základní
x = TextWindow.ReadNumber()
If (x > 10) Then
TextWindow.WriteLine("My variable is named 'foo'.")
Else
TextWindow.WriteLine("My variable is named 'bar'.")
EndIf
Nejprve, když uživatel spustí program, objeví se kurzor a čeká, až čtenář napíše číslo. Pokud je toto číslo větší než 10, zobrazí se text „Moje proměnná se jmenuje„ foo “.“ Na obrazovce se zobrazí Pokud je číslo menší než 10, zobrazí se zpráva „Moje proměnná se jmenuje„ bar “.“ je vytištěno na obrazovce.
Visual Basic
V jazyce Visual Basic a některých dalších jazycích je k dispozici funkce s názvem IIf
, kterou lze použít jako podmíněný výraz. Nechová se však jako skutečný podmíněný výraz, protože vždy jsou vyhodnoceny pravdivé i nepravdivé větve; jde jen o to, že výsledek jednoho z nich je vyhozen, zatímco výsledek druhého je vrácen funkcí IIf.
Tcl
V Tcl if
není klíčové slovo, ale funkce (v Tcl známá jako příkaz nebo proc
). Například
if {$x > 10} {
puts "Foo!"
}
vyvolá funkci pojmenovanou if
předáním 2 argumentů: První je podmínkou a druhý je skutečnou větví. Oba argumenty jsou předávány jako řetězce (v Tcl je vše v závorkách řetězec).
Ve výše uvedeném příkladu není podmínka vyhodnocena před voláním funkce. Místo toho implementace if
funkce obdrží podmínku jako hodnotu řetězce a je zodpovědná za vyhodnocení tohoto řetězce jako výrazu v oboru volajících.
Takové chování je možné pomocí příkazů uplevel
a expr
:
- Uplevel umožňuje implementovat nové řídicí konstrukce jako procedury Tcl (například k implementaci while jako konstrukci jako proceduru Tcl lze použít uplevel).
Protože if
je to vlastně funkce, vrací také hodnotu:
- Návratová hodnota z příkazu je výsledkem skriptu těla, který byl spuštěn, nebo prázdného řetězce, pokud žádný z výrazů nebyl nenulový a nebylo žádné bodyN.
Rez
V Rust , if
je vždy výrazem. Vyhodnocuje se podle hodnoty kterékoli větve, která je spuštěna, nebo podle typu jednotky, ()
pokud není provedena žádná větev. Pokud větev neposkytuje návratovou hodnotu, ()
ve výchozím nastavení se vyhodnotí jako . Aby bylo zajištěno, že if
je typ výrazu v době kompilace známý, musí každá větev vyhodnotit na hodnotu stejného typu. Z tohoto důvodu je else
větev skutečně povinná, pokud ostatní větve nevyhodnocují ()
, protože if
bez else
může vždy vyhodnotit ()
jako výchozí.
// 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");
}
Aritmetika, pokud
Až do Fortranu 77 má jazyk Fortran příkaz „aritmetický if“, který je na půli cesty mezi vypočítaným IF a případem, na základě trichotomie x <0, x = 0, x > 0. Toto bylo nejčasnější podmíněné tvrzení v Fortran:
IF (e) label1, label2, label3
Kde e je jakýkoli číselný výraz (ne nutně celé číslo); toto je ekvivalentní
IF (e .LT. 0) GOTO label1
IF (e .EQ. 0) GOTO label2
GOTO label3
Protože tento aritmetický IF je ekvivalentem více GOTO
příkazů, které lze přeskočit kamkoli, je považován za nestrukturovaný kontrolní příkaz a neměl by být použit, pokud lze použít více strukturovaných příkazů. V praxi bylo pozorováno, že většina aritmetických IF
příkazů odkazovala na následující příkaz s jedním nebo dvěma štítky.
Toto bylo jediné podmíněné kontrolní prohlášení v původní implementaci Fortranu na počítači IBM 704 . Na tomto počítači měl operační kód test-and-branch tři adresy pro tyto tři stavy. Jiné počítače by měly „vlajkové“ registry, jako je kladný, nulový, záporný, sudý, přetečený, nesený, spojené s posledními aritmetickými operacemi a používaly by pokyny jako „Větev, pokud je záporný akumulátor“, pak „Větev, pokud je akumulátor nulový“ nebo podobně. Všimněte si, že výraz je vyhodnocen pouze jednou , a v případech, jako je celočíselná aritmetika, kde může dojít k přetečení, by byly brány v úvahu také příznaky přetečení nebo přenosu.
Objektově orientovaná implementace v Smalltalk
Na rozdíl od jiných jazyků není v Smalltalk podmíněný příkaz jazykovým konstruktem, ale je definován ve třídě Boolean
jako abstraktní metoda, která přebírá dva parametry, oba uzávěry . Boolean
má dvě podtřídy True
a False
obě, které definují metodu, pouze True
provedení prvního uzavření, False
provedení pouze druhého uzavření.
var = condition
ifTrue: [ 'foo' ]
ifFalse: [ 'bar' ]
JavaScript
Dva příklady v jazyce 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!");
}
Lambda kalkul
V Lambda kalkulu lze koncept podmíněnosti if-then-else vyjádřit pomocí výrazů:
true = λx. λy. x false = λx. λy. y ifThenElse = (λc. λx. λy. (c x y))
- true bere až dva argumenty a jakmile jsou zadány oba (viz currying ), vrátí první zadaný argument.
- false bere až dva argumenty a jakmile jsou zadány oba (viz currying ), vrátí druhý zadaný argument.
- ifThenElse přebírá až tři argumenty a jakmile jsou zadány všechny, předá druhý i třetí argument prvnímu argumentu (což je funkce, která zadá dva argumenty a vytvoří výsledek). Očekáváme, že ifThenElse bude jako argument brát pouze hodnotu true nebo false, přičemž oba promítnou dané dva argumenty do svého preferovaného jediného argumentu, který se pak vrátí.
poznámka : pokud ifThenElse jsou předány dvě funkce jako levé a pravé podmíněné; je nutné také předat prázdnou řazenou kolekci () výsledku ifThenElse, aby bylo možné zvolenou funkci skutečně zavolat, jinak ifThenElse pouze vrátí objekt funkce, aniž by byl vyvolán.
V systému, kde lze čísla používat bez definice (jako Lisp, tradiční papírová matematika atd.), Lze výše uvedené vyjádřit jako jediné uzavření níže:
((λtrue. λfalse. λifThenElse.
(ifThenElse true 2 3)
)(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))
Zde jsou true, false a ifThenElse vázány na své příslušné definice, které jsou předány do jejich rozsahu na konci jejich bloku.
Fungující analogie JavaScriptu (s použitím přísných funkcí pouze jedné proměnné) je:
var computationResult = ((_true => _false => _ifThenElse =>
_ifThenElse(_true)(2)(3)
)(x => y => x)(x => y => y)(c => x => y => c(x)(y)));
Výše uvedený kód s více proměnnými funkcemi vypadá takto:
var computationResult = ((_true, _false, _ifThenElse) =>
_ifThenElse(_true, 2, 3)
)((x, y) => x, (x, y) => y, (c, x, y) => c(x, y));
další verze předchozího příkladu bez systému, kde se předpokládají čísla, je níže.
První příklad ukazuje braní první větve, zatímco druhý příklad ukazuje braní druhé větve.
((λ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 používá podobný nápad pro své pravdivé a nepravdivé reprezentace, přičemž True a False jsou objekty typu singleton, které reagují na zprávy ifTrue/ifFalse odlišně.
Haskell používal tento přesný model pro svůj booleovský typ, ale v době psaní většina programů Haskell používá syntaktický cukr „if a then b else c“ konstrukci, která na rozdíl od ifThenElse nekomponuje, pokud není zabalena do jiné funkce nebo znovu implementována jak je uvedeno v části Haskell na této stránce.
Případy a přepínače
Přepněte příkazy (v některých jazycích, příkazy pro případ nebo vícecestné větve) porovnejte danou hodnotu se zadanými konstantami a proveďte akci podle první shodné konstanty. Pokud žádná shoda neuspěje, obvykle existuje ustanovení o provedení výchozí akce („else“, „jinak“). Příkazy přepínače mohou povolit optimalizace kompilátoru , například vyhledávací tabulky . V dynamických jazycích nemusí být případy omezeny na konstantní výrazy a mohou se rozšířit na párování vzorů , jako v příkladu skriptu prostředí vpravo, kde '*)' implementuje výchozí případ jako regulární výraz odpovídající libovolnému řetězci.
Pascal : | C : | Skript prostředí : |
---|---|---|
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
|
Shoda vzorů
Shoda vzorů může být považována za alternativu k příkazům if – then – else a case . Je k dispozici v mnoha programovacích jazycích s funkčními programovacími funkcemi, jako je Wolfram Language , ML a mnoho dalších. Zde je jednoduchý příklad napsaný v jazyce OCaml :
match fruit with
| "apple" -> cook pie
| "coconut" -> cook dango_mochi
| "banana" -> mix;;
Síla shody vzorů je schopnost stručně porovnávat nejen akce, ale také hodnoty se vzory dat. Zde je příklad napsaný v Haskell, který ilustruje obě tyto funkce:
map _ [] = []
map f (h : t) = f h : map f t
Tento kód definuje mapu funkcí , která použije první argument (funkci) na každý z prvků druhého argumentu (seznam) a vrátí výsledný seznam. Dva řádky jsou dvě definice funkce pro dva druhy možných argumentů v tomto případě - jeden, kde je seznam prázdný (stačí vrátit prázdný seznam) a druhý případ, kdy seznam není prázdný.
Párování vzorů není striktně řečeno vždy konstrukt volby, protože v Haskellu je možné napsat pouze jednu alternativu, která je zaručena vždy shodná - v této situaci se nepoužívá jako konstrukt volby, ale jednoduše jako způsob svázat jména s hodnotami. Často se však používá jako konstrukt volby v jazycích, ve kterých je k dispozici.
Hash-based podmíněné
V programovacích jazycích, které mají asociativní pole nebo srovnatelné datové struktury, jako je Python , Perl , PHP nebo Objective-C , je idiomatické použít je k implementaci podmíněného přiřazení.
pet = input("Enter the type of pet you want to name: ")
known_pets = {
"Dog": "Fido",
"Cat": "Meowsles",
"Bird": "Tweety",
}
my_name = known_pets[pet]
V jazycích, které mají anonymní funkce nebo které umožňují programátorovi přiřadit pojmenovanou funkci referenční proměnné, lze podmíněný tok implementovat pomocí hash jako dispečerské tabulky .
Tvrzení
Alternativou k podmíněným instrukcím větvení je predikace . Predikace je architektonická funkce, která umožňuje podmíněně provádět instrukce namísto úpravy toku řízení .
Možnost křížového odkazu systému
Tato tabulka odkazuje na nejnovější jazykovou specifikaci každého jazyka. U jazyků, které nemají specifikaci, se odkazuje na nejnovější oficiálně vydanou implementaci.
Programovací jazyk | Strukturované pokud | přepínač –vybrat – případ | Aritmetika, pokud | Shoda vzorů | ||
---|---|---|---|---|---|---|
pak | jiný | jinak - pokud | ||||
Ada | Ano | Ano | Ano | Ano | Ne | Ne |
APL | Ano | Ano | Ano | Ano | Ne | Ne |
Bash shell | Ano | Ano | Ano | Ano | Ne | Ano |
C , C ++ | Ano | Ano | Ano | Propadnout | Ne | Ne |
C# | Ano | Ano | Nepotřebný | Ano | Ne | Ne |
COBOL | Ano | Ano | Nepotřebný | Ano | Ne | Ne |
Eiffelova | Ano | Ano | Ano | Ano | Ne | Ne |
F# | Ano | Ano | Ano | Nepotřebný | Ne | Ano |
Fortran 90 | Ano | Ano | Ano | Ano | Ano | Ne |
Jít | Ano | Ano | Nepotřebný | Ano | Ne | Ne |
Haskell | Ano | Potřeboval | Nepotřebný | Ano, ale nepotřebné | Ne | Ano |
Jáva | Ano | Ano | Nepotřebný | Propadnout | Ne | Ne |
ECMAScript ( JavaScript ) | Ano | Ano | Nepotřebný | Propadnout | Ne | Ne |
Mathematica | Ano | Ano | Ano | Ano | Ne | Ano |
Oberon | Ano | Ano | Ano | Ano | Ne | Ne |
Perl | Ano | Ano | Ano | Ano | Ne | Ne |
PHP | Ano | Ano | Ano | Propadnout | Ne | Ne |
Pascal , Object Pascal ( Delphi ) | Ano | Ano | Nepotřebný | Ano | Ne | Ne |
Krajta | Ano | Ano | Ano | Ne | Ne | Ne |
QuickBASIC | Ano | Ano | Ano | Ano | Ne | Ne |
Rubín | Ano | Ano | Ano | Ano | Ne | Ano |
Rez | Ano | Ano | Ano | Nepotřebný | Ne | Ano |
Scala | Ano | Ano | Nepotřebný | Propadnout | Ne | Ano |
SQL | Ano | Ano | Ano | Ano | Ne | Ne |
Rychlý | Ano | Ano | Ano | Ano | Ne | Ano |
Tcl | Ano | Ano | Ano | Ano | Ne | Ano |
Klasický Visual Basic | Ano | Ano | Ano | Ano | Ne | Ne |
Visual Basic .NET | Ano | Ano | Ano | Ano | Ne | Ne |
Windows PowerShell | Ano | Ano | Ano | Propadnout | Ne | Ne |
- ^ To se týká shody vzorů jako odlišné podmíněné konstrukce v programovacím jazyce - na rozdíl od pouhé podpory shody vzorů řetězců, jako jepodporaregulárních výrazů.
- 1 2 3 4 5 Často se vyskytující
else if
v rodině jazyků C a v COBOL a Haskell není jazyková funkce, ale sada vnořených a nezávislýchpříkazůif if elsekombinovaných s konkrétním rozložením zdrojového kódu. To však také znamená, že v těchto jazycích není nutné nic jiného - pokud konstrukt opravdu není potřeba. - 1 2 V Haskell a F#je samostatná konstrukce konstantní volby nepotřebná, protože stejný úkol lze provést pomocí párování vzorů.
- ^ V
case
konstrukciRubypatří shodaregulárních výrazůmezi dostupné alternativy řízení podmíněného toku. Příklad najdete vtétootázce Přetečení zásobníku. - 1 2 SQL má dvě podobné konstrukce, které splňují obě role, obě zavedené vSQL-92. „Hledaný
CASE
“ výrazCASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 [...] ELSE exprDflt END
funguje podobněif ... else if ... else
, zatímco „jednoduchýCASE
“ výraz:CASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt END
funguje jako příkaz switch. Podrobnosti a příklady najdete v tématuCase (SQL). - ^ Aritmetika
if
je ve Fortranu 90 zastaralá. - ^ V Ruby 3.0 byla přidána shoda vzorů. Některé konstrukty shody vzorů jsou stále experimentální.
Viz také
- Obor (počítačová věda)
- Podmíněná kompilace
- Dynamické odeslání pro jiný způsob provádění voleb provádění
- McCarthyho formalismus pro historii a historické odkazy
- Pojmenovaná podmínka
- Relační operátor
- Test (Unix)
- Podmínky Yoda
- Podmíněný pohyb
Reference
externí odkazy
- Média související s Podmíněným (počítačové programování) na Wikimedia Commons
- IF NOT (ActionScript 3.0) video