Тернарна условна операция
От Seo Wiki - оптимизация и програмиране за търсачки
Троичен условен оператор(обикновено написан като ?: ) е оператор в много езици за програмиране, който връща своя втори или трети операнд в зависимост от стойността на логическия израз, даден от първия операнд. Както подсказва името, троичната операция приема само три посочени операнда.
Всъщност троичната операция в императивните езици за програмиране обикновено е излишна и е синтактична захар. Цялата му функционалност обикновено може да се реализира с прости условни изрази.
Съдържание
Определение
Независимо от конкретния език за програмиране, троичната операция може да се дефинира, както следва:
Синтаксисът на езика C се използва тук като най-популярен.
Алгоритъмът на работа е както следва:
- Булевият израз се оценява.
- Ако логическият израз е верен, тогава се изчислява стойността на израза израз 1, в противен случай се оценява стойността на израза израз 2.
- Връща се изчислената стойност.
Обърнете внимание, че се оценява самоединот изразите: израз 1 или израз 2 . Това се прави с цел оптимизация и в известен смисъл отговаря на принципа на мързеливото оценяване.
Използване и внедряване
Троичният условен оператор се използва в изрази за получаване на една от двете опции в зависимост от условието.
В този пример на условно програмируем електронен будилник се задава часът, в който трябва да звъни, в зависимост от текущия ден от седмицата. Трябва да се отбележи, че примерът отново е даден за някакъв абстрактен алгоритмичен език за програмиране.
INСледващият пример изчислява стойността на най-простата делта функция на Дирак.
Всъщност незабавното присвояване на резултата от троична условна операция рядко е оправдано от гледна точка на стила на програмиране, тъй като такива изрази са компактно пренаписани като еквивалентна конструкция if-then-else. По-оправдано е тази операция да се използва в по-сложни конструкции без присвояване, например в действителните параметри на извикване на функция:
В този случай еквивалентната конструкция, използваща if-then-else, би изисквала извикването на sprintf да бъде написано четири пъти. Или, алтернативно, би било необходимо да се напише код, подобен по предназначение (но не формално еквивалентен), като се използват две допълнителни временни променливи или няколко последователни извиквания на sprintf.
Стернарната операция има следния синтаксис: [2]
Както знаете, в C няма булев тип данни. Следователно операнд o1 трябва да бъде число (цяло или реално) или указател. Първо се изчислява стойността му. Сравнява се с нула и ако не е равно на нула се изчислява и връща o2, при равенство - o3 . Операндите o2 и o3 могат да бъдат от различни, най-общо казано, несъвпадащи типове, включително void.
Следният пример изчислява минимума от a и b:
В C++ троичният условен оператор има същия синтаксис като в C. [3] Въпреки това, поради разликата между инициализация и присвояване, има ситуации, при които операцията ?: не може да бъде заменена от конструкция if-then-else, както в следния случай:
Тройната операция подлежи на допълнителни ограничения, свързани с безопасността на типа. Изрази 1 и 2 трябва да са от един и същи тип. Това води до следното:
Такиваизходният код няма да се компилира въпреки факта, че nMax в крайна сметка ще бъде равен наaТъй катоaиbтрябва да са от един и същи тип,aще бъде повишен до двойно, за да съответства наb. Типът на получената стойност на троичната операция е двоен и този тип трябва да бъде низходящ до int при присвояване:
Бележки
- ↑BCPL Тернарен оператор (страница 15).Справочно ръководство за BCPL.
- ↑Ю. Ю. Громов, С. И. Татаренко .1.3.12. Условна операция // Програмиране на език C / Рецензент: проф. А. П. Афанасиев.
- ↑Б. Страуструп .7.13. Условна операция // Справочно ръководство за C++.
Литература
Стефан Ранди Дейвис, Чък СферГлава 4. Оператори // C# 2005 за манекени = C# 2005 за манекени / редактирано от Т. Г. Сковородникова. — М.-СПб.: Уайли, Диалектика, 2006. — С. 83. — ISBN 5-8459-1068-4cs. en. ja:条件演算子 pl:Operator warunkowy zh:条件运算符