Тернарна умовна операціяТернарна умовна операція (лат. ternarius — «потрійний») (зазвичай записується як Зазвичай тернарна умовна операція асоціюється з операцією ВизначенняБезвідносно до певної мови програмування тернарну операцію можна визначити так: логічний вираз ? вираз 1 : вираз 2 Алгоритм роботи операції наступний:
Потрібно звернути увагу, що обчислюється тільки один з виразів: Використання і реалізаціяТернарна умовна операція використовується у виразах для отримання одного з двох варіантів залежно від умови. alarm_time = today in [SUNDAY, MONDAY] ? 12.00 : 8.00
У цьому прикладі умовного електронного будильника виставляється час, коли він повинен дзвонити, залежно від дня тижня. Потрібно зауважити, що приклад знову наведений для деякої абстрактної алгоритмічної мови програмування. У наступному прикладі обчислюється значення найпростішого дельта-символу. y = x == 0 ? 1 : 0 У наступному прикладі дана операція використана в ситуації, не пов'язаній з присвоюванням: sprintf(
Title,
"%s %s",
tv_system == TV_PAL ?
"PAL" :
"SECAM",
tv_input ?
Tv_Name[ tv_input - 1 ]:
"TEST"
);
У цьому разі еквівалентна конструкція з використанням СУ Сі тернарна операція має наступний синтаксис:[2] o1 ? o2 : o3
Як відомо,[кому?] у Сі немає логічного типу даних (у C99 з'явився логічний тип У наступному прикладі обчислюється мінімальне з чисел min = (a < b) ? a : b;
C++У C++ тернарна умовна операція має той самий синтаксис, що й у Сі.[3] Однак через наявність різниці між ініціалізацією і присвоюванням, бувають ситуації, коли операцію #include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char** argv)
{
string name;
ofstream fout;
if (argc > 1 && argv[1])
{
name = argv[1];
fout.open(name.c_str(), ios::out | ios::app);
}
ostream& sout = name.empty() ? cout : fout;
return 0;
}
Тут змінна Крім того, тернарна умовна операція може бути застосована в лівій частині оператора присвоєння: 0. #include <iostream>
1. int main ()
2. {
3. int a=0, b=0;
4.
5. const bool cond = ...;
6. (cond ? a : b) = 1;
7. std::cout << "a=" << a << ','
8. << "b=" << b << '\n';
9. }
У цьому прикладі, якщо логічна змінна Pythona = 42
b = 41
result = a if a > b else b
assert result == 42
PHP $a = 1==0 ? "first value" :
(2==0 ? "second value" :
(3==3 ? "result value" : "default value"));
Тернарний оператор у PHP еквівалентний більш довгій конструкції // Перший приклад
$result = isset($a) ? $a : 'DefaultValue';
// Дргуий приклад
if (isset($a)) {
$result = $a;
} else {
$result = 'DefaultValue';
}
Такі конструкції часто застосовуються, щоб у будь-якому разі ініціалізувати змінну для наступних обчислень (інакше PHP видасть помилку рівня Починаючи з версії 5.3 з'явилася можливість не вказувати другий параметр операції. Наприклад, два наступних записи еквівалентні: $Variable = $_GET['Parameter'] ? $_GET['Parameter'] : 'DefaultValue';
$Variable = $_GET['Parameter'] ?: 'DefaultValue';
JavaScriptvar a = 1==0 ? "first value" :
2==0 ? "second value" :
3==3 ? "result value" : "default value"
RubyЗагальний синтаксис аналогічний C-подібним мовам. print true ? "true" : "false" # Виведе true в стандартний вивід
C#На тернарну операцію накладаються додаткові обмеження, пов'язані з типобезпекою. Вирази 1 і 2 повинні бути одного типу. Це призводить до наступного: int a = 1;
double b = 0.0;
int nMax = (a>b) ? a : b;
Такий вихідний код не компілюватиметься незважаючи на те, що в кінцевому підсумку значення int a = 1;
double b = 0.0;
int nMax;
// Можна вчинити так:
nMax = (int) ((a>b) ? a : b) ;
// ...або так
nMax = (a>b) ? a : (int)b;
Visual BasicУ класичній версії мови існує тернарний оператор у вигляді функції Dim iCount As Long
Public Sub Main()
iCount = 1
MsgBox IIf(1 = 1, FuncYes, FuncNo)
'Змінна iCount буде містити "3", оскільки обидві функції будуть виконані
MsgBox iCount
End Sub
Public Function FuncYes() As String
iCount = iCount + 1
FuncYes = "Так"
End Function
Public Function FuncNo() As String
iCount = iCount + 1
FuncNo = "Ні"
End Function
Для заміни функції If Expr Then TruePart Else FalsePart
З появою VB.NET, у синтаксис мови був доданий звичний тернарний оператор і записується він як Turbo BasicСинтаксис[6]:
Будь-який результат %TRUE = -1
%FALSE = 0
A$ = "M"
B$ = "N"
C! = 43
D# = 44
IF A$>B$ <> %FALSE, THEN RESULT# = C! ELSE RESULT# = D#
PRINT RESULT#
За допомогою функції A$ = "M"
B$ = "N"
C! = 43
D# = 44
COND = A$<B$ 'COND = любое logic_expression
PRINT "FN IfThenElse(X1,X2,X3) =";FN IfThenElse(COND,C!,D#)
END
DEF FN IfThenElse(X1,X2,X3)
IF X1 <> 0 THEN FN IfThenElse = X2 ELSE FN IfThenElse = X3
END DEF
Примітки
|
Portal di Ensiklopedia Dunia