Funktion, die 2 Ergebnisse liefert? - Seite 3

 
gordon:
Hier ist eine vereinfachte Erklärung -> https://www.mql5.com/en/forum/117210. Arrays werden in MQL4 immer per Referenz übergeben.

Ja, danke. Aber wie ich gefragt habe, bedeutet das, dass es in anderen Sprachen nicht so ist? Wenn es die einzige Möglichkeit wäre, es mit MQ/MT4 oder einem anderen Sprachkonstrukt zu realisieren, dann würde man sich wohl nicht die Mühe machen, dies zu erklären.

Ich schätze, ich frage nach den "technischen Details", wie Sie in diesem Beitrag sagten. Nur aus Neugierde, nicht aus Notwendigkeit.

Was die Syntax betrifft, so ist die MQL5-Sprache zur Programmierung von Handelsstrategien der Programmiersprache C++ sehr ähnlich, mit Ausnahme einiger Merkmale:

  • keine Adressarithmetik;
  • kein goto-Operator;
  • eine anonyme Aufzählung kann nicht deklariert werden;
  • Konstruktoren von Klassen und Strukturen können keine Parameter haben;
  • keine Mehrfachvererbung.

Auf diese Weise kann ich andeuten, dass bei C++ das Gegenteil der Fall sein wird... Trotzdem vielen Dank, Gordon.

 
Matutin:

Es tut mir leid, aber das ist keine "technische" Antwort :) Könnten Sie sagen, warum es besser ist, eine Variable per Referenz zu übergeben, anstatt eine globale Variable?

Es gibt viele Gründe, die ich nicht wiederholen möchte, stattdessen verweise ich Sie auf hier -> https://en.wikipedia.org/wiki/Global_variable und hier -> http://www.c2.com/cgi/wiki?GlobalVariablesAreBad (Sie können nach mehr googeln...) Es ist ein allgemein anerkanntes Konzept und es gibt viele Informationen im Netz).

 
cameofx:

[...] bedeutet das, dass es in anderen Sprachen nicht so ist? [...]

Das bedeutet gar nichts, aber sowohl in C als auch in C++ werden Arrays per Referenz übergeben (technisch gesehen wird ein Zeiger auf das erste Element des Arrays übergeben, dieser Zeiger wird als Wert übergeben).
 
gordon:

Viele Gründe, die ich lieber nicht wiederholen möchte, stattdessen verweise ich auf hier -> https://en.wikipedia.org/wiki/Global_variable und hier -> https://www.mql5.com/go?link=http://www.c2.com/cgi/wiki?GlobalVariablesAreBad (Sie können nach mehr googeln... Es ist ein weithin akzeptiertes Konzept und es gibt viele Informationen im Netz).


Sehr interessant! Leider braucht EA Parameter, und manchmal eine Menge, so dass wir sie nicht vermeiden können und aus allen Gründen, die in https://www.mql5.com/go?link=http://www.c2.com/cgi/wiki?GlobalVariablesAreBad erwähnt wurden, darauf achten müssen.

Ich verwende Benennungsregeln für GlobalVariable: Das ist viel einfacher zu handhaben und vermeidet einige Bugs.

Danke Gordon.

 
Matutin:

Sehr interessant! Leider brauchen EA Parameter, und zwar manchmal sehr viele, so dass wir sie nicht vermeiden können [...]

Externs sind in der Tat unvermeidlich. Obwohl sie global sind, sind sie nicht dasselbe wie globale Variablen (nicht zu verwechseln mit GV's); insbesondere ist es nicht empfehlenswert, ihren Wert über Code zu ändern, daher sollten sie nicht verwendet werden, um Informationen zwischen Funktionen zu übergeben (siehe hier -> https://www.mql5.com/en/forum/123535).


Ich verwende Benennungsregeln für GlobalVariable: Das ist viel einfacher zu handhaben und vermeidet einige Bugs.

In dieser Diskussion geht es um Variablen, die im globalen Bereich definiert sind (deklariert außerhalb der speziellen Funktionen start(), init(), deinit()) und nicht um GV's... Vermischen Sie die beiden nicht.
 

Nur mal so am Rande: gibt es überhaupt Programmiersprachen, die Funktionen haben, die mehrere Ergebnisse zurückgeben?

 

vielleicht könnte man eine Funktion so austricksen, dass sie zwei Werte zurückgibt, indem man sie so kombiniert, dass man sie in der aufrufenden Funktion wieder entkoppeln kann

etwa so

a = 10;

b = 20;

a = a*1000

c = a+b // 10020

return(c);

dann in der aufrufenden Funktion

b = c%1000 // 20

a = c-b/1000 // 10

 
SDC:

vielleicht könnte man eine Funktion so austricksen, dass sie zwei Werte zurückgibt, indem man sie so kombiniert, dass man sie in der aufrufenden Funktion wieder entkoppeln kann

etwas wie dies

[...]
Vielleicht auch nicht.
 

warum nicht?

 
SDC:

warum nicht?

Warum ein Problem lösen, das es gar nicht gibt? Warum das Rad neu erfinden? Warum einen unklaren Code erfinden, der nur in begrenzten Fällen funktioniert?