Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 121

 
TheXpert:

Allora non lo capisco.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Peculiarità di mql5, consigli e trucchi

Alexey Navoykov, 2019.01.14 16:35

Se ne avete bisogno, potete dichiarare void OnTick(); proprio all'inizio. Ma in generale, l'ordine di dichiarazione delle funzioni è un modo aggiuntivo per controllare la correttezza del codice. Per esempio, se in qualche plug-in avviene la chiamata OnTick() o, ancora peggio, OnInit(), va bene? Le biblioteche non devono vedere il vostro codice di lavoro.
 
fxsaber:

Allora non lo capisco

Le dichiarazioni in avanti sono solo per le classi e le strutture, non per le funzioni.

 
fxsaber:

Il punto è che se le funzioni che userete sono specificate nell'inlude, dovete scriverle secondo il suggerimento, se l'inlude è sotto.

Qual è il problema di inserire un inluder prima?

Può essere scomodo per un file (la funzione con il corpo deve essere prima della chiamata), ma se la funzione in mqh - qual è il problema di inserire l'inlude all'inizio?

 
TheXpert:

La dichiarazione forward è solo per le classi e le strutture, non per le funzioni.

È fantastico che tu l'abbia chiarito.

Andrey Khatimlianskii:

Qual è il problema di inserire un inluder prima?

Potrebbe essere scomodo per un singolo file (una funzione con un corpo necessariamente prima della chiamata), ma se la funzione è in mqh - qual è il problema di inserire un inline all'inizio?

Alcuni costrutti con macro hanno talvolta richiesto un inlude sull'ultima linea. Non vi darò un esempio specifico, li ho incontrati nella pratica molte volte.

 
TheXpert:

Le dichiarazioni in avanti sono solo per le classi e le strutture, non per le funzioni.

No, mi sbaglio anch'io: una funzione ha una dichiarazione e una definizione.
 
fxsaber:

Alcuni costrutti con macro a volte richiedevano un inlude sull'ultima linea. Non vi darò un esempio concreto, li ho incontrati molte volte nella pratica.

Beh, questo è qualcosa di piuttosto esotico. Non credo che le macro singole valgano il sacrificio della correttezza architettonica per il loro bene.

In ogni caso, il codice del programma deve essere eseguito esattamente secondo l'algoritmo previsto. L'accesso a una variabile prima della sua inizializzazione non ha senso. Questo non dovrebbe compilare.

 

A proposito, se un inlude usa alcune funzioni che non ci sono, devono essere dichiarate comunque. Proprio come le classi e le variabili extern. Altrimenti, è una stampella, non un inlude.

Di conseguenza, il plug-in non dovrebbe dipendere dal luogo in cui è inserito.

 
Alexey Navoykov:
A proposito, se nell'inlude si usano alcune funzioni che non ci sono, devono comunque essere dichiarate lì. Così come le classi e le variabili esterne, altrimenti non è un inlude, ma una stampella.

Cosa pensate che sia un inlude? Per me, è solo un pezzo di testo, allocato in un file separato. E la sua reintroduzione nella fonte è ignorata. Nient'altro.

 
fxsaber:

Cosa pensate che sia un inlude? Per me, è solo un pezzo di testo, allocato in un file separato. E la sua reintroduzione nella fonte è ignorata. Nient'altro.

Penso che dovrebbe essere un codice indipendente e indipendente. Ha più senso, ed è facile da controllare, e fare controlli di sintassi indipendenti su questo codice. Ma se tutto è in file diversi e non è chiaro da dove viene chiamato, è il caos.

 
Alexey Navoykov:

Beh, penso che dovrebbe essere un codice indipendente e indipendente. Ha più senso ed è più facile controllare ed eseguire un controllo di sintassi indipendente di questo codice. E se tutto è sparso attraverso i file e non è chiaro cosa viene chiamato da dove - è una specie di caos.

Ho postato esempi del mio codice. Non ho sentito alcun feedback sul caos, anche per gli incudini che non compilano.

Motivazione: