expert.mqh

 

Доброго времени суток!

Читаю на досуге expert.mqh, не подскажет ли кто, что это за синтаксис такой интересный?

int digits_adjust=(m_symbol.Digits()==3 || m_symbol.Digits()==5) ? 10 : 1;

Спасибо! 

 
ns_k:

Доброго времени суток!

Читаю на досуге expert.mqh, не подскажет ли кто, что это за синтаксис такой интересный?

int digits_adjust=(m_symbol.Digits()==3 || m_symbol.Digits()==5) ? 10 : 1;

Спасибо! 

https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%80%D0%BD%D0%B0%D1%80%D0%BD%D0%B0%D1%8F_%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F
Тернарная условная операция — Википедия
  • ru.wikipedia.org
Терна́рная усло́вная опера́ция (от лат.   — «тройной») (обычно записывается как ) — во многих языках программирования операция, возвращающая свой второй или третий операнд в зависимости от значения логического выражения, заданного первым операндом. Как можно судить из названия, тернарная операция принимает всего три указанных операнда. Аналогом...
 
ns_k:

Доброго времени суток!

Читаю на досуге expert.mqh, не подскажет ли кто, что это за синтаксис такой интересный?

int digits_adjust=(m_symbol.Digits()==3 || m_symbol.Digits()==5) ? 10 : 1;

Спасибо! 

Дополнительный множитель унифицирующий инпут параметр в зависимости от 4-х или 5-ти значных котировок.

Я в таком случае делаю так:

(m_symbol.Digits()%2==0?1:10)

если же вы спрашиваете о    ?:    то курите мануал, это упрощённый аналог if(){}else{}, с возможностью вызова прямо в выражении.

Справочник MQL5 / Основы языка / Операторы / Условный оператор ?:

 
Urain:

Дополнительный множитель унифицирующий инпут параметр в зависимости от 4-х или 5-ти значных котировок.

Я в таком случае делаю так:

если же вы спрашиваете о    ?:    то курите мануал, это упрощённый аналог if(){}else{}, с возможностью вызова прямо в выражении.

Справочник MQL5 / Основы языка / Операторы / Условный оператор ?:

Точно, вопрос был про синтаксис, спасибо! Через отладчик понял это 
 

На мой взгляд, использование "вопросика"  - приносит больше проблем, чем пользы. Именно из-за его возможности вызова прямо в выражении.

Меня всегда удивляли "задачки" в виде строки с огромным числом  разнообразных элементов, которые, безусловно, имеют программерский смысл, но до которого докопаться можно только спустя полчаса кропотливого разбора.

Наоборот, синтаксис программы должен быть как можно проще и понятнее. Всевозможных "ухищрений" с вопросиками, с кучей разнообразных скобок и звездочек - должно быть поменьше. 

 
Laryx:

На мой взгляд, использование "вопросика"  - приносит больше проблем, чем пользы. Именно из-за его возможности вызова прямо в выражении.

Меня всегда удивляли "задачки" в виде строки с огромным числом  разнообразных элементов, которые, безусловно, имеют программерский смысл, но до которого докопаться можно только спустя полчаса кропотливого разбора.

Наоборот, синтаксис программы должен быть как можно проще и понятнее. Всевозможных "ухищрений" с вопросиками, с кучей разнообразных скобок и звездочек - должно быть поменьше. 

Спорное утверждение. Иногда в использовании, например, операции >> есть и чисто практический смысл, она выполняется гораздо быстрее, чем деление на 2
 

ns_k:
Спорное утверждение. Иногда в использовании, например, операции >> есть и чисто практический смысл, она выполняется гораздо быстрее, чем деление на 2

 

Это не противоречит моему утверждению. Глядеть надо по ситуации.

Действительно, в "узких местах", там где циклы крутятся миллионы раз, где каждый лишний машинный такт вполне ощутимо меняет продолжительность работы - для целых чисел следует применять операцию сдвига, а не деление на степень двойки. 

Но "пихать" сдвиг ВЕЗДЕ, даже там, где код исполняется один раз в сутки - считаю нецелесообразным, именно из-за того, что воспринять значение операции сдвига сложнее, чем операции деления на 2.  

Я не могу стопроцентно утверждать за MQL, но в MSVC - машинный код, генерируемый "вопросиком" и соответствующей конструкцией "if" - в простых случаях одинаков. За сложные случаи (вот, типа использования внутри выражения) - поручиться не могу, не проверял. Поэтому - в этих случаях, необходимо, действительно, глядеть по ситуации - что важнее - то ли прирост эффективности, то ли сохранение понятности.

 
Laryx:

Это не противоречит моему утверждению. Глядеть надо по ситуации.

Действительно, в "узких местах", там где циклы крутятся миллионы раз, где каждый лишний машинный такт вполне ощутимо меняет продолжительность работы - для целых чисел следует применять операцию сдвига, а не деление на степень двойки. 

Но "пихать" сдвиг ВЕЗДЕ, даже там, где код исполняется один раз в сутки - считаю нецелесообразным, именно из-за того, что воспринять значение операции сдвига сложнее, чем операции деления на 2.  

Я не могу стопроцентно утверждать за MQL, но в MSVC - машинный код, генерируемый "вопросиком" и соответствующей конструкцией "if" - в простых случаях одинаков. За сложные случаи (вот, типа использования внутри выражения) - поручиться не могу, не проверял. Поэтому - в этих случаях, необходимо, действительно, глядеть по ситуации - что важнее - то ли прирост эффективности, то ли сохранение понятности.

+1 :)