¿Compensación forzada de matrices en MT5? - página 3

 
Vladimir Karputov:

La falta de inicialización de la matriz es enteramente culpa del kodopistael. Busque errores en su propio entorno. Reconstruya su algoritmo.

No hay ningún error.

La inicialización automática de los arrays con ceros durante la declaración está simplemente desactivada. ¿Por qué? - desconocido. Por eso hay que borrar la matriz manualmente antes de usarla. Esto no siempre es conveniente.

 
Реter Konow:

No hay ningún error.

Se ha eliminado la inicialización automática de las matrices con ceros durante la declaración. ¿Por qué? - desconocido. Por eso hay que borrar la matriz manualmente antes de usarla. Esto no siempre es conveniente.

¿Qué quieres? ¿Escribir descuidadamente en el estilo de "4"? ¿Consultar imprudentemente índices inexistentes? ¿Esperas un "hombre" que inicialice tus matrices por ti?

MQL5 reprenderá fuertemente a estos aficionados, por lo que no tienen ninguna holgura. Aprende a escribir correctamente desde el principio: si has creado un array, debes omitir todos los índices y rellenarlos. Si no quieres llenarlos todos a la vez, llénalos paso a paso con el aumento preliminar del tamaño del array.

En general, haz un algoritmo normal y no traslades tus problemas a los demás.

 
Vladimir Karputov:

¿Qué querías hacer? ¿Escribir descuidadamente en el estilo de "4"? ¿Consultar imprudentemente índices inexistentes? ¿Confiar en el "tío" que inicializa tus matrices por ti?

MQL5 reprenderá fuertemente a estos aficionados, por lo que no tienen ninguna holgura. Aprende a escribir correctamente desde el principio: si has creado un array, debes omitir todos los índices y rellenarlos. Si no quieres llenarlos todos a la vez, llénalos paso a paso con el aumento preliminar del tamaño del array.

En general, haz un algoritmo normal y no traslades tus problemas a los demás.

Rellenar previamente una matriz no es probable que cause ningún error. Es conveniente.

En MT5, se declara un array, se limpia la basura y se utiliza.

En MT4, se declara un array y se utiliza.

Esa es la diferencia.

¿Por qué debemos trasladar la tarea de limpiar las matrices a un usuario?

¿Aumenta su profesionalidad? Tal vez. Pero ciertamente no añadirá ninguna emoción positiva)). Así que, perdón por mi negatividad. Pasé varios días tratando de averiguar lo que estaba mal. Me está afectando).

 
Se ha eliminado la limpieza automática debido a la velocidad.
 
Реter Konow:

No hay ningún error.

Se ha eliminado la inicialización automática de las matrices con ceros durante la declaración. ¿Por qué? - desconocido. Por eso hay que borrar la matriz manualmente antes de usarla. Esto no siempre es conveniente.

Peter, la inicialización se elimina, porque este procedimiento lleva tiempo, y en C++ y MQL5 no se acostumbra a pagar por algo que no se usa. La inicialización de un array no siempre es necesaria, por ejemplo, si se llena el array con los valores requeridos inmediatamente, no es necesario.

De todas formas, por tu pregunta no entiendo cuál es la dificultad. Siempre conoces el tamaño de tu matriz. Si se reparte un array, siempre se sabe cuántos elementos más se le añaden. Así que es fácil llamar a la función ArrayInitialize justo después de ArrayResize.

Te preguntarás, ¿cómo puede la gente utilizar MQL5 cuando tiene que considerar adicionalmente tantas cosas? La respuesta es: Los que usan MQL5 a buen nivel utilizan la librería estándar, por lo que ni siquiera piensan en todas estas cosas, no inicializan un array o su repartición, simplemente añaden nuevos valores. Pero como eres un dartán y no reconoces nada de esto, sólo tienes una opción: una gestión de bajo nivel y minuciosa de tus arrays, usando ArrayInitialize.

 
Vasiliy Sokolov:

1. Peter, la inicialización se elimina, porque este procedimiento lleva tiempo, y en C++ y MQL5 no es habitual pagar por algo que no se usa. La inicialización de la matriz no siempre es necesaria, por ejemplo, si se llena la matriz con los valores requeridos inmediatamente, no es necesario.

2. Y todavía por su pregunta no entiendo cuál es la dificultad. Siempre se sabe el tamaño de la matriz. Si se reparte un array, siempre se sabe cuántos elementos adicionales se le añaden. Así que es fácil llamar a la función ArrayInitialize después de ArrayResize.

Te preguntarás, ¿cómo se utiliza MQL5 cuando hay tantas cosas adicionales que considerar? La respuesta es: Los que usan MQL5 a buen nivel usan la librería estándar, por lo que ni siquiera piensan en estas cosas, no inicializan un array o su repartición, simplemente añaden nuevos valores. Pero como eres un dartán y no admites nada de eso, sólo tienes una opción: la gestión a bajo nivel y minuciosa de tus arrays, usando ArrayInitialize.

Vasily, punto por punto:

1. La lógica nos dice que el procedimiento de limpieza del array es ejecutado por el compilador sólo una vez en la etapa de compilación. Si se ha eliminado, significa que se ha querido aumentar el rendimiento del compilador en detrimento de la comodidad del programador, pero quizás para aumentar su nivel.

2. El tamaño del núcleo depende del código cibernético. Cuantos más elementos, más grande será la matriz del núcleo. Por lo tanto, el núcleo es dinámico. Se construye por etapas. Si hay basura en sus celdas, las referencias de una celda a otra en las funciones en diferentes etapas de la construcción causarán la caída del programa.

En MT4 no existía este problema porque las celdas no inicializadas eran ceros y no valores aleatorios. En resumen, mi tecnología debería funcionar inicialmente con una matriz limpia.

3. No estoy en contra de la limpieza forzada de las matrices personalizadas, sólo que, como he dicho, me da un poco de reparo. Durante unos días no pude entender por qué todo se bloquea. Pensaba que era culpa mía, resulta que me han quitado una de las comodidades)).


No importa, ya nos acostumbraremos).


ZS. Por cierto, debo decir que mi código es absolutamente multiplataforma. No necesito cambiar nada excepto esta limpieza.

 
Реter Konow:

No hay ningún error.

Se ha eliminado la inicialización automática de las matrices con ceros durante la declaración. ¿Por qué? - desconocido. ...

Para poder escribir programas rápidos. La inicialización no siempre es necesaria, lo más frecuente es que el array se llene con sus propios datos inmediatamente.

 
Dmitry Fedoseev:

Para poder escribir programas rápidos. La inicialización no siempre es necesaria, el array suele llenarse con sus propios datos inmediatamente.

DE ACUERDO. Ya veo.

 
Реter Konow:

... Si hay basura en sus celdas, entonces las referencias de una celda a otra en funciones en diferentes etapas de construcción, hacen que el programa se bloquee.

Piotr, si tienes basura en tu núcleo, sólo tú eres responsable de ella. MQL5, a diferencia de MQL4, no trata de entender lo que el usuario quiere y esto es correcto.

 
P.D. Creo que habrías tenido mucha más suerte, Peter, si hubieras acabado en un foro de JavaScript de algún tipo. Hay muchas de esas delicias ahí. ¡Habrías alcanzado grandes cotas!