Cancellazione forzata dell'array in MT5? - pagina 3

 
Vladimir Karputov:

La mancata inizializzazione dell'array è interamente colpa del kodopistael. Cercate gli errori nel vostro ambiente. Ricostruisci il tuo algoritmo.

Non c'è nessun errore.

L'inizializzazione automatica dell'array con degli zeri durante la dichiarazione è semplicemente disabilitata. Perché? - sconosciuto. A causa di questo dovete cancellare manualmente l'array prima di usarlo. Questo non è sempre conveniente.

 
Реter Konow:

Non c'è nessun errore.

Appena rimossa l'inizializzazione automatica degli array con degli zeri durante la dichiarazione. Perché? - sconosciuto. A causa di questo dovete cancellare manualmente l'array prima di usarlo. Questo non è sempre conveniente.

Che cosa vuoi? Scrivere con noncuranza nello stile del "4"? Interrogare sconsideratamente indici inesistenti? Sperate in un "uomo" che inizializzi i vostri array per voi?

MQL5 rimprovererà duramente tali dilettanti, quindi non hanno alcuno scampo. Imparate a scrivere correttamente dall'inizio: se avete creato un array, dovete bypassare tutti gli indici e riempirli. Se non volete riempirli tutti in una volta, riempiteli passo dopo passo con un aumento preliminare della dimensione dell'array.

In generale, fate un algoritmo normale e non scaricate i vostri problemi sugli altri.

 
Vladimir Karputov:

Cosa volevi fare? Scrivere con noncuranza nello stile del "4"? Interrogare sconsideratamente indici inesistenti? Affidarsi allo "zio" che inizializza i vostri array per voi?

MQL5 rimprovererà duramente tali dilettanti, quindi non hanno alcuno scampo. Imparate a scrivere correttamente dall'inizio: se avete creato un array, dovete bypassare tutti gli indici e riempirli. Se non volete riempirli tutti in una volta, riempiteli passo dopo passo con un aumento preliminare della dimensione dell'array.

In generale, fate un algoritmo normale e non scaricate i vostri problemi sugli altri.

Precompilare un array difficilmente causerà degli errori. È conveniente.

In MT5, si dichiara un array, si pulisce il cestino e poi lo si usa.

In MT4, si dichiara un array e lo si usa.

Questa è la differenza.

Perché dovremmo spostare il compito di pulire gli array su un utente?

Aumenta la loro professionalità? Forse. Ma certamente non aggiungerà nessuna emozione positiva)). Quindi, scusate la mia negatività. Ho passato diversi giorni a cercare di capire cosa c'era di sbagliato. Mi dà fastidio).

 
Rimossa la pulizia automatica a causa della velocità.
 
Реter Konow:

Non c'è nessun errore.

Appena rimossa l'inizializzazione automatica degli array con degli zeri durante la dichiarazione. Perché? - sconosciuto. A causa di questo dovete cancellare manualmente l'array prima di usarlo. Non è sempre conveniente.

Peter, l'inizializzazione viene rimossa, perché questa procedura richiede tempo, e in C++ e MQL5 non è usuale pagare per qualcosa che non si usa. L'inizializzazione di un array non è sempre necessaria, per esempio, se si riempie l'array con i valori richiesti immediatamente, non è necessario.

Comunque, dalla tua domanda non capisco quale sia la difficoltà. Conoscete sempre le dimensioni del vostro array. Se si riparte un array, si sa sempre quanti elementi si aggiungono ad esso. Quindi è facile chiamare la funzione ArrayInitialize subito dopo ArrayResize.

Vi chiederete: come fanno le persone ad usare MQL5 quando devono considerare anche tante altre cose? La risposta è: coloro che usano MQL5 ad un buon livello usano la libreria standard, quindi non pensano nemmeno a tutte queste cose, non inizializzano un array o lo rietichettano, aggiungono solo nuovi valori. Ma dato che sei un dartano e non riconosci nulla di tutto questo, hai solo un'opzione: una gestione minuziosa e di basso livello dei tuoi array, usando ArrayInitialize.

 
Vasiliy Sokolov:

1. Peter, l'inizializzazione viene rimossa, perché questa procedura richiede tempo, e in C++ e MQL5 non è usuale pagare per qualcosa che non si usa. L'inizializzazione dell'array non è sempre necessaria, per esempio se si riempie immediatamente l'array con i valori richiesti, non è necessaria.

E ancora dalla tua domanda non capisco quale sia la difficoltà. Conoscete sempre la dimensione del vostro array. Se ripartizionate un array, sapete sempre quanti elementi aggiuntivi vi state aggiungendo. Quindi è facile chiamare la funzione ArrayInitialize dopo ArrayResize.

Vi chiederete: come fanno le persone ad usare MQL5 quando ci sono così tante cose aggiuntive da considerare? La risposta è: coloro che usano MQL5 a un buon livello usano la libreria standard, quindi non pensano nemmeno a queste cose, non inizializzano un array o il suo ripartizionamento, aggiungono solo nuovi valori. Ma siccome sei un dartano e non vuoi ammettere niente del genere, hai solo un'opzione: una gestione minuziosa e di basso livello dei tuoi array, usando ArrayInitialize.

Vasily, punto per punto:

1. La logica ci dice che la procedura di pulizia dell'array viene eseguita dal compilatore solo una volta in fase di compilazione. Se è stato rimosso, significa che si è voluto aumentare le prestazioni del compilatore a scapito della comodità del programmatore, ma forse per aumentare il suo livello.

2. La dimensione del kernel dipende dal codice cibernetico. Più elementi ci sono, più grande è l'array del kernel. Pertanto, il kernel è dinamico. Si costruisce a tappe. Se c'è della spazzatura nelle sue celle, i riferimenti di una cella all'altra nelle funzioni a diversi stadi di costruzione causeranno il crash del programma.

In MT4 non c'era questo problema perché le celle non inizializzate erano zeri e non valori casuali. In breve, la mia tecnologia dovrebbe funzionare inizialmente con un array pulito.

3. Non sono contrario alla cancellazione forzata dell'array personalizzato, solo, come ho detto, sono un po' assillato. Per alcuni giorni non sono riuscito a capire perché tutto si blocca. Pensavo fosse colpa mia, si è scoperto - mi hanno tolto una delle mie comodità)).


Non importa, ci abitueremo).


ZS. A proposito, dovrei dire che il mio codice è assolutamente multipiattaforma. Non ho bisogno di cambiare nulla, tranne questa pulizia!

 
Реter Konow:

Non c'è nessun errore.

Appena rimossa l'inizializzazione automatica degli array con degli zeri durante la dichiarazione. Perché? - sconosciuto. ...

Per poter scrivere programmi veloci. L'inizializzazione non è sempre necessaria, più spesso l'array viene riempito subito con i suoi dati.

 
Dmitry Fedoseev:

Per poter scrivere programmi veloci. L'inizializzazione non è sempre necessaria, l'array è spesso riempito immediatamente con i suoi dati.

OK. Capisco.

 
Реter Konow:

... Se c'è della spazzatura nelle sue celle, allora i riferimenti di una cella all'altra in funzioni a diversi stadi di costruzione, causano il crash del programma.

Piotr, se hai dei rifiuti nel tuo kernel, tu solo ne sei responsabile. MQL5, a differenza di MQL4, non cerca di capire cosa vuole l'utente e questo è corretto.

 
P.S. Penso che saresti stato molto più fortunato, Peter, se fossi finito in un forum JavaScript di qualche tipo. Ci sono molte di quelle delizie lì. Avresti raggiunto grandi altezze!