Discussione sull’articolo "Fondamenti di programmazione MQL5: Arrays"

 

Il nuovo articolo Fondamenti di programmazione MQL5: Arrays è stato pubblicato:

Gli array sono parte integrante di quasi tutti i linguaggi di programmazione insieme a variabili e funzioni. L'articolo dovrebbe interessare principalmente i programmatori MQL5 alle prime armi, mentre i programmatori esperti avranno una buona opportunità per riassumere e sistematizzare le loro conoscenze.

Quindi, un array è un insieme numerato di variabili con lo stesso nome. Le proprietà generali degli array includono il nome dell'array, il tipo di variabile (int, double, ecc.) e la dimensione dell'array. Gli elementi dell'array sono indicizzati da zero. Parlando di elementi di array, è sempre meglio usare la parola "indice" al posto di "numero" in modo da suggerire di iniziare a contare gli elementi di array da zero (mentre la numerazione di solito parte da uno). Con gli elementi indicizzati in questo modo, l'indice dell'ultimo elemento è uno in meno del numero di elementi dell'array.

Se l'array è dichiarato come segue:

double Variable[3];

ha i seguenti elementi: Variabile[0], Variabile[1] e Variabile[2].

A prima vista, tale mancanza di corrispondenza tra il numero di elementi e l'indice dell'ultimo elemento può sembrare scomoda. In effetti, offre vantaggi significativi rispetto ai linguaggi di programmazione in cui gli elementi dell'array sono indicizzati da 1 o la dimensione dell'array è definita dall'indice del suo ultimo elemento piuttosto che dal numero effettivo di elementi nell'array.

Per determinare la dimensione dell'array in MQL5, utilizziamo la ArraySize():

double Variable[3];

int Size=ArraySize(Variable);

Dopo aver eseguito il codice, il valore della variabile Size sarà pari a 3.

Autore: Dmitry Fedoseev

 

Nel complesso non è un brutto articolo - meglio che nei libri di testo di programmazione, non così arido e abbastanza lucido.

Non mi è piaciuto l'esempio:"Array multidimensionale con l'OOP". È un'implementazione semplice, ma il lavoro successivo con un array dinamico di questo tipo è piuttosto "complicato"; per me sarebbe meglio non avere questo esempio piuttosto che una costruzione così spaventosa, imho.

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
L'articolo è davvero niente male, soprattutto per i principianti.
 

Non è scritto male, ma l'articolo non dice una parola su CArray e i suoi discendenti.

I principianti potrebbero pensare che per lavorare con gli array in stile OOP sia necessario scrivere le proprie classi, ma queste sono state scritte molto tempo fa.

 

Bene, l'inizio del tutorial sulla programmazione MQL5 è quasi finito.

L'unica cosa è che l'implementazione dell'array su OOP sembra molto forzata.

 
avoitenko:

Non è scritto male, ma l'articolo non dice una parola su CArray e i suoi discendenti.

I principianti potrebbero pensare che per lavorare con gli array in stile OOP sia necessario scrivere le proprie classi, ma queste sono state scritte molto tempo fa.

A proposito, l'autore potrebbe continuare la serie di articoli su questo argomento.
 
avoitenko:

Non è scritto male, ma l'articolo non dice una parola su CArray e i suoi discendenti.

CArray e tutti i suoi discendenti dovrebbero essere anatemizzati.

Queste cose dovrebbero essere scritte sui template.

Vladix:

L'unica cosa è che l'implementazione degli array nell'OOP sembra molto tesa.

Lo è un po' :)

 

Qualche suggerimento su come questo array può essere fatto meglio in OOP?

Sto cercando di ottenere qualcosa di simile a JavaScript:

var ar=new Array();
ar[0]=new Array();
ar[1]=new Array();
ar[2]=new Array();

ar[0][0]=1;
ar[0][1]=2;

alert(ar[0][1]);

Il punto più difficile è che in JavaScript è possibile inserire un elenco in un array in una sola volta:

ar[0][2]=Array(131,132,133,134);
alert(ar[0][2][3]);

E non c'è modo di ottenere una cosa del genere qui. Pertanto, a prescindere da come la si guardi. non ci sarà una buona variante.

 
Integer: Qualche suggerimento su come migliorare questo array in OOP?

Mi piace l'implementazione di Yurich degli array dinamici https://www.mql5.com/ru/forum/6729/page3, non so quanto sia efficiente in termini di prestazioni, ma in termini di leggibilità del codice è super.

 

Ottimo articolo, per principianti assoluti, ma anche per programmatori esperti alle prime armi con la MT5. Solo l'ultima sezione "Creare array multidimensionali utilizzando l'OOP" è di scarso interesse.

Tuttavia, un piccolo errore:

Array indexing order can be determined using the ArrayIsSeries() function:

bool series=ArrayIsSeries(ar);

Se l'array è indicizzato in ordine inverso, la funzione restituirà true.

Questo è falso. La funzione da utilizzare per conoscere l'ordine di indicizzazione di un array è ArrayGetAsSeries().

ArrayIsSeries() viene utilizzata per determinare se un array è una TimeSeries.

 

There is only one method that allows you to do a search in an unsorted array

Questo non è del tutto vero: date un'occhiata all'Algoritmo di ricerca basato su hash. Ma questo algoritmo non è probabilmente applicabile al trading.