Die Sprache MQL5 von Grund auf selbst erlernen - Seite 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:

Ich mag keine Strings, zum Glück erlaubt MQL, Erklärungen zu Eingabevariablen und Sets als Kommentar zu erstellen, das ist besser so:

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

Ich mag keine Zeichenketten. Gut, dass MQL es erlaubt, Erklärungen zu Eingabevariablen und Sets als Kommentar zu erstellen, das ist besser:

Super! So eine einfache Aufgabe, so viele verschiedene Lösungen! Ich danke Ihnen.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Großartig! So eine einfache Aufgabe, so viele verschiedene Lösungen! Ich danke Ihnen.

Mit freundlichen Grüßen, Vladimir.

Jetzt wäre es richtiger, der Logik zu folgen, anstatt die Syntax zu üben. Die Logik legt nahe, dass das Ergebnis der Frage "Willst du die Sprache lernen oder nicht" nur eine Funktion zurückgeben kann, die einige damit verbundene Parameter berechnet. Da die Funktion ein Ja/Nein-Ergebnis liefern muss, wird sie mit dem Typ bool deklariert. Sie können die Funktion direkt über die if()-Bedingung aufrufen.

if(Genug_Zeit() && Genug_Geduld()) Print("Ich werde die Sprache lernen!");

else Print("Ich werde die Sprache nicht lernen...");


Denken Sie nun über den Inhalt der Funktionen nach.

 
Реter Konow:
Leider ist dies eine Irreführung, die Sie auf einen unbekannten Weg des Lernens führt. Was haben "Staat" und diese Aufzählung damit zu tun? Es ist eine Fiktion auf gleicher Augenhöhe.

Jetzt wäre es richtiger, der Logik zu folgen, anstatt die Syntax zu üben. Die Logik legt nahe, dass das Ergebnis der Frage "Willst du die Sprache lernen oder nicht?" nur durch eine Funktion zurückgegeben werden kann, die einige damit verbundene Parameter berechnet. Da die Funktion ein Ja/Nein-Ergebnis liefern muss, wird sie mit dem Typ bool deklariert. Die Funktion kann direkt aus der if()-Bedingung aufgerufen werden.

if(Genug_Zeit() && Genug_Geduld()) Print("Ich werde die Sprache lernen!");

else Print("Leider werde ich die Sprache nicht lernen...");


Denken Sie nun über den Inhalt der Funktionen nach.

Sie hacken auf mir herum, natürlich ist der Kommentar unvollständig, die erste VariableinA ist so, wie sie sein sollte, sozusagen eine Ausführungsbedingung, und das zweitea, ist so, wie es in der Tat ist)))))))))) Und deshalb wird inA über eine Instanz eingegeben und ist unveränderlich, und die Variable a .... obwohl, ja, es sollte nicht eine konstante Variable sein, sondern eine statische oder nur eine Textart))))

Aber es macht trotzdem Sinn)

 
MrBrooklin:

Großartig! So eine einfache Aufgabe, so viele verschiedene Lösungen! Ich danke Ihnen.

Mit freundlichen Grüßen, Vladimir.

Und es gibt noch mehr Muster...

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

Ja, es gibt auch einen ternären Operator ).

Auf diesem Weg (verstehen und wissen, wie man es schreibt) beginnt eigentlich der Weg des Entwicklers. IMHO

Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
  • www.mql5.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void. Результатом...
 
Реter Konow:
Leider ist dies eine falsche Art des Lernens, die zu nichts führt. Was haben "Staat" und diese Aufzählung damit zu tun? Es handelt sich um eine Fiktion auf gleicher Augenhöhe.

Jetzt wäre es richtiger, der Logik zu folgen, anstatt die Syntax zu üben. Die Logik legt nahe, dass das Ergebnis der Frage "Willst du die Sprache lernen oder nicht?" nur durch eine Funktion zurückgegeben werden kann, die einige damit verbundene Parameter berechnet. Da die Funktion ein Ja/Nein-Ergebnis liefern muss, wird sie mit dem Typ bool deklariert. Die Funktion kann direkt aus der if()-Bedingung aufgerufen werden.

if(Genug_Zeit() && Genug_Geduld()) Print("Ich werde die Sprache lernen!");

else Print("Ich werde die Sprache nicht lernen...");


Denken Sie nun über den Inhalt der Funktionen nach.

Hallo, Peter! Das werde ich auf jeden Fall tun! Die Frage wurde einfach gestellt:

"...Die Kontrollfrage: 'genug Zeit' - welchen Typ kann diese Variable haben, ohne dass der Compiler eine Warnung ausgibt...".

Das ist es, was ich zu beantworten versuchte. Ich danke Ihnen besonders für Ihr Beispiel!


Mit freundlichen Grüßen, Vladimir.

 
Valeriy Yastremskiy:

Sie hacken darauf herum, natürlich ist der Kommentar unvollständig, die erste VariableinA ist so, wie sie sein sollte, sozusagen die Ausführungsbedingung, und das zweitea, ist so, wie es tatsächlich ist)))))))))) Und deshalb wird inA über eine Instanz eingegeben und ist unveränderlich, und die Variable a .... obwohl, ja, es sollte nicht eine konstante Variable sein, sondern eine statische oder nur eine Textart))))

Aber es macht trotzdem Sinn)

OK, vielleicht bin ich etwas pingelig, aber trotzdem sind Aufzählungen für den Schüler jetzt überflüssig. Es ist wichtig, die Kohärenz des Lehrplans zu beachten. Dann lassen Sie uns die Klasse sofort schreiben. ))))
 
Реter Konow:
OK, ich mag auf Ihnen herumhacken, aber trotzdem sind Aufzählungen für einen Studenten im Moment unnötig. Sie müssen daran denken, dass der Lehrplan konsistent sein muss. Dann lassen Sie uns die Klasse sofort schreiben. ))))

Nein, nein, nein, nein!!! Ich bin schon ganz durcheinander im Kopf!

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Hallo, Peter! Ich werde auf jeden Fall darüber nachdenken! Aber der springende Punkt ist, dass die Frage gestellt wurde:

"...Die Kontrollfrage: 'genug Zeit' - welchen Typ kann diese Variable haben, damit es keine Compiler-Warnungen gibt...".

Das ist es, was ich zu beantworten versuchte.


Mit freundlichen Grüßen, Vladimir.

Ja, hallo. Das stimmt, genau das war die Frage, aber Sie haben sie noch nicht richtig beantwortet, weil der Stringtyp im Zusammenhang mit dem Inhalt der Bedingung nicht korrekt ist. Der Compiler erzeugt keine Fehlermeldung oder Warnung, aber die Bedingung ist in ihrer Bedeutung fehlerhaft.
 
MrBrooklin:

Nein, nein, nein, nein!!! Ich bin schon ganz durcheinander in meinem Kopf!

Mit freundlichen Grüßen, Vladimir.

Das ist es, was ich damit sagen will. Aufzählungen und unnötige Syntax sind jetzt überflüssig.