Autoaprendizaje del lenguaje MQL5 desde cero - página 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:

No me gustan las cadenas, menos mal que MQL permite crear explicaciones de variables de instancia y conjuntos como un comentario, mejor así:

#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:

no me gustan las cadenas, menos mal que MQL permite crear explicaciones de variables de entrada y conjuntos en forma de comentario, mejor así:

¡Genial! Con una tarea tan sencilla, ¡hay tantas soluciones diferentes! Gracias.

Saludos, Vladimir.

 
MrBrooklin:

¡Genial! Con una tarea tan sencilla, ¡hay tantas soluciones diferentes! Gracias.

Sinceramente, Vladimir.

Ahora sería más correcto seguir la lógica que practicar la sintaxis. La lógica sugiere que el resultado de la pregunta "aprenderá o no aprenderá el idioma" sólo puede devolver una función que calcule algunos parámetros asociados a esto. Dado que la función debe devolver un resultado sí/no, se declara con el tipo bool. La función puede ser llamada directamente desde la condición if().

if(Suficiente_tiempo() && Suficiente_paciencia()) Print("¡Voy a aprender el idioma!");

else Print("No voy a aprender el idioma...");


Ahora, piense en el contenido de las funciones.

 
Реter Konow:
Por desgracia, esto es un engaño, que te lleva por un camino desconocido de aprendizaje. ¿Qué tiene que ver el "estado" con esta enumeración? Es una ficción en igualdad de condiciones.

Ahora sería más correcto seguir la lógica que practicar la sintaxis. La lógica sugiere que el resultado de la pregunta "aprenderá o no el idioma" sólo puede ser devuelto por una función que calcule algunos parámetros relacionados con ella. Dado que la función debe devolver un resultado sí/no, se declara con el tipo bool. La función puede ser llamada directamente desde la condición if().

if(Suficiente_tiempo() && Suficiente_paciencia()) Print("¡Voy a aprender el idioma!");

else Print("Ay, no voy a aprender el idioma...");


Ahora, piense en el contenido de las funciones.

Te estás metiendo conmigo, por supuesto que el comentario está incompleto, la primera variableenA es como debe ser, una condición de ejecución, por así decirlo, y la segundaa, es como está en fact)))))))))) Y por eso inA se introduce a través de una instancia, y es inmutable, y la variable a .... aunque sí, no debería ser una variable constante, sino una estática o simplemente un texto tipo))))

Pero sigue teniendo sentido)

 
MrBrooklin:

¡Genial! Con una tarea tan sencilla, ¡hay tantas soluciones diferentes! Gracias.

Saludos, Vladimir.

Y hay más patrones...

#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;
}

Sí, también hay un operador ternario ).

A partir de este camino (entender y saber escribir) comienza, de hecho, el camino del desarrollador. IMHO

Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
  • www.mql5.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void. Результатом...
 
Реter Konow:
Por desgracia, esta es una forma errónea de aprender que no lleva a ninguna parte. ¿Qué tiene que ver el "estado" con esta enumeración? Se trata de una ficción en igualdad de condiciones.

Ahora sería más correcto seguir la lógica que practicar la sintaxis. La lógica sugiere que el resultado de la pregunta "aprenderá o no el idioma" sólo puede ser devuelto por una función que calcule algunos parámetros relacionados con ella. Dado que la función debe devolver un resultado sí/no, se declara con el tipo bool. La función puede ser llamada directamente desde la condición if().

if(Suficiente_tiempo() && Suficiente_paciencia()) Print("¡Voy a aprender el idioma!");

else Print("No voy a aprender el idioma...");


Ahora, piense en el contenido de las funciones.

¡Hola, Peter! Desde luego, lo haré. Es que la pregunta fue hecha:

"...La pregunta de control: 'tiempo suficiente' - qué tipo puede ser esta variable sin una advertencia del compilador...".

Eso es lo que intentaba responder. Gracias especialmente por su ejemplo.


Saludos cordiales, Vladimir.

 
Valeriy Yastremskiy:

te estás metiendo con él, por supuesto el comentario está incompleto, la primera variableenA es como debe ser, la condición de ejecución por así decirlo, y la segundaa, es como realmente es)))))))))) Y por eso inA se introduce a través de una instancia, y es inmutable, y la variable a .... aunque sí, no debería ser una variable constante, sino una estática o simplemente un texto tipo))))

Pero sigue teniendo sentido)

Vale, quizás estoy siendo quisquilloso, pero aun así, las enumeraciones son superfluas para el estudiante ahora. Es necesario recordar la coherencia en el plan de estudios. Entonces escribamos la clase de una vez. ))))
 
Реter Konow:
Vale, puede que me esté metiendo con usted, pero aun así, las enumeraciones son innecesarias para un estudiante ahora mismo. Hay que tener en cuenta la coherencia del plan de estudios. Entonces escribamos la clase de una vez. ))))

¡¡No, no, no, no!! ¡Ya estoy mal de la cabeza!

Sinceramente, Vladimir.

 
MrBrooklin:

¡Hola, Peter! Me lo pensaré. Sólo que la cuestión es que la pregunta fue formulada:

"...La pregunta de control: 'tiempo suficiente' - qué tipo puede ser esta variable, para que no haya advertencias del compilador...".

Eso es lo que intentaba responder.


Sinceramente, Vladimir.

Sí, hola. Así es, esa era exactamente la pregunta pero aún no la has respondido correctamente porque el tipo de cadena, en el contexto del contenido de la condición, es incorrecto. El compilador no generará un mensaje de error o advertencia pero la condición es defectuosa en su significado.
 
MrBrooklin:

¡¡No, no, no, no!! ¡Ya estoy mal de la cabeza!

Sinceramente, Vladimir.

Eso es lo que estoy diciendo. Ya no son necesarias las enumeraciones ni la sintaxis innecesaria.