www.wikidata.uk-ua.nina.az
U Vikipediyi ye statti pro inshi znachennya cogo termina Operaciya Ternarna umovna operaciya lat ternarius potrijnij zazvichaj zapisuyetsya yak u bagatoh movah programuvannya operaciya yaka povertaye svij drugij abo tretij operand zalezhno vid znachennya logichnogo virazu zadanogo pershim operandom Yak viplivaye z nazvi ternarna operaciya prijmaye vsogo tri vkazanih operandi Analogom ternarnoyi umovnoyi operaciyi v matematichnij logici i bulevij algebri ye umovna diz yunkciya yaka zapisuyetsya u viglyadi p q r displaystyle p q r i realizuye algoritm Yaksho p displaystyle p to q displaystyle q inakshe r displaystyle r sho mozhna perepisati yak q displaystyle q abo r displaystyle r zalezhno vid p displaystyle p abo ne p displaystyle p Zazvichaj ternarna umovna operaciya asociyuyetsya z operaciyeyu yaka vikoristovuyetsya v si podibnih movah programuvannya Naspravdi podibni operaciyi z inshim sintaksisom ye i v bagatoh dalekih za sintaksisom vid Si movah programuvannya Do najbilsh populyarnih mov sho mistyat ternarnu umovnu operaciyu mozhna vidnesti C C JavaScript Swift Objective C C D Java Perl PHP Python Tcl Ruby Verilog Turbo Basic ta inshi Svoyeyu poyavoyu bezposeredno v ternarnij formi cya operaciya zobov yazana movi Algol 60 u yakij vona mala sintaksis b if b o1 b then b o2 b else b o3 i potim movi BCPL o1 gt o2 o3 1 zamist zvichnogo teper o1 o2 span span o3 Prototipom ciyeyi operaciyi takozh ye umovna funkciya cond movi Lisp yaka zapisuyetsya za pravilami Lispa v prefiksnij formi i maye dovilnu kilkist argumentiv Zmist 1 Viznachennya 2 Vikoristannya i realizaciya 2 1 S 2 2 C 2 3 Python 2 4 PHP 2 5 JavaScript 2 6 Ruby 2 7 C 2 8 Visual Basic 2 9 Turbo Basic 3 PrimitkiViznachennya RedaguvatiBezvidnosno do pevnoyi movi programuvannya ternarnu operaciyu mozhna viznachiti tak logichnij viraz viraz 1 viraz 2 Algoritm roboti operaciyi nastupnij Obchislyuyetsya logichnij viraz Yaksho logichnij viraz istinnij to obchislyuyetsya znachennya virazu viraz 1 v inshomu razi znachennya virazu viraz 2 Obchislene znachennya povertayetsya Potribno zvernuti uvagu sho obchislyuyetsya tilki odin z viraziv viraz 1 abo viraz 2 Ce vidpovidaye principu linivih obchislen i zrobleno ne tak dlya optimizaciyi yak dlya rozshirennya mozhlivostej tak viraz x lt 0 0 span span sqrt x absolyutno korektnij nezvazhayuchi na te sho korin z vid yemnih chisel ne beretsya Vikoristannya i realizaciya RedaguvatiTernarna umovna operaciya vikoristovuyetsya u virazah dlya otrimannya odnogo z dvoh variantiv zalezhno vid umovi alarm time today in SUNDAY MONDAY 12 00 8 00 U comu prikladi umovnogo elektronnogo budilnika vistavlyayetsya chas koli vin povinen dzvoniti zalezhno vid dnya tizhnya Potribno zauvazhiti sho priklad znovu navedenij dlya deyakoyi abstraktnoyi algoritmichnoyi movi programuvannya U nastupnomu prikladi obchislyuyetsya znachennya najprostishogo delta simvolu y x 0 1 0 U nastupnomu prikladi dana operaciya vikoristana v situaciyi ne pov yazanij z prisvoyuvannyam sprintf Title s s tv system TV PAL PAL SECAM tv input Tv Name tv input 1 TEST U comu razi ekvivalentna konstrukciya z vikoristannyam if then else vimagala b zapisu vikliku funkciyi sprintf chotiri razi Abo yak alternativa treba bulo b napisati analogichnij za priznachennyam ale formalno ne ekvivalentnij kod z vikoristannyam dvoh dodatkovih zminnih abo dekilkoh poslidovnih viklikiv sprintf S Redaguvati U Si ternarna operaciya maye nastupnij sintaksis 2 o1 o2 o3 Yak vidomo komu u Si nemaye logichnogo tipu danih u C99 z yavivsya logichnij tip Bool Tomu operand o1 povinen buti chislom cilim abo dijsnim abo vkazivnikom Spochatku obchislyuyetsya same jogo znachennya Vono porivnyuyetsya z nulem i yaksho vono ne dorivnyuye nulyu obchislyuyetsya i povertayetsya o2 u razi rivnosti o3 Operandi o2 i o3 mozhut buti riznih kazhuchi zagalom nezbizhnih tipiv zokrema void U nastupnomu prikladi obchislyuyetsya minimalne z chisel a i b min a lt b a b C Redaguvati U C ternarna umovna operaciya maye toj samij sintaksis sho j u Si 3 Odnak cherez nayavnist riznici mizh inicializaciyeyu i prisvoyuvannyam buvayut situaciyi koli operaciyu ne mozhna zaminiti konstrukciyeyu if then else yak napriklad u nastupnomu vipadku include lt iostream gt include lt fstream gt include lt string gt using namespace std int main int argc char argv string name ofstream fout if argc gt 1 amp amp argv 1 name argv 1 fout open name c str ios out ios app ostream amp sout name empty cout fout return 0 Tut zminna sout inicializuyetsya v moment ogoloshennya rezultatom roboti ternarnoj operaciyi Podibnogo efektu ne vdalosya b dosyagti prostim prisvoyuvannyam u tomu chi inshomu vipadku Krim togo ternarna umovna operaciya mozhe buti zastosovana v livij chastini operatora prisvoyennya 0 include lt iostream gt 1 int main 2 3 int a 0 b 0 4 5 const bool cond 6 cond a b 1 7 std cout lt lt a lt lt a lt lt 8 lt lt b lt lt b lt lt n 9 U comu prikladi yaksho logichna zminna cond u ryadku 5 mistitime znachennya true to znachennya 1 bude prisvoyeno zminnij a inakshe vono bude prisvoyeno zminnij b Python Redaguvati a 42 b 41 result a if a gt b else b assert result 42 Takozh mozhna realizuvati cherez spisok lt viraz 1 gt lt viraz 2 gt lt umova gt Povernetsya rezultat viraz 1 yaksho umova hibna i viraz 2 yaksho umova istinna Yaksho umova ne bude bulevimi virazom mozhlivij vihid za mezhi spisku z vinyatkom PHP Redaguvati a 1 0 first value 2 0 second value 3 3 result value default value Ternarnij operator u PHP ekvivalentnij bilsh dovgij konstrukciyi if else Nastupni dva prikladi ekvivalentni Pershij priklad result isset a a DefaultValue Drguij priklad if isset a result a else result DefaultValue Taki konstrukciyi chasto zastosovuyutsya shob u bud yakomu razi inicializuvati zminnu dlya nastupnih obchislen inakshe PHP vidast pomilku rivnya E NOTICE Pochinayuchi z versiyi 5 3 z yavilasya mozhlivist ne vkazuvati drugij parametr operaciyi Napriklad dva nastupnih zapisi ekvivalentni Variable GET Parameter GET Parameter DefaultValue Variable GET Parameter DefaultValue JavaScript Redaguvati var a 1 0 first value 2 0 second value 3 3 result value default value Ruby Redaguvati Zagalnij sintaksis analogichnij C podibnim movam print true true false Vivede true v standartnij vivid C Redaguvati Na ternarnu operaciyu nakladayutsya dodatkovi obmezhennya pov yazani z tipobezpekoyu Virazi 1 i 2 povinni buti odnogo tipu Ce prizvodit do nastupnogo int a 1 double b 0 0 int nMax a gt b a b Takij vihidnij kod ne kompilyuvatimetsya nezvazhayuchi na te sho v kincevomu pidsumku znachennya nMax dorivnyuvatime a Oskilki a i b povinni buti odnogo tipu a pidvishitsya do double shob vidpovidati b Tip rezultivnogo znachennya ternarnoyi operaciyi viyavlyayetsya double i cej tip povinen buti znizhenij do int pid chas prisvoyennya 4 int a 1 double b 0 0 int nMax Mozhna vchiniti tak nMax int a gt b a b abo tak nMax a gt b a int b Visual Basic Redaguvati U klasichnij versiyi movi isnuye ternarnij operator u viglyadi funkciyi IIf Expr TruePart FalsePart Cya funkciya maye pevnu osoblivist yaka polyagaye v tomu sho pid chas ocinki virazu Expr takozh budut obchislyuvatisya TruePart i FalsePart nezalezhno vid rezultatu virazu istinnij vin chi hibnij Ce mozhe prizvesti do nespodivanih rezultativ a inodi j do vpovilnennya vikonannya kodu yaksho v roli znachen bude viklik funkcij z trivalimi operaciyami Dim iCount As Long Public Sub Main iCount 1 MsgBox IIf 1 1 FuncYes FuncNo Zminna iCount bude mistiti 3 oskilki obidvi funkciyi budut vikonani MsgBox iCount End Sub Public Function FuncYes As String iCount iCount 1 FuncYes Tak End Function Public Function FuncNo As String iCount iCount 1 FuncNo Ni End Function Dlya zamini funkciyi IIf mozhna perepisati viraz v odin ryadok ale ce ne bude analogom funkciyi a bude lishe korotka forma zapisu operatora rozgaluzhennya If Expr Then TruePart Else FalsePart Z poyavoyu VB NET u sintaksis movi buv dodanij zvichnij ternarnij operator i zapisuyetsya vin yak If Expr TruePart FalsePart Cej operator vikoristovuye skorocheni obchislennya na vidminu vid funkciyi IIf yaka takozh dlya sumisnosti z poperednimi versiyami dostupna rozrobniku 5 Turbo Basic Redaguvati Sintaksis 6 b IF b logic expression lt gt 0 b THEN b statement s b ELSE b statement s Bud yakij rezultat logic expression ne rivnij 0 vvazhayetsya FALSE ale ne TRUE rivnij tilki 1 logic expression mozhe buti chislovim numeric tak i simvolnim string U razi simvolnogo virazu obchislennya provodyatsya z ASCII kodami simvoliv TRUE 1 FALSE 0 A M B N C 43 D 44 IF A gt B lt gt FALSE THEN RESULT C ELSE RESULT D PRINT RESULT Za dopomogoyu funkciyi FN IfThenElse X1 X2 X3 zamist infiksnogo vidu ternarnogo operatora If Then X1 X2 Else X3 mozhna koristuvatisya prefiksnim vidom ternarnogo operatora IfThenElse A M B N C 43 D 44 COND A lt B COND lyuboe logic expression PRINT FN IfThenElse X1 X2 X3 FN IfThenElse COND C D END DEF FN IfThenElse X1 X2 X3 IF X1 lt gt 0 THEN FN IfThenElse X2 ELSE FN IfThenElse X3 END DEFPrimitki Redaguvati BCPL Ternary operator page 15 BCPL Reference Manual Arhiv originalu za 31 bereznya 2012 Procitovano 28 veresnya 2017 Yu Yu Gromov S I Tatarenko Programmirovanie na yazyke SI B Straustrup Mova programuvannya S Operator C https msdn microsoft com ru ru library ty67wk28 aspx Operator If Visual Basic https msdn microsoft com ru ru library bb513985 aspx Borland Turbo BASIC Owners Handbook 1987 Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno zhovten 2017 nbsp Ce nezavershena stattya pro movi programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Otrimano z https uk wikipedia org w index php title Ternarna umovna operaciya amp oldid 40243107