Основы языка
© 2000-2011, MetaQuotes Software Corp.
109
Условный оператор ?:
Общая форма тернарного оператора выглядит так:
выражение1? выражение2:выражение3
В качестве первого операнда – "выражение1" – может быть использовано любое выражение,
результатом которого является значение типа bool. Если результат равен true, то выполняется
оператор, заданный вторым операндом, то есть, "выражение2".
Если же первый операнд paвен false, то выполняется третий операнд – "выражениеЗ". Второй и
третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного
типа и не должны иметь тип void. Результатом выполнения условного оператора является
результат "выражения2" либо результат "выражение3", в зависимости от результата
"выражение1".
//--- пронормируем разность между ценами открытия и закрытия на дневной размах
double true_range = (High==Low)?0:(Close-Open)/(High-Low);
Эта запись эквивалентна следующей
double true_range;
if(High==Low)true_range=0; // если High и Low равны
else true_range=(Close-Open)/(High-Low); // если размах ненулевой
Примечание
Будьте внимательны при использовании условного оператора в качестве аргумента перегруженной
функции, так как тип результата условного оператора определяется на момент компиляции
программы. И этот тип определяется как больший тип из типов "выражение2" и "выражение3".
Пример:
void func(double d) { Print("double argument: ",d); }
void func(string s) { Print("string argument: ",s); }
bool Expression1=true;
double Expression2=M_PI;
string Expression3="3.1415926";
void OnStart()
{
func(Expression2);
func(Expression3);
func(Expression1?Expression2:Expression3); // получим предупреждение компилятора о явном приведении к типу string
func(!Expression1?Expression2:Expression3); // получим предупреждение компилятора о явном приведении к типу string
}
// Результат: