Podmíněné (počítačové programování) - Conditional (computer programming)

Vývojový diagram If-Then-Else
Vnořený vývojový diagram „If – Then – Else“

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–thenKonstrukt (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 Truenebo False), ale nemá žádný vnitřní význam. Naproti tomu kombinace tohoto výrazu, jeho Ifa jeho Thenokolí 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 > 0což znamená „proměnná x obsahuje číslo větší než nula“ - a vyhodnotí tuto podmínku. Pokud je podmínka splněna true, thenprovedou 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á elsevě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–thenmohl GOTOpří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ř ifpří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 GOTOpříkazy v if–thenpříkazech, strukturované programování to usnadňuje a vynucuje. Strukturované if–then–elsepří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“

elseKlíčové slovo je také cílit na konkrétní if–thenprohláš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 elseklíčové slovo mohlo cílit na jakýkoli předchozí if–thenpří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 elseje spojen s prvním ifnebo 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 ifpříkazu nebo {...}závorek).

Jinak kdyby

Použitím else ifje 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;

elseifProhlášení, v Ada jazyka například jednoduše syntaktický cukr pro elsenásledovalo if. V Ada je rozdíl v tom, že end ifje potřeba pouze jeden , pokud jeden použije elseifmísto elsenásleduje if. PHP používá elseifklíčové slovo jak pro své složené závorky, tak pro syntaxe dvojtečky. Perl poskytuje klíčové slovo, elsifaby se vyhnul velkému počtu složených závorek, které by vyžadovaly násobky ifa elsepříkazy. Python používá speciální klíčové slovo, elifprotože struktura je označena spíše odsazením než složenými závorkami, takže opakované použití elsea ifby 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 ifkonstrukci 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 ifvě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 ifrekurzivně 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 ifpří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–elsejako 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 ifpř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 iffunkce 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ů uplevela 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 ifje 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 , ifje 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 ifje typ výrazu v době kompilace známý, musí každá větev vyhodnotit na hodnotu stejného typu. Z tohoto důvodu je elsevětev skutečně povinná, pokud ostatní větve nevyhodnocují (), protože ifbez elsemůž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 GOTOpří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 IFpří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ě Booleanjako abstraktní metoda, která přebírá dva parametry, oba uzávěry . Booleanmá dvě podtřídy Truea Falseobě, které definují metodu, pouze Trueprovedení prvního uzavření, Falseprovedení 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))
  1. true bere až dva argumenty a jakmile jsou zadány oba (viz currying ), vrátí první zadaný argument.
  2. false bere až dva argumenty a jakmile jsou zadány oba (viz currying ), vrátí druhý zadaný argument.
  3. 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
  1. ^ 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ů.
  2. 1 2 3 4 5 Často se vyskytujícíelse ifv 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.
  3. 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ů.
  4. ^ VcasekonstrukciRubypatří 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.
  5. 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 ENDfunguje podobněif ... else if ... else, zatímco „jednoduchýCASE“ výraz:CASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt ENDfunguje jako příkaz switch. Podrobnosti a příklady najdete v tématuCase (SQL).
  6. ^ Aritmetikaifje ve Fortranu 90 zastaralá.
  7. ^ V Ruby 3.0 byla přidána shoda vzorů. Některé konstrukty shody vzorů jsou stále experimentální.

Viz také

Reference

externí odkazy