b'\n_START_ARTICLE_\nUvjetna naredba\n_START_PARAGRAPH_\nU ra\xc4\x8dunarstvu, uvjetne naredbe, uvjetni izrazi i uvjetni konstrukti su svojstva programskog jezika koja obavljaju razli\xc4\x8dita ra\xc4\x8dunanja ili akcije ovisno o tome evaluira li uvjet koji programer specificira na istinu ili la\xc5\xbe (v. bulovski tip podataka). Osim u slu\xc4\x8daju predvi\xc4\x91anja grananja, ovo se uvijek ostvaruje selektivnim mijenjanjem toka upravljanja ovisno o nekom uvjetu._NEWLINE_U imperativnim programskim jezicima se obi\xc4\x8dno rabi naziv "uvjetna naredba", dok se u funkcijskom programiranju preferiraju nazivi "uvjetni izraz" ili "uvjetni konstrukt", s obzirom da svi ovi nazivi imaju razli\xc4\x8dita zna\xc4\x8denja._NEWLINE_Iako se dinami\xc4\x8dko otpremanje obi\xc4\x8dno ne klasificira kao uvjetni konstrukt, ono predstavlja jo\xc5\xa1 jedan na\xc4\x8din odabira me\xc4\x91u alternativama za vremena izvo\xc4\x91enja.\n_START_SECTION_\nIf-Then(-Else)\n_START_PARAGRAPH_\nif-then konstrukt (ponekad zvan i kao if-then-else) je uobi\xc4\x8dajen u mnogim programskim jezicima. Iako sintaksa poprili\xc4\x8dno varira od jezika do jezika, osnovna struktura (u pseudokodu) izgleda ovako:_NEWLINE_ If (uvjet) Then_NEWLINE_    (naredbe)_NEWLINE_ Else_NEWLINE_    (naredbe)_NEWLINE_ End If_NEWLINE_Kad interpreter prona\xc4\x91e If, o\xc4\x8dekuje bulovski uvjet - primjerice, x > 0, \xc5\xa1to zna\xc4\x8di "varijabla x sadr\xc5\xbei broj koji je ve\xc4\x87i od nule" - i evaluira taj uvjet. Ako je uvjet istinit, blok naredbi nakon then-a se izvr\xc5\xa1uje. Ina\xc4\x8de se izvr\xc5\xa1avanje nastavlja u sljede\xc4\x87em bloku - bilo u Else bloku (koji je obi\xc4\x8dno opcionalan), ili ako nema "Else" bloka, izvr\xc5\xa1uju se naredbe nakon End If._NEWLINE_Nakon \xc5\xa1to su izvr\xc5\xa1eni bilo blok nakon Then bilo blok nakon Else, upravljanje se vra\xc4\x87a na to\xc4\x8dku nakon End If._NEWLINE_U ranim programskim jezicima - napose u dijalektima BASIC-a 1980-ih - if-then naredba je mogla sadr\xc5\xbeavati samo GOTO naredbu. Ovo je vodilo ka te\xc5\xa1ko \xc4\x8ditljivom programerskom stilu poznatom kao \xc5\xa1pageti programiranje. Kao posljedica se toga iznjedrilo struktuirano programiranje, koje dopu\xc5\xa1ta ubacivanje unutar if naredbi (prakti\xc4\x8dki) proizvoljne naredbe, i koje se populariziralo do te mjere da je postalo norma.\n_START_SECTION_\nElse If dijelovi\n_START_PARAGRAPH_\nKori\xc5\xa1tenjem Else If  naredbi mogu\xc4\x87e je kombinirati nekoliko uvjeta. Izvr\xc5\xa1uju se samo naredbe koje slijede prvi uvjet za koji se ustanovi istinitost, dok se sve druge preska\xc4\x8du. Naredbe nakon kona\xc4\x8dnog Else se izvr\xc5\xa1uju ako nijedan od uvjeta nije istinit. Sljede\xc4\x87i je primjer napisan u programskom jeziku Ada:_NEWLINE_ \'\'\'if\'\'\' \'\'uvjet\'\' \'\'\'then\'\'\'_NEWLINE_     \'\'naredbe\'\';_NEWLINE_ \'\'\'elseif\'\'\' \'\'uvjet\'\' \'\'\'then\'\'\'_NEWLINE_     \'\'jo\xc5\xa1 naredbi\'\';_NEWLINE_ \'\'\'elseif\'\'\' \'\'uvjet\'\' \'\'\'then\'\'\'_NEWLINE_     \'\'jo\xc5\xa1 naredbi\'\';_NEWLINE_ ..._NEWLINE_ \'\'\'else\'\'\' \'\'uvjet\'\' \'\'\'then\'\'\'_NEWLINE_     \'\'druge naredbe\'\';_NEWLINE_ \'\'\'end\'\'\' \'\'\'if\'\'\';_NEWLINE_elseif je u Adi jednostavno sintaksni \xc5\xa1e\xc4\x87er za else nakon kojeg slijedi if. U Adi, razlika je u tome \xc5\xa1to je potrebno samo jedno end if, ako se rabi elseif mjesto else nakon kojeg slijedi if._NEWLINE_U nekim drugim jezicima, kao \xc5\xa1to je C, else if doslovno zna\xc4\x8di else nakon kojeg slijedi if - stoga nije potreban niti se pru\xc5\xbea ikakav sintaksni \xc5\xa1e\xc4\x87er.\n_START_SECTION_\nIf izrazi\n_START_PARAGRAPH_\nMnogi jezici podr\xc5\xbeavaju if izraze, sli\xc4\x8dne if naredbama, s tim da vra\xc4\x87aju vrijednost kao rezultat. Stoga su istiniski izrazi (koji evaluiraju na vrijednost), ne naredbe (koje samo obavljaju akciju).\n_START_SECTION_\nKao funkcija\n_START_PARAGRAPH_\nU Visual Basicu i nekim drugim jezicima je dana funkcija IIf koja se mo\xc5\xbee rabiti kao uvjetni izraz. Me\xc4\x91utim, ona se ne pona\xc5\xa1a kao istinski uvjetni izraz, s obzirom da su uvijek evaluirane i grane za istinu i la\xc5\xbe - radi se samo o tome da je rezultat jedne od njih odba\xc4\x8den, dok je rezultat druge vra\xc4\x87en od strane IIf funkcije.\n_START_SECTION_\nU Haskellu\n_START_PARAGRAPH_\nU Haskellu 98 postoji samo jedan if izraz, ne if naredba, i else dio je obavezan.\n_START_SECTION_\nAritmeti\xc4\x8dko IF\n_START_PARAGRAPH_\nFortran 77 ima "aritmeti\xc4\x8dku if" naredbu koja je napola izme\xc4\x91u izra\xc4\x8dunatog IF i case naredbe, zasnovana na trihotomiji , , :_NEWLINE_    IF (iz) labela1, labela2, labela3_NEWLINE_Pri \xc4\x8demu je iz bilo koji numeri\xc4\x8dki izraz (ne nu\xc5\xbeno cjelobrojni) - ovo je ekvivalentno sa:_NEWLINE_    IF (iz < 0) GOTO labela1_NEWLINE_    IF (iz = 0) GOTO labela2_NEWLINE_    IF (iz > 0) GOTO labela3_NEWLINE_S obzirom da je ovaj aritmeti\xc4\x8dki IF istovjetan vi\xc5\xa1estrukim GOTO naredbama, smatra s nestruktuiranom naredbom upravljanja, i ne bi se smio rabiti u slu\xc4\x8daju dostupnosti struktuiranijih naredbi. U praksi se uo\xc4\x8dio uporabni obrazac u kojem je ve\xc4\x87ina aritmeti\xc4\x8dkih IF naredbi referencirala sljede\xc4\x87u naredbu jednom ili dvjema labelama._NEWLINE_Ovo je bila jedina naredba uvjetnog upravljanja u izvornoj implementaciji Fortrana na ra\xc4\x8dunalu IBM 704. Na tom je ra\xc4\x8dunalu mogla biti implementirana poprili\xc4\x8dno u\xc4\x8dinkovito instrukcijama poput \'granaj ako je akumulator negativan\'.\n_START_SECTION_\nAlternativna implementacija\n_START_PARAGRAPH_\nKao suprotnost s drugim jezicima, u Smalltalku uvjetna naredba nije jezi\xc4\x8dni konstrukt ve\xc4\x87 je definirana kao apstraktna metoda u klasi Boolean kao metoda koja prima dva parametra, oba kao zatvorenosti. Boolean ima dvije potklase, True i False, oboje od kojih definiraju metodu, pri \xc4\x8demu True izvr\xc5\xa1uje samo prvu zatvorenost, False samo drugu._NEWLINE_ var := uvjet _NEWLINE_     ifTrue: [ \'foo\' ]_NEWLINE_     ifFalse: [ \'bar\' ]\n_START_SECTION_\nCase i switch naredbe\n_START_PARAGRAPH_\nSwitch naredbe (u nekim jezicima, case naredbe) uspore\xc4\x91uju danu vrijednost sa specificiranim konstantama i poduzimaju odgovaraju\xc4\x87u akciju ovisno o prvoj sparuju\xc4\x87oj konstanti. Primjer slijeva je napisan u Pascalu, dok je primjer zdesna napisan u C-u._NEWLINE_    \'\'\'case\'\'\' nekiZnak \'\'\'of\'\'\'                \'\'\'switch\'\'\' (nekiZnak) {_NEWLINE_       \'a\': akcijaAkoA;                \'\'\'case\'\'\' \'a\': akcijaAkoA;_NEWLINE_       \'x\': akcijaAkoX;                    break;_NEWLINE_       \'y\',\'z\':AkcijaAkoYiZ;           \'\'\'case\'\'\' \'x\': akcijaAkoX;_NEWLINE_    \'\'\'end\'\'\';                                   break;_NEWLINE_                                       \'\'\'case\'\'\' \'y\':_NEWLINE_                                       \'\'\'case\'\'\' \'z\': AkcijaAkoYiZ;_NEWLINE_                                           break;_NEWLINE_                                       \'\'\'default\'\'\': akcijAkoNemaSparivanja;_NEWLINE_                                    }\n_START_SECTION_\nSparivanje uzoraka\n_START_PARAGRAPH_\nSparivanje uzoraka je sofisticirana alternativa i if-then-elseif i jednostavnim gorespomenutim case ili switch naredbama. Dostupno je u nekim programskim jezicima poput onih iz ML porodice. Slijedi jednostavan primjer napisan u O\'Caml jeziku:_NEWLINE_ \'\'\'match\'\'\' vo\xc4\x87e \'\'\'with\'\'\'_NEWLINE_ \'\'\'|\'\'\' "jabuka" \'\'\'->\'\'\' skuhaj pitu_NEWLINE_ \'\'\'|\'\'\' "ananas" \'\'\'->\'\'\' napravi frape_NEWLINE_ \'\'\'|\'\'\' "banana" \'\'\'->\'\'\' mije\xc5\xa1aj\'\'\';;\'\'\'_NEWLINE_Istinska mo\xc4\x87 sparivanja uzoraka, me\xc4\x91utim, le\xc5\xbei u mogu\xc4\x87nosti konciznog (a) sparivanja nad uzorcima podatkovnih struktura i (b) istovremenog vezanja varijabli. Slijedi primjer napisan u Haskellu koji osvjetljuje oba navedena svojstva:_NEWLINE_ map _ []      \'\'\'=\'\'\' []_NEWLINE_ map f (h : t) \'\'\'=\'\'\' f h : map f t_NEWLINE_Ovaj kod definira poznatu funkciju map, koja primijenjuje prvi argument (funkciju) na svaki od elemenata drugog argumenta (liste), i vra\xc4\x87a rezultiraju\xc4\x87u listu. Dvije linije koda nisu odvojene definicije funkcije, ve\xc4\x87 se mjesto toga radi o definiciji funkcije u dva slu\xc4\x8daja - prvi u slu\xc4\x8daju prazne liste (pri \xc4\x8demu funkcija vra\xc4\x87a praznu listu), drugi u slu\xc4\x8daju neprazne liste._NEWLINE_Sparivanje uzoraka nije strogo govore\xc4\x87i uvijek izborni konstrukt, s obzirom da je u Haskellu dopu\xc5\xa1teno napisati samo jednu alternativu, koja \xc4\x87e uvijek biti sparena - u ovoj situaciji se ne rabi kao izborni konstrukt, ve\xc4\x87 jednostavno kao na\xc4\x8din vezanja varijabli. Me\xc4\x91utim, \xc4\x8desto se rabi kao izborni konstrukt u jezicima u kojima je dostupan.\n_START_SECTION_\nPredvi\xc4\x91anje grananja\n_START_PARAGRAPH_\nU asemblerskom jeziku, predvi\xc4\x91anje grananja je svojstvo instrukcijskih skupova pojedinih CPU-ova koje dopu\xc5\xa1ta uvjetno izvo\xc4\x91enje instrukcija bez nu\xc5\xbenog obavljanja skupih uvjetnih skokova.'