Fehler, Irrtümer, Fragen - Seite 2637

 
Andrei Trukhanovich:

vielleicht im Vergleich zur funktionalen Programmierung?

Schauen Sie in der Wikipedia nach:

Und wir stellen fest, dass es nicht dasselbe ist.


Es ist also alles verfahrenstechnisch...

 
Nikolai Semko:

Es mag Sie überraschen, aber die jungen Programmierer von heute halten OOP für einfacher zu programmieren als prozedurale Programmierung.

Sie denken an die Zeit vor 25 Jahren. Die Jugend von heute nimmt OOP mit der Muttermilch auf. Lernen Sie OOP, wenn Sie den Trend mitmachen wollen, sonst werden Sie nur meckern.

Aber es ist wirklich so. Lassen Sie alte Programmierer versuchen, Olympiadeaufgaben für Schüler zu lösen.

Was sie früher an den Universitäten gelernt haben, wie dynamische Programmierung, Graphentheorie, OOP, Klassen usw. Heutige Schüler der 9-10 Klassen (natürlich nicht alle) lösen solche Probleme in wenigen Minuten.

Und das ist ganz natürlich. Gesetz der Natur :)

 
Roman:

Ja, ich verstehe OOP, natürlich nicht in dem Maße, wie ich es gerne hätte.
Dies ist keine Beanstandung, sondern eine konstruktive Anregung.
Damit der Entwickler nicht eine Funktion schreiben muss, um zwei mallocs zuzuweisen, zwingen sie die Benutzer, OOP zu lernen.
Natürlich ist es der Fortschritt und die Popularisierung der Sprache. Nun, hier können Sie sehen, wie sehr sie OOP lieben und verstehen.
Siehst du, Nikolay, alles im Wrapper ist unnötiger Code, der ausgeführt werden soll, ich denke, das müssen wir nicht erklären.
Ich brauche Ihnen nichts über moderne optimierende Compiler zu erzählen - wir wissen nicht, welche Anweisungen sie anwenden werden.
Vielleicht überrascht es Sie auch, dass selbst amerikanische Programmierer es vorziehen, im prozeduralen Stil zu schreiben, nicht weil OOP schlecht ist, sondern weil der Code einfacher und schneller ist.
Und
wenn es keine Objektaufgaben im Projekt gibt, warum dann Wrapper verwenden, die irgendwie verstanden werden müssen, für junge Leute))
Deshalb stimme ich nicht mit Ihnen überein, dass junge Menschen OOP begierig aufsaugen.

Ich denke dabei an C, auf dem die Logik der Sprache mql aufbaut.
C wurde 1972 geboren, ist also 48 Jahre alt ))
Aber wie auch immer, C ist eine der schnellsten Sprachen. Wissen Sie, warum? Weil es keine Klassenumhüllungen hat.

Nun, das stimmt ganz und gar nicht. Es ist nur so, dass es immer noch viele Sprachen gibt, die ohne OOP verwendet werden. C, zum Beispiel. In Kanada zum Beispiel sitzen die meisten staatlichen Institutionen auf Kobol und können es nicht loswerden.

https://www.tiobe.com/tiobe-index/

Roman, ich verstehe ehrlich gesagt nicht, warum Sie so einen Wirbel um die Änderung der Matrixdimensionen machen - welche Schwierigkeiten kann es dabei geben?
Dafür brauchen Sie keine Zeiger oder OOP.
Für einen Computer ist ein Array jeder Dimension ein eindimensionales Array.
Arbeiten Sie also mit einem eindimensionalen dynamischen Array. Und bilden Sie Matrizen virtuell und ändern Sie deren Größe mit Hilfe von Funktionen nach Belieben.
Zum Beispiel so etwas wie:

double GetValFromMx(double &A, int x, int y, int SizeX, int SizeY) {
if (x<SizeX && y<SizeY) return A[y*SizeX+x];
else return EMPTY_VALUE; }

In der Praxis verwende ich in meinem Code nur eindimensionale Arrays, obwohl ich auch mit mehrdimensionalen Arrays auf der Grundlage von eindimensionalen Arrays arbeite.

 
Roman:

Deshalb möchte ich Sie bitten, Funktionen wie ArrayResize nur für Matrizen zu erstellen ArrayResizeMx(A, n, m)

alles erledigt, keine vorgefertigten Lösungen mit OOP (Sie müssen OOP nicht kennen, verwenden Sie vorgefertigte Lösungen!)

ALGLIB verwenden, es gibt eine Methode zur Größenänderung der Matrix Resize().... aber es ist immer noch alles mit OOP )))) gemacht.

SZS: Suche durch das Forum, gab es viele Male zu diesem Thema, gab es Beispiele, können Sie eine Struktur mit einem Array-Feld in einem Array von diesen Strukturen wickeln - es wird ohne OOP, aber für mich sieht es alle umständlich

Roman:

Ich denke dabei an C, das die Grundlage der mql-Logik ist.

Die Sprache C wurde 1972 geboren, sie ist also 48 Jahre alt ))
Aber wie auch immer, C ist eine der schnellsten Sprachen. Wissen Sie, warum? Weil es keine Klassenumhüllungen hat.

Ich erinnere mich nicht an reines C, ich habe es vor langer Zeit an der Uni studiert, aber wenn ich mich nicht irre, hatte C keine dynamischen Arrays als solche, aber man konnte mit Zeigern auf den Speicher arbeiten, und die Arbeit an der Speicherzuweisung und der Kontrolle des Speicherzugriffs lag vollständig beim Programmierer, was im Wesentlichen der gleiche Wrapper ist

OK, das könnte zu einem großen Streit führen, es hat keinen Sinn, weiterzumachen.

 
Nikolai Semko:

Roman, ich verstehe ehrlich gesagt nicht, warum Sie sich über die Änderung der Matrixdimensionen aufgeregt haben - welche Schwierigkeiten kann es damit geben?
Dafür brauchen Sie keine Zeiger oder OOP.
Für einen Computer ist ein Array jeder Dimension ein eindimensionales Array.
Arbeiten Sie also mit einem eindimensionalen dynamischen Array. In der Zwischenzeit können Sie Matrizen virtuell bilden und ihre Größe mit Hilfe von Funktionen nach Belieben verändern.

Es ist klar, dass jede Dimension für den Computer ein eindimensionales Feld ist.
Wenn wir die Dimension [][] im Code sehen, können wir visuell verstehen, dass es sich um eine Matrix und nicht um ein eindimensionales Array handelt.
Die Lesbarkeit des Codes ist viel höher, als wenn man raten müsste, was [][] enthält.
Ich hätte nie gedacht, dass ich auf ein solches Unverständnis stoßen würde, als ich gebeten wurde, eine Funktion zur Speicherzuweisung für Matrizen hinzuzufügen.
Alle von Ihnen verwenden ArrayResize, es ist bequem und Sie stören sich nicht daran. Welches Problem hat ein Entwickler, wenn er eine Speicherzuweisungsfunktion fürein mehrdimensionales Array schreibt?
Das ist richtig, es gibt keine Probleme und keine Hindernisse, und für die Benutzer ist es bequem, ihren Code zu organisieren. Also beschloss ich, eine große gute C-Bibliothek mit numerischen Methoden nach mql zu portieren,
aber ich habe keine normalen mql-Tools dafür. Auch hier gibt es wieder Krücken, die einem die Lust nehmen, ineffizienten Code zu erstellen.

 
Roman:

Ich verstehe OOP, natürlich nicht so sehr, wie ich es gerne hätte.
Dies ist keine Beanstandung, sondern eine konstruktive Anregung.
Damit der Entwickler nicht eine Funktion schreiben muss, um zwei mallocs zuzuweisen, zwingen sie die Benutzer, OOP zu lernen.
Natürlich ist es der Fortschritt und die Popularisierung der Sprache. Nun, hier können Sie sehen, wie sehr sie OOP lieben und verstehen.
Siehst du, Nikolay, alles im Wrapper ist unnötiger Code, der ausgeführt werden soll, ich denke, das müssen wir nicht erklären.
Ich brauche Ihnen nichts über moderne optimierende Compiler zu erzählen - wir wissen nicht, welche Anweisungen sie anwenden werden.
Vielleicht überrascht es Sie auch, dass selbst amerikanische Programmierer es vorziehen, im prozeduralen Stil zu schreiben, nicht weil OOP schlecht ist, sondern weil der Code einfacher und schneller ist.
Und wenn es keine Objektaufgaben im Projekt gibt, warum dann Wrapper verwenden, die irgendwie verstanden werden müssen, für junge Leute))
Deshalb stimme ich nicht mit Ihnen überein, dass junge Menschen OOP begierig aufsaugen.

Ich denke dabei an C, auf dem die Logik der Sprache mql aufbaut.
C wurde 1972 geboren, ist also 48 Jahre alt ))
Aber wie auch immer, C ist eine der schnellsten Sprachen. Wissen Sie, warum? Weil es keine Klassenumhüllungen hat.

MQL ist in C++ aufgebaut.

Roman, um diese von Ihnen erwähnten Funktionen einzuführen, muss MQL viele zusätzliche Dinge in Bezug auf die Arbeit mit dem Speicher einführen. Und das ist eine Komplikation für Anfänger.

Sie haben selbst gesagt, dass es für Nichtfachleute einfacher sein muss.

Es ist eine Situation wie "Ich bin gut darin, Fahrradfahren zu lernen, es ist so einfach und verständlich. Lass uns Pedale in den BMW einbauen, dann ist es einfacher." :)

d.h. ich bin generell der Meinung, dass sowohl der prozedurale als auch der OOP-Stil lahm und unpraktisch sind))

 
Igor Makanu:

alles erledigt, keine vorgefertigten Lösungen mit OOP (Sie müssen OOP nicht kennen, verwenden Sie vorgefertigte Lösungen!)

ALGLIB verwenden, es gibt eine Methode zur Größenänderung der Matrix Resize().... aber es ist immer noch alles mit OOP )))) gemacht.

SZS: Suche durch das Forum, gab es viele Male zu diesem Thema, gab es Beispiele, können Sie eine Struktur mit einem Array-Feld in einem Array von diesen Strukturen wickeln - es wird ohne OOP, aber für mich sieht es alle umständlich

Das Problem ist, dass Sie sich nicht an reines C erinnern können, ich habe es an der Uni studiert, aber wenn ich mich nicht irre, hatte C keine dynamischen Arrays als solche, aber man konnte mit Zeigern auf den Speicher arbeiten, und die Arbeit der Zuweisung von Speicher und der Kontrolle des Speicherzugriffs lag vollständig beim Programmierer, der ein Wrapper für den Programmierer sein würde

OK, das könnte ein großes Argument werden und es hat keinen Sinn, weiterzumachen

Versucht ALGLIB, gibt es ein Problem mit Drucken von Objekt, ArrayPrint-Funktion nicht Objekte drucken.
Aber von [][] druckt eine schöne Matrix, auch mit Überschriften, wieder ist es leicht zu sehen, wenn Sie visuell das Ergebnis der Berechnung zu verfolgen müssen.
Ja, ich habe mir einige Themen im Forum angeschaut, aber ich bin nicht beeindruckt. Deshalb wirkt alles umständlich und ineffizient. C ist eine sehr elegante Sprache, und mql neigt dazu, sie zu verwirren.
Ja, C kann Speicher für dynamische Matrizen durch Zeiger zuweisen, aber in mql gibt es keine Zeiger auf Variablen, also müssen wir wieder zu Objekten wechseln.
Wenn Benutzer nur eine Funktion ArrayResizeMx(A, n, m, k) benötigen und diese in der nativen Implementierung enthalten ist, verstehen Sie den Unterschied.
Nun, es hat keinen Sinn, weiterzumachen, wenn sie davon gehört haben und es tun werden, vielen Dank. Aber die Funktion ist wirklich nützlich und notwendig.

 
Roman:

Das ist reine Spekulation, aber es ist eher ein Appell an den Entwickler.
Nehmen Sie das mit Zloy nicht persönlich.

Die dynamischen Matrizen können also nur über Objekte oder Strukturen bearbeitet werden. Eine weitere Krücke wird im Allgemeinen geschaffen.
In mql gibt es keine Zeiger auf Variablen, daher müssen wir den Objektansatz verwenden, bei dem Zeiger verfügbar sind.
Um dynamische Matrizen zu verwenden, muss ein Benutzer also OOP und die Arbeit mit Zeigern kennen, und zwar in MQL-Ausführung.
Wie viele von ihnen haben dieses Wissen? Sie kennen die Antwort selbst. Ich habe keine Schwierigkeiten, den Objektansatz zu verstehen, aber für diejenigen, die OOP nicht kennen
Sie schaffen eine künstliche Schwelle für die Verwendung der Sprache, insbesondere beim Umgang mit dynamischen Matrizen.
Meiner Meinung nach sollte ein Entwickler im Gegenteil daran interessiert sein, die Sprache einfacher zu machen, anstatt sie zu verkomplizieren.
Mit anderen Worten, sie sollten solche Funktionen entwickeln, die der Benutzer für eine komfortable Arbeit mit der Sprache benötigt.
Dies gilt umso mehr für Matrizen, die fast die Grundlage der numerischen Methoden bilden.

Aus diesem Grund möchte ich Sie bitten, ähnliche Funktionen wie ArrayResize zu erstellen, aber für Matrizen ArrayResizeMx(A, n, m),
und vielleicht auch für multidimensionale. Mit anderen Worten, geben Sie die Möglichkeit, mit Matrizen nicht wie mit Objekten, sondern wie mit gewöhnlichen Arrays im C-Stil zu arbeiten.
Insbesondere für die visuelle Darstellung von Matrizen druckt die Funktion ArrayPrint(A, 0) Matrizen aus Arrays, nicht aus Objekten.

Die Entwickler haben sich diesbezüglich sehr genau ausgedrückt. Hier

Респект и уважуха создателям языка, Но...
Респект и уважуха создателям языка, Но...
  • 2010.05.15
  • www.mql5.com
Добавление ООП потребовало от создателей языка изменения синтаксиса, для введения классов и структур и много-го чего.
 
Koldun Zloy:

Die Entwickler haben sich diesbezüglich sehr genau ausgedrückt. Hier

Es ist nicht nötig, weit zu gehen, der nächste Beitrag, mit spezifischen Fragen von Prival,
Ich kenne ihn seit langem, etwa seit der gleichen Zeit, ein kompetenter Militärentwickler, und was, warum er hier weggegangen ist, liegt auf der Hand.
Es ist zehn Jahre her, hat sich etwas geändert?
Da er mit einfachen Algorithmen gefüllt war, ist er auf diesem Niveau geblieben. Wo sind die professionellen Lösungen?
Aber wir schreiben mehr für Python, als dass wir Werkzeuge zum Schreiben dieser professionellen Lösungen und zur Entwicklung unserer kodobase bereitstellen.
Und genau da liegt der Fehler: Es gibt keine Werkzeuge, kein angemessenes Niveau der Programmierer.
Ok, ich gehe jetzt schlafen, ich habe noch nicht geschlafen. Viel Glück für alle.

Респект и уважуха создателям языка, Но...
Респект и уважуха создателям языка, Но...
  • 2010.05.15
  • www.mql5.com
Добавление ООП потребовало от создателей языка изменения синтаксиса, для введения классов и структур и много-го чего.
 
Nikolai Semko:

Es ist also alles verfahrenstechnisch...

Prozedural ist B, da ist alles elementar, nur mehr Möglichkeiten, sich selbst in den Fuß zu schießen.

Ich glaube, Sie haben das falsch verstanden und meinten funktionell. Das ist aber nicht wichtig.