Самообучение языку MQL5 с полного нуля - страница 32

 
#property script_show_inputs
input string inA = "достаточно времени";
input string inB = "достаточно терпения";
const string a = "достаточно времени";
const string b = "достаточно терпения";

//+------------------------------------------------------------------+
void OnStart()
{
   if(inA == a && inB == b)
   {
      Print("я выучу язык MQL 5");
   }
}
//+------------------------------------------------------------------+

UPD:

не люблю строки, благо MQL позволяет пояснения к инпут-переменным и множествам создавать в виде комментария, лучше так:

#property script_show_inputs
enum E_STATE
{
   STATE_A/*достаточно времени*/,
   STATE_B/*НЕ достаточно времени*/,
   STATE_C/*достаточно терпения*/,
   STATE_D/*НЕ достаточно терпения*/,
   STATE_E/*достаточно денег*/,
   STATE_F/*НЕ достаточно денег*/
};
input E_STATE inA = STATE_A;
input E_STATE inB = STATE_C;

//+------------------------------------------------------------------+
void OnStart()
{
   if(inA == STATE_A && inB == STATE_C)
   {
      Print("я выучу язык MQL 5");
   }
   else
   {
      Print("я НЕ выучу язык MQL 5");
   }
}
//+------------------------------------------------------------------+
 
Igor Makanu:

UPD:

не люблю строки, благо MQL позволяет пояснения к инпут-переменным и множествам создавать в виде комментария, лучше так:

Класс! На примере такого простого задания, столько разных вариантов решения! Спасибо.

С уважением, Владимир.

 
MrBrooklin:

Класс! На примере такого простого задания, столько разных вариантов решения! Спасибо.

С уважением, Владимир.

Сейчас правильнее было бы, следовать логике, а не упражнятся в синтаксисе. Логика подсказывает, что результат вопроса "выучу или не выучу язык" может вернуть только функция рассчитывающая какие то параметры с этим связанные. Поскольку функция должна вернуть результат да/нет, то она обьявляется с типом bool. Вызывать функцию можно прямо из условия if().

if(Достаточно_времени() && Достаточно_терпения()) Print("Я выучу язык!");

else Print("Не выучу язык...");


Теперь, подумайте над содержанием функций.

 
Реter Konow:
Увы, это неверная, уводящая неизвестно куда дорога обучения. Причем здесь "state" и это перечесление? Это выдумка на ровном месте.

Сейчас правильнее было бы, следовать логике, а не упражнятся в синтаксисе. Логика подсказывает, что результат вопроса "выучу или не выучу язык" может вернуть только функция рассчитывающая какие то параметры с этим связанные. Поскольку функция должна вернуть результат да/нет, то она обьявляется с типом bool. Вызывать функцию можно прямо из условия if().

if(Достаточно_времени() && Достаточно_терпения()) Print("Я выучу язык!");

else Print("Увы, не выучу язык...");


Теперь, подумайте над содержанием функций.

придираетесь, там конечно коммент не полный, первая переменная inA это как должно быть, условие выполнения так сказать, а вторая a, это как есть на самом деле)))))))))) И именно поэтому   inA вводиться через инпут, и неизменна, а переменная а .... хотя да, там не константная переменная должна быть, а статик или просто текстовый тип))))

Но все равно смысл есть)

 
MrBrooklin:

Класс! На примере такого простого задания, столько разных вариантов решения! Спасибо.

С уважением, Владимир.

А есть еще шаблоны...

#property script_show_inputs

enum EStateTime
{
   TimeOk=0/*достаточно времени*/,
   TimeFail/*НЕ достаточно времени*/
};
enum EStatePatience{
   PatienceOk=0/*достаточно терпения*/,
   PatienceFail/*НЕ достаточно терпения*/
};
enum EStateMoney{
   MoneyOk=0/*достаточно денег*/,
   MoneyFail/*НЕ достаточно денег*/
};
input EStateTime time = TimeOk;
input EStatePatience patience = PatienceOk;
input EStateMoney money = MoneyFail;

//+------------------------------------------------------------------+
void OnStart()
{
   if(Check(time) && Check(patience))
   {
      Print("я выучу язык MQL 5",(Check(money)?NULL:" и это не зависит от денег"));
   }
   else
   {
      Print("я НЕ выучу язык MQL 5");
   }
}
//---------------------------------------------------------------------
template<typename T>
bool Check(T condition){
   return condition==0;
}

Ага, еще и тернарный оператор затесался)

Примерно с этой тропинки (понимания и умения это писать) уже и начинается, собственно, путь разработчика. IMHO

Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
  • www.mql5.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void. Результатом...
 
Реter Konow:
Увы, это неверная, уводящая неизвестно куда дорога обучения. Причем здесь "state" и это перечесление? Это выдумка на ровном месте.

Сейчас правильнее было бы, следовать логике, а не упражнятся в синтаксисе. Логика подсказывает, что результат вопроса "выучу или не выучу язык" может вернуть только функция рассчитывающая какие то параметры с этим связанные. Поскольку функция должна вернуть результат да/нет, то она обьявляется с типом bool. Вызывать функцию можно прямо из условия if().

if(Достаточно_времени() && Достаточно_терпения()) Print("Я выучу язык!");

else Print("Не выучу язык...");


Теперь, подумайте над содержанием функций.

Здравствуйте, Петер! Обязательно подумаю! Только всё дело в том, что вопрос был задан:

"...Контрольный вопрос: "достаточно времени" — какого типа данная переменная может быть, чтобы не было предупреждений компилятора?..."

Вот на него и пытался ответить. За Ваш пример - отдельное спасибо!


С уважением, Владимир.

 
Valeriy Yastremskiy:

придираетесь, там конечно коммент не полный, первая переменная inA это как должно быть, условие выполнения так сказать, а вторая a, это как есть на самом деле)))))))))) И именно поэтому   inA вводиться через инпут, и неизменна, а переменная а .... хотя да, там не константная переменная должна быть, а статик или просто текстовый тип))))

Но все равно смысл есть)

Ок, может и придираюсь, но все таки, перечисления сейчас лишние для ученика. Надо же помнить о последовательности в программе обучения. Тогда уж давайте сразу класс напишем.))))
 
Реter Konow:
Ок, может и придираюсь, но все таки, перечисления сейчас лишние для ученика. Надо же помнить о последовательности в программе обучения. Тогда уж давайте сразу класс напишем.))))

Не-не-не!!! У меня и так каша в голове!

С уважением, Владимир.

 
MrBrooklin:

Здравствуйте, Петер! Обязательно подумаю! Только всё дело в том, что вопрос был задан:

"...Контрольный вопрос: "достаточно времени" — какого типа данная переменная может быть, чтобы не было предупреждений компилятора?..."

Вот на него и пытался ответить.


С уважением, Владимир.

Да, здравствуйте. Верно, вопрос был именно такой, но Вы еще не ответили на него правильно, потому что тип string, в контексте содержания условия неверен. Компилятор не выдаст сообщение об ошибке или предупреждение, но условие дефектно по своему смыслу. 
 
MrBrooklin:

Не-не-не!!! У меня и так каша в голове!

С уважением, Владимир.

Так и я о том. Не нужно сейчас перечислений и лишнего синтаксиса.