Condițional (programare computerizată) - Conditional (computer programming)
În informatică , condiționalele (adică enunțurile condiționale , expresiile condiționate și constructele condiționate ) sunt comenzi de limbaj de programare pentru gestionarea deciziilor. În mod specific, condiționalele efectuează diferite calcule sau acțiuni în funcție de faptul dacă o condiție booleană definită de programator se evaluează ca fiind adevărată sau falsă. În ceea ce privește fluxul de control , decizia se realizează întotdeauna prin modificarea selectivă a fluxului de control pe baza unor condiții (în afară de cazul predicării ramurilor ).
Deși dispecerizarea dinamică nu este de obicei clasificată ca o construcție condițională, este o altă modalitate de a selecta între alternative în timpul rulării .
Terminologie
În limbajele de programare imperative , termenul „ afirmație condițională ” este de obicei folosit, în timp ce în programarea funcțională , termenii „ expresie condițională ” sau „construct condițional” sunt preferați, deoarece acești termeni au înțelesuri distincte.
Dacă – atunci (–else)
if–thenConstructul (numit uneori if–then–else) este comună în multe limbaje de programare. Deși sintaxa variază de la o limbă la alta, structura de bază ( sub formă de pseudocod ) arată astfel:
If (boolean condition) Then
(consequent)
Else
(alternative)
End If
De exemplu:
If stock=0 Then
message= order new stock
Else
message= there is stock
End If
În exemplul de cod de mai sus, partea reprezentată prin (condiție booleană) constituie o expresie condițională , având valoare intrinsecă (de exemplu, poate fi înlocuită cu oricare dintre valori Truesau False), dar nu are nicio semnificație intrinsecă. În contrast, combinația acestei expresii, a Ifși Thenînconjurătorul acesteia și consecința care urmează ulterior constituie o afirmație condițională , având semnificație intrinsecă (de exemplu, exprimând o regulă logică coerentă), dar fără valoare intrinsecă.
Când un interpret găsește o If, se așteaptă la o condiție booleană - de exemplu, x > 0care înseamnă „variabila x conține un număr mai mare decât zero” - și evaluează acea condiție. Dacă condiția este true, declarațiile care urmează thensunt executate. În caz contrar, execuția continuă în următoarea ramură - fie în else bloc (care este de obicei opțional), fie dacă nu există elseramură, apoi după end If.
După executarea oricărei ramuri, controlul revine la punctul de după end If.
Istorie și dezvoltare
În limbajele de programare timpurii, în special în unele dialecte ale BASIC din computerele de acasă din anii 1980 , o if–thendeclarație putea conține doar GOTOafirmații (echivalente cu o instrucțiune de ramură ). Acest lucru a dus la un stil greu de citit de programare cunoscut sub numele de programare spaghetti , cu programe în acest stil numite cod spaghetti . Ca rezultat, programarea structurată , care permite ca declarațiile (practic) arbitrare să fie plasate în blocuri de declarații în cadrul unei ifdeclarații, a câștigat popularitate, până când a devenit normă chiar și în majoritatea cercurilor de programare BASIC. Astfel de mecanisme și principii s-au bazat pe familia de limbi ALGOL mai vechi, dar mai avansată , iar limbajele asemănătoare ALGOL, cum ar fi Pascal și Modula-2, au influențat de mulți ani variantele BASIC moderne. Deși este posibil în timp ce se utilizează numai GOTOenunțuri în if–thenenunțuri pentru a scrie programe care nu sunt cod spaghetti și sunt la fel de bine structurate și lizibile ca programele scrise într-un limbaj de programare structurat, programarea structurată face acest lucru mai ușor și îl aplică. if–then–elseAfirmațiile structurate precum exemplul de mai sus sunt unul dintre elementele cheie ale programării structurate și sunt prezente în cele mai populare limbaje de programare la nivel înalt, cum ar fi C , Java , JavaScript și Visual Basic .
Problema „altceva atârnând”
Cuvântul elsecheie este făcut pentru a viza o if–thendeclarație specifică care o precedă, dar pentru instrucțiunile imbricate if–then , limbajele de programare clasice, cum ar fi ALGOL 60, s-au luptat să definească ce instrucțiune specifică să vizeze. Fără limite clare pentru care afirmație este care, un elsecuvânt cheie ar putea viza orice if–thenafirmație precedentă din cuib, așa cum este analizat.
if a then if b then s else s2
poate fi analizat ca
if a then (if b then s) else s2
sau
if a then (if b then s else s2)
în funcție de dacă elseeste asociat cu primul ifsau al doilea if. Aceasta este cunoscută sub numele de problema „ altcineva” și se rezolvă în diferite moduri, în funcție de limbă (de obicei prin end ifdeclarație sau {...}paranteze).
Altfel dacă
Prin utilizare else if, este posibil să combinați mai multe condiții. Vor fi executate numai declarațiile care urmează primei condiții care se găsește adevărată. Toate celelalte declarații vor fi omise.
if condition then
--statements
elseif condition then
-- more statements
elseif condition then
-- more statements;
...
else
-- other statements;
end if;
De exemplu, pentru un magazin care oferă până la o reducere de 30% pentru un articol:
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;
elseifDeclarația, în Ada limba , de exemplu, este pur și simplu de zahăr sintactică pentru elseurmat de if. În Ada, diferența este că end ifeste nevoie de unul singur, dacă se folosește elseifîn loc de elseurmat de if. PHP folosește elseifcuvântul cheie atât pentru parantezele bucle, fie pentru sintaxele de două puncte. Perl furnizează cuvântul cheie elsifpentru a evita numărul mare de aparate dentare care ar fi cerute de multiple ifși elsedeclarații. Python folosește cuvântul cheie special elifdeoarece structura este mai degrabă denotată prin indentare decât paranteze, deci o utilizare repetată a elseși ifar necesita o indentare crescută după fiecare condiție. Unele implementări ale BASIC , cum ar fi Visual Basic , folosesc și ElseIfele. În mod similar, shell-urile UNIX anterioare (adunate mai târziu până la sintaxa shell POSIX) folosesc și elif, dar oferind posibilitatea de a delimita cu spații, întreruperi de linie sau ambele.
Cu toate acestea, în multe limbi descendente direct din Algol, cum ar fi Simula , Pascal , BCPL și C , această sintaxă specială pentru else ifconstruct nu este prezentă și nici nu este prezentă în numeroasele derivate sintactice ale lui C, cum ar fi Java , ECMAScript și curând. Acest lucru funcționează pentru că în aceste limbi, orice singură declarație (în acest caz ...) poate urma o condițională , fără a fi închisă într - un bloc.
if cond
Această alegere de design are un ușor „cost”. Fiecare else iframură adaugă efectiv un nivel suplimentar de cuibărire. Acest lucru complică treaba pentru compilator (sau persoanele care scriu compilatorul), deoarece compilatorul trebuie să analizeze și să implementeze în mod arbitrar else iflanțuri lungi recursiv.
Dacă toți termenii din secvența de condiționali testează valoarea unei singure expresii (de exemplu, if x=0... else if x=1... else if x=2...), o alternativă este instrucțiunea switch , numită și instrucțiune caz sau instrucțiune select. În schimb, în limbile care nu au o declarație switch, acestea pot fi produse printr-o succesiune de else ifinstrucțiuni.
Expresii dacă – atunci – altfel
Multe limbi acceptă expresiile if , care sunt similare cu instrucțiunile if, dar returnează o valoare ca rezultat. Astfel, ele sunt expresii adevărate (care se evaluează la o valoare), nu declarații (care nu pot fi permise în contextul unei valori).
Familia Algol
ALGOL 60 și alți membri ai familiei ALGOL permit if–then–elseca expresie:
myvariable := if x > 20 then 1 else 2
Dialecte Lisp
În dialectele Lisp - Scheme , Racket și Common Lisp - primul dintre care a fost inspirat în mare măsură de 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
În Haskell 98, există doar o expresie if , no if statement și elsepartea este obligatorie, deoarece fiecare expresie trebuie să aibă o anumită valoare. Logica care ar fi exprimată cu condiționali în alte limbi este de obicei exprimată cu potrivirea modelelor în funcții recursive.
Deoarece Haskell este leneș , este posibil să scrieți structuri de control, cum ar fi dacă , ca expresii obișnuite; evaluarea leneșă înseamnă că o funcție if poate evalua doar starea și ramura adecvată (unde un limbaj strict ar evalua toate cele trei). Se poate scrie astfel:
if' :: Bool -> a -> a -> a
if' True x _ = x
if' False _ y = y
Limbi asemănătoare cu cele C
Limbajele C și C au un operator ternar special ( ? :) Pentru expresiile condiționate cu o funcție care poate fi descrisă de un șablon ca acesta:
condition ? evaluated-when-true : evaluated-when-false
Aceasta înseamnă că poate fi înclinat în expresii, spre deosebire de declarațiile if, în limbaje asemănătoare cu C:
my_variable = x > 10 ? "foo" : "bar"; // In C-like languages
care poate fi comparată cu expresiile Algol-family if – then – else (spre deosebire de o afirmație ) (și similare în Ruby și Scala, printre altele).
Pentru a realiza același lucru folosind o instrucțiune if, aceasta ar necesita mai mult de o linie de cod (în conformitate cu convențiile tipice de aspect) și ar necesita menționarea „variabilei mele” de două ori:
if (x > 10)
my_variable = "foo";
else
my_variable = "bar";
Unii susțin că afirmația explicită if / then este mai ușor de citit și că se poate compila într-un cod mai eficient decât operatorul ternar, în timp ce alții susțin că expresiile concise sunt mai ușor de citit decât afirmațiile răspândite pe mai multe linii care conțin repetare.
Mic de bază
x = TextWindow.ReadNumber()
If (x > 10) Then
TextWindow.WriteLine("My variable is named 'foo'.")
Else
TextWindow.WriteLine("My variable is named 'bar'.")
EndIf
În primul rând, când utilizatorul rulează programul, apare un cursor în așteptarea cititorului pentru a introduce un număr. Dacă numărul respectiv este mai mare de 10, textul „Variabila mea se numește„ foo ”.” este afișat pe ecran. Dacă numărul este mai mic de 10, atunci mesajul „Variabila mea se numește„ bară ”. este imprimat pe ecran.
Visual Basic
În Visual Basic și în alte limbaje, IIfeste furnizată o funcție numită , care poate fi utilizată ca expresie condițională. Cu toate acestea, nu se comportă ca o expresie condiționată adevărată, deoarece atât ramurile adevărate, cât și cele false sunt întotdeauna evaluate; doar că rezultatul unuia dintre ele este aruncat, în timp ce rezultatul celuilalt este returnat de funcția IIf.
Tcl
În Tcl if nu este un cuvânt cheie, ci o funcție (în Tcl cunoscut sub numele de comandă sau proc). De exemplu
if {$x > 10} {
puts "Foo!"
}
invocă o funcție numită iftrecând 2 argumente: primul fiind condiția și al doilea fiind adevărata ramură. Ambele argumente sunt transmise ca șiruri (în Tcl tot ceea ce se află între paranteze este un șir).
În exemplul de mai sus, condiția nu este evaluată înainte de a apela funcția. În schimb, implementarea iffuncției primește condiția ca valoare șir și este responsabilă de evaluarea acestui șir ca o expresie în sfera apelanților.
Un astfel de comportament este posibil prin utilizarea uplevelși exprcomenzile:
- Uplevel face posibilă implementarea noilor construcții de control ca proceduri Tcl (de exemplu, nivelul superior ar putea fi utilizat pentru a implementa construcția while ca o procedură Tcl).
Deoarece ifeste de fapt o funcție, returnează și o valoare:
- Valoarea returnată din comandă este rezultatul scriptului de corp care a fost executat sau un șir gol dacă niciuna dintre expresii nu a fost zero și nu a existat bodyN.
Rugini
În Rugină , ifeste întotdeauna o expresie. Se evaluează la valoarea oricărei ramuri care este executată sau la tipul de unitate ()dacă nu este executată nicio ramură. Dacă o sucursală nu furnizează o valoare de returnare, se evaluează în ()mod implicit. Pentru a se asigura că iftipul expresiei este cunoscut la momentul compilării, fiecare ramură trebuie să evalueze la o valoare de același tip. Din acest motiv, o elseramură este efectiv obligatorie, cu excepția cazului în care celelalte ramuri evaluează (), deoarece o iffără o elsepoate evalua întotdeauna la ()implicit.
// 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");
}
Aritmetică dacă
Până la Fortran 77 , limba Fortran are o afirmație „aritmetică dacă” care este la jumătatea distanței dintre un IF calculat și o afirmație de caz, bazată pe trichotomia x <0, x = 0, x > 0. Aceasta a fost cea mai timpurie afirmație condițională din Fortran:
IF (e) label1, label2, label3
Unde e este orice expresie numerică (nu neapărat un număr întreg); acest lucru este echivalent cu
IF (e .LT. 0) GOTO label1
IF (e .EQ. 0) GOTO label2
GOTO label3
Deoarece acest IF aritmetic este echivalent cu mai multe GOTOinstrucțiuni care ar putea sări oriunde, este considerat a fi o instrucțiune de control nestructurată și nu ar trebui să fie utilizată dacă pot fi utilizate instrucțiuni mai structurate. În practică s-a observat că cele mai multe IFafirmații aritmetice au făcut referire la următoarea afirmație cu una sau două dintre etichete.
Aceasta a fost singura declarație de control condiționat din implementarea inițială a Fortran pe computerul IBM 704 . Pe acel computer, codul op-test și ramură avea trei adrese pentru aceste trei state. Alte computere ar avea registre de „semnalizare”, cum ar fi pozitive, zero, negative, pare, overflow, carry, asociate cu ultimele operații aritmetice și ar folosi instrucțiuni precum „Ramificați dacă acumulatorul este negativ”, apoi „Ramificați dacă acumulatorul este zero” sau similar. Rețineți că expresia este evaluată o singură dată și, în cazuri cum ar fi aritmetica întreagă în care poate apărea deversare, vor fi luate în considerare și semnalizările de depășire sau de transport.
Implementare orientată obiect în Smalltalk
Spre deosebire de alte limbi, în Smalltalk afirmația condițională nu este o construcție de limbaj, ci este definită în clasă Booleanca o metodă abstractă care ia doi parametri, ambii închideri . Booleanare două subclase Trueși False, care ambele definesc metoda, Trueexecutând numai prima închidere, Falseexecutând numai a doua închidere.
var = condition
ifTrue: [ 'foo' ]
ifFalse: [ 'bar' ]
JavaScript
Două exemple în 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!");
}
Calcul Lambda
În calculul Lambda , conceptul de condițional if-then-else poate fi exprimat folosind expresiile:
true = λx. λy. x false = λx. λy. y ifThenElse = (λc. λx. λy. (c x y))
- true acceptă până la două argumente și odată ce ambele sunt furnizate (a se vedea cursul ), returnează primul argument dat.
- false acceptă până la două argumente și, odată ce ambele sunt furnizate (a se vedea cursul ), returnează al doilea argument dat.
- ifThenElse preia până la trei argumente și odată ce toate sunt furnizate, trece atât al doilea, cât și al treilea argument la primul argument (care este o funcție care a dat două argumente și produce un rezultat). Ne așteptăm ca ifThenElse să ia doar ca adevărat sau fals ca argument, ambele proiectând cele două argumente date argumentului lor preferat, care este apoi returnat.
notă : dacă ifThenElse este trecută două funcții ca condiționali stânga și dreapta; este necesar să treceți, de asemenea, un tuplu gol () la rezultatul ifThenElse pentru a apela efectiv funcția aleasă, altfel ifThenElse va returna doar obiectul funcției fără a fi chemat.
Într-un sistem în care numerele pot fi utilizate fără definiție (cum ar fi Lisp, matematica tradițională a hârtiei, așa mai departe), cele de mai sus pot fi exprimate ca o singură închidere mai jos:
((λtrue. λfalse. λifThenElse.
(ifThenElse true 2 3)
)(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))
Aici, adevărat, fals și ifThenElse sunt legate de definițiile lor respective, care sunt trecute la sfera lor de aplicare la sfârșitul blocului lor.
O analogie JavaScript funcțională (folosind doar funcții ale unei singure variabile pentru rigoare) cu aceasta este:
var computationResult = ((_true => _false => _ifThenElse =>
_ifThenElse(_true)(2)(3)
)(x => y => x)(x => y => y)(c => x => y => c(x)(y)));
Codul de mai sus cu funcții multivariabile arată astfel:
var computationResult = ((_true, _false, _ifThenElse) =>
_ifThenElse(_true, 2, 3)
)((x, y) => x, (x, y) => y, (c, x, y) => c(x, y));
o altă versiune a exemplului anterior, fără un sistem în care se presupun numere, este mai jos.
Primul exemplu arată prima ramură luată, în timp ce al doilea exemplu arată cea de-a doua ramură luată.
((λ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 folosește o idee similară pentru reprezentările sale adevărate și false, cu Adevărat și Fals fiind obiecte singulare care răspund la mesajele ifTrue / ifFalse diferit.
Haskell obișnuia să folosească acest model exact pentru tipul său boolean, dar la momentul scrierii, majoritatea programelor Haskell folosesc zahăr sintactic „dacă a apoi b else c”, care, spre deosebire de IfThenElse, nu compune decât dacă este înfășurat într-o altă funcție sau re-implementat așa cum se arată în secțiunea Haskell a acestei pagini.
Declarații de caz și schimbare
Instrucțiunile de comutare (în unele limbi, instrucțiuni de caz sau ramuri multiple) compară o valoare dată cu constantele specificate și acționează în funcție de prima constantă care se potrivește. De obicei, există o prevedere pentru o acțiune implicită („altfel”, „altfel”) care trebuie întreprinsă în cazul în care nicio potrivire nu reușește. Instrucțiunile de comutare pot permite optimizări ale compilatorului , cum ar fi tabelele de căutare . În limbile dinamice, cazurile nu pot fi limitate la expresii constante și se pot extinde la potrivirea modelelor , ca în exemplul scriptului shell din dreapta, unde „*)” implementează cazul implicit ca o expresie regulată care se potrivește cu orice șir.
| Pascal : | C : | Script Shell : |
|---|---|---|
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
|
Potrivire de model
Potrivirea tiparului poate fi văzută ca o alternativă atât la declarațiile if – then – else , cât și la caz . Este disponibil în multe limbaje de programare cu funcții de programare funcționale, cum ar fi Wolfram Language , ML și multe altele. Iată un exemplu simplu scris în limba OCaml :
match fruit with
| "apple" -> cook pie
| "coconut" -> cook dango_mochi
| "banana" -> mix;;
Puterea potrivirii tiparelor este abilitatea de a potrivi concis nu numai acțiunile, ci și valorile la tiparele de date. Iată un exemplu scris în Haskell care ilustrează ambele caracteristici:
map _ [] = []
map f (h : t) = f h : map f t
Acest cod definește o hartă de funcții , care aplică primul argument (o funcție) fiecăruia dintre elementele celui de-al doilea argument (o listă) și returnează lista rezultată. Cele două linii sunt cele două definiții ale funcției pentru cele două tipuri de argumente posibile în acest caz - unul în care lista este goală (trebuie doar să returnați o listă goală) și celălalt caz în care lista nu este goală.
Potrivirea tiparului nu este strict vorbind întotdeauna o construcție de alegere, deoarece în Haskell este posibil să scrieți o singură alternativă, care este garantată că va fi întotdeauna potrivită - în această situație, nu este utilizată ca o construcție de alegere, ci pur și simplu ca o modalitate pentru a lega numele de valori. Cu toate acestea, este frecvent utilizat ca o construcție de alegere în limbile în care este disponibil.
Condiționale bazate pe hash
În limbajele de programare care au matrice asociative sau structuri de date comparabile, cum ar fi Python , Perl , PHP sau Objective-C , este idiomatic să le folosiți pentru a implementa atribuirea condiționată.
pet = input("Enter the type of pet you want to name: ")
known_pets = {
"Dog": "Fido",
"Cat": "Meowsles",
"Bird": "Tweety",
}
my_name = known_pets[pet]
În limbile care au funcții anonime sau care permit unui programator să atribuie o funcție numită unei referințe variabile, fluxul condițional poate fi implementat utilizând un hash ca tabel de expediere .
Predicaţie
O alternativă la instrucțiunile condiționate de ramură este predicția . Predicarea este o caracteristică arhitecturală care permite executarea condiționată a instrucțiunilor în loc de a modifica fluxul de control .
Alegerea sistemului de referință încrucișată
Acest tabel se referă la cea mai recentă specificație lingvistică a fiecărei limbi. Pentru limbile care nu au o specificație, se face referire la cea mai recentă implementare lansată oficial.
| Limbaj de programare | Structurat dacă | comutați –selectați-majuscule | Aritmetică dacă | Potrivire de model | ||
|---|---|---|---|---|---|---|
| atunci | altceva | altceva - dacă | ||||
| Ada | da | da | da | da | Nu | Nu |
| APL | da | da | da | da | Nu | Nu |
| Bash shell | da | da | da | da | Nu | da |
| C , C ++ | da | da | da | Cadea prin | Nu | Nu |
| C # | da | da | Inutil | da | Nu | Nu |
| COBOL | da | da | Inutil | da | Nu | Nu |
| Eiffel | da | da | da | da | Nu | Nu |
| F # | da | da | da | Inutil | Nu | da |
| Fortran 90 | da | da | da | da | da | Nu |
| Merge | da | da | Inutil | da | Nu | Nu |
| Haskell | da | Necesar | Inutil | Da, dar inutil | Nu | da |
| Java | da | da | Inutil | Cadea prin | Nu | Nu |
| ECMAScript ( JavaScript ) | da | da | Inutil | Cadea prin | Nu | Nu |
| Mathematica | da | da | da | da | Nu | da |
| Oberon | da | da | da | da | Nu | Nu |
| Perl | da | da | da | da | Nu | Nu |
| PHP | da | da | da | Cadea prin | Nu | Nu |
| Pascal , Object Pascal ( Delphi ) | da | da | Inutil | da | Nu | Nu |
| Piton | da | da | da | Nu | Nu | Nu |
| QuickBASIC | da | da | da | da | Nu | Nu |
| Rubin | da | da | da | da | Nu | da |
| Rugini | da | da | da | Inutil | Nu | da |
| Scala | da | da | Inutil | Cadea prin | Nu | da |
| SQL | da | da | da | da | Nu | Nu |
| Rapid | da | da | da | da | Nu | da |
| Tcl | da | da | da | da | Nu | da |
| Visual Basic , clasic | da | da | da | da | Nu | Nu |
| Visual Basic .NET | da | da | da | da | Nu | Nu |
| Windows PowerShell | da | da | da | Cadea prin | Nu | Nu |
- ^ Aceasta se referă la potrivirea de tipare ca o construcție condițională distinctă în limbajul de programare - spre deosebire de simplul suport de potrivire a modelelor de șiruri, cum ar fisuportulexpresiei regulate.
- 1 2 3 4 5 Cel mai des întâlnit
else ifîn familia de limbi C, și în COBOL și Haskell, nu este o caracteristică de limbă, ci un set de instrucțiuni imbricate și independente,dacă altfel, combinate cu un aspect particular al codului sursă. Cu toate acestea, acest lucru înseamnă, de asemenea, că nu este nevoie de o altă construcție distinctă - dacă nu este necesară în aceste limbi. - 1 2 În Haskell și F #, nu este necesară o construcție separată de alegere constantă, deoarece aceeași sarcină se poate face cu potrivirea modelelor.
- ^ Într-o
caseconstrucțieRuby,potrivireaexpresiei regulatese numără printre alternativele condiționale de control al fluxului disponibile. Pentru un exemplu, consultațiaceastăîntrebare Stack Overflow. - 1 2 SQL are două construcții similare care îndeplinesc ambele roluri, ambele introduse înSQL-92. O
CASEexpresie „căutată”CASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 [...] ELSE exprDflt ENDfuncționează caif ... else if ... else, în timp ce oCASEexpresie „simplă”:CASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt ENDfuncționează ca o instrucțiune switch. Pentru detalii și exemple, consultațiCase (SQL). - ^ Aritmetica
ifeste învechită în Fortran 90. - ^ Potrivirea modelelor a fost adăugată în Ruby 3.0. Unele construcții de potrivire a modelelor sunt încă experimentale.
Vezi si
- Sucursală (informatică)
- Compilație condiționată
- Expediere dinamică pentru un alt mod de a face alegeri de execuție
- McCarthy Formalism pentru istorie și referințe istorice
- Condiție numită
- Operator relațional
- Test (Unix)
- Condiții Yoda
- Mutare condiționată
Referințe
linkuri externe
-
Medii legate de Condițional (programare computerizată) la Wikimedia Commons - Dacă nu ( video ActionScript 3.0)