Limpeza de matriz forçada em MT5? - página 3

 
Vladimir Karputov:

A falha na inicialização da matriz é inteiramente culpa do kodopistael. Procure por erros em seu próprio ambiente. Reconstrua seu algoritmo.

Não há erro.

A inicialização automática da matriz com zeros durante a declaração é simplesmente desativada. Por quê? - desconhecido. Por causa disso, você tem que limpar a matriz manualmente antes de usá-la. Isto nem sempre é conveniente.

 
Реter Konow:

Não há erro.

Acabou de remover a inicialização automática de arrays com zeros durante a declaração. Por quê? - desconhecido. Por causa disso, você tem que limpar a matriz manualmente antes de usá-la. Isto nem sempre é conveniente.

O que você quer? Escrevendo descuidadamente no estilo do "4"? Consulta inútil de índices inexistentes? Esperança para um "homem" que inicialize suas matrizes para você?

A MQL5 irá repreender fortemente tais amadores, para que eles não tenham nenhuma folga. Aprenda a escrever corretamente desde o início: se você criou uma matriz, você deve contornar todos os índices e preenchê-los. Se você não quiser preenchê-los todos de uma vez - preencha-os passo a passo com o aumento preliminar do tamanho da matriz.

Em geral, faça um algoritmo normal e não transfira seus problemas para outros.

 
Vladimir Karputov:

O que você queria fazer? Escrevendo descuidadamente no estilo do "4"? Consultar índices inexistentes sem querer? Confie no "tio" que inicializa suas arraias para você?

A MQL5 irá repreender fortemente tais amadores, para que eles não tenham nenhuma folga. Aprenda a escrever corretamente desde o início: se você criou uma matriz, você deve contornar todos os índices e preenchê-los. Se você não quiser preenchê-los todos de uma vez - preencha-os passo a passo com o aumento preliminar do tamanho da matriz.

Em geral, faça um algoritmo normal e não transfira seus problemas para outros.

O pré-preenchimento de uma matriz dificilmente causará quaisquer erros. É conveniente.

No MT5, você declara uma matriz, limpa o lixo e depois o utiliza.

No MT4, você declara uma matriz e a utiliza.

Essa é a diferença.

Por que devemos deslocar a tarefa de limpar as matrizes para um usuário?

Isso aumenta o profissionalismo deles? Talvez. Mas certamente não acrescentará nenhuma emoção positiva)). Portanto, desculpem a minha negatividade. Eu passei vários dias tentando descobrir o que estava errado. Está me afetando).

 
Removida a autolimpeza devido à velocidade.
 
Реter Konow:

Não há erro.

Acabou de remover a inicialização automática de arrays com zeros durante a declaração. Por quê? - desconhecido. Por causa disso, você tem que limpar a matriz manualmente antes de usá-la. Nem sempre é conveniente.

Peter, a inicialização é removida, porque este procedimento leva tempo, e em C++ e MQL5 não é costume pagar por algo que não se usa. A inicialização de um array nem sempre é necessária, por exemplo, se você preencher o array com os valores requeridos imediatamente, não é necessário.

De qualquer forma, pela sua pergunta, não entendo qual é a dificuldade. Você sempre sabe o tamanho de sua matriz. Se você reparte uma matriz, você sempre sabe quantos mais elementos você está acrescentando a ela. Portanto, é fácil chamar a função ArrayInitialize logo após o ArrayResize.

Você pode perguntar, como as pessoas usam a MQL5 quando têm que considerar adicionalmente tantas coisas? A resposta é: Aqueles que usam a MQL5 em um bom nível usam a biblioteca padrão, então eles nem pensam em tudo isso, eles não inicializam uma matriz ou a reetiquetam, eles apenas adicionam novos valores. Mas como você é um dartan e não reconhece nada disso, você tem apenas uma opção: gerenciamento de baixo nível e cuidadoso de suas matrizes, usando o ArrayInitialize.

 
Vasiliy Sokolov:

1. Peter, a inicialização é removida, porque este procedimento leva tempo, e em C++ e MQL5 não é costume pagar por algo que você não usa. A inicialização da matriz nem sempre é necessária, por exemplo, se você preencher a matriz com valores requeridos imediatamente, ela não é necessária.

E ainda de sua pergunta, não entendo qual é a dificuldade. Você sempre sabe o tamanho de sua matriz. Se você reparte uma matriz, você sempre sabe quantos itens adicionais você está adicionando a ela. Portanto, é fácil chamar a função ArrayInitialize após o ArrayResize.

Você pode perguntar, como as pessoas usam a MQL5 quando há tantas coisas adicionais a considerar? A resposta é: Aqueles que usam a MQL5 em um bom nível usam a biblioteca padrão, então eles nem pensam nessas coisas, eles não inicializam uma matriz ou sua repartição, eles apenas adicionam novos valores. Mas como você é um dartan e não admite nada do tipo, você tem apenas uma opção: gerenciamento de baixo nível e cuidadoso de suas matrizes, usando o ArrayInitialize.

Vasily, ponto por ponto:

1. a lógica nos diz que o procedimento de limpeza da matriz é executado pelo compilador apenas uma vez na fase de compilação. Se ele foi removido, significa que queríamos aumentar o desempenho do compilador em detrimento da conveniência do programador, mas talvez para aumentar seu nível.

2. O tamanho do kernel depende do código cibernético. Quanto mais itens, maior a matriz do núcleo. Portanto, o núcleo é dinâmico. Ele é construído em etapas. Se houver lixo em suas células, as referências de uma célula a outra em funções em diferentes estágios da construção causarão a queda do programa.

No MT4 não havia tal problema porque as células não inicializadas eram zeros e não valores aleatórios. Em resumo, minha tecnologia deve funcionar inicialmente com uma matriz limpa.

3. eu não sou contra a limpeza forçada da matriz personalizada, apenas, como eu disse, fiquei um pouco irritado. Durante alguns dias eu não conseguia entender por que tudo cai. Pensei que a culpa fosse minha, afinal - eles tiraram uma das minhas conveniências)).


Não importa, vamos nos acostumar).


ZS. A propósito, eu deveria dizer que meu código é absolutamente transversal. Eu não preciso mudar nada, exceto esta limpeza!

 
Реter Konow:

Não há erro.

Acabou de remover a inicialização automática de arrays com zeros durante a declaração. Por quê? - desconhecido. ...

Para que pudéssemos escrever programas rápidos. A inicialização nem sempre é necessária, mais frequentemente a matriz é preenchida com seus próprios dados imediatamente.

 
Dmitry Fedoseev:

A fim de poder escrever programas rápidos. A inicialização nem sempre é necessária, a matriz é freqüentemente preenchida com seus próprios dados imediatamente.

OK. Estou vendo.

 
Реter Konow:

... Se houver lixo em suas células, então referências de uma célula a outra em funções em diferentes estágios de construção, provocam a queda do programa.

Piotr, se você tem lixo em seu grão, você é o único responsável por ele. A MQL5, ao contrário da MQL4, não tenta entender o que o usuário quer e isto é correto.

 
P.S. Eu acho que você teria tido muito mais sorte, Peter, se você tivesse acabado em algum tipo de fórum JavaScript. Há muitas dessas delícias ali. Você teria chegado a grandes alturas!