Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 427

 
Artyom Trishkin:
Y leer cuántas veces se inicializa una variable estática. Y la propia pregunta desaparecerá por lo absurda que es ;)

Entonces cómo entender esto: Las variables locales declaradas con la palabra clave static conservan sus valores durante el tiempo de vida de la función. Cada vez que se llama de nuevo a la función, estas variables locales contienen los valores que tenían en la llamada anterior. ¿Una variable declarada en una función definida por el usuario no es una variable local?

 
Alekseu Fedotov:

Sobre la segunda pregunta,

si la primera garrapata no atrapa, la segunda lo hará.

Devuelve la hora de apertura del bar. Será lo mismo en todo el bar.
 
novichok2018:

Entonces, cómo entender esto: Las variables locales declaradas con la palabra clave static conservan sus valores durante el tiempo de vida de la función. Cada vez que se llama de nuevo a la función, estas variables locales contienen los valores que tenían en la llamada anterior. ¿Una variable declarada en una función definida por el usuario no es una variable local?

El modificador static la hace estática, y se almacena en la memoria de las variables estáticas, no locales.
 
Artyom Trishkin:
Devuelve la hora de apertura del bar. Será lo mismo en todo el bar.

Lo tengo aquí. Gracias.

 
Artyom Trishkin:
El modificador static lo hace estático y ya se almacena en la memoria de las variables estáticas, no de las locales.

Aquí es donde no lo entiendo. En mi opinión, no importa dónde se almacene, por código ponemos a cero el valor de la variable cada vez que se accede a la función. ¿Para qué?

 
novichok2018:

Aquí es donde no lo entiendo. En mi opinión, no importa dónde se almacene, por código ponemos a cero el valor de la variable cada vez que se accede a la función. ¿Para qué?

Para el primer lanzamiento - cuando lo declare. A partir de ahí, es usted quien debe controlar su contenido.
 
Artyom Trishkin:
Para el primer lanzamiento - en la declaración. Además, tú mismo controlas su contenido.

Sin embargo, en mi opinión, esto no es cierto: el código se lee línea por línea cada vez y cada vez que llega a cero, y en la primera ejecución, aunque no haya inicialización, la variable tomaría un valor nulo. Por lo tanto, la línea estática datetime New_Time=0; obliga al programa a hacer un trabajo innecesario.

 
novichok2018:

Sin embargo, en mi opinión, no es así: el código se lee línea por línea cada vez y cada vez que llega a cero, y en la primera ejecución aunque no haya inicialización, la variable tomaría un valor cero. Por lo tanto, la cadena estática datetime New_Time=0; obliga al programa a hacer un trabajo innecesario.

Te dicen "no", dices "sí"...
Simplemente imprime el valor de la variable en el diario y observa. ¿Por qué te peleas cuando te explican las cosas más sencillas?
Puedes seguir sin mí hasta que lo compruebes tú mismo.
 
Artyom Trishkin:
Tú dices que no, tú dices que sí...
Sólo hay que imprimir el valor de la variable en el cuaderno de bitácora y ver. ¿Por qué molestarse cuando se explican las cosas más sencillas?
A continuación, sin mí, hasta que lo compruebe usted mismo.
No tienes que ofenderte. Pero, al parecer, los programadores leen el texto de forma diferente. Siempre he creído que si en un programa se dice "igualar a cero", el ordenador debe igualar a cero, independientemente de que sea al inicio o al referirse repetidamente a una línea de código. Y no hay necesidad de visitar ningún diario para demostrar que la inicialización cero es innecesaria, simplemente se puede eliminar: static datetime New_Time; produce absolutamente los mismos resultados que static datetime New_Time=0; no sé cuánto más rápido es el funcionamiento del programa, supongo que no es significativo en absoluto, pero aun así elimina el "gesto innecesario".
 
novichok2018:
No se ofenda. Pero los programadores, obviamente, leen el texto de forma diferente. Siempre he pensado que si en un programa dice "igualar a cero", el ordenador debe igualar a cero independientemente de que sea en el lanzamiento o en la referencia recurrente a una línea de código. Y no hace falta visitar ningún diario para demostrar que la inicialización cero es innecesaria, basta con eliminarla: static datetime New_Time; produce absolutamente los mismos resultados que static datetime New_Time=0; no sé cuánto más rápido es el funcionamiento del programa, admito que no es nada significativo, pero aun así elimina el "gesto innecesario".
No me ofende la terquedad. ¿Por qué?
Y las variables deben ser inicializadas explícitamente. Algún día llegarás a la importancia de la inicialización. Mientras tanto, puedes desechar todo lo que está dentro de las llaves.
Razón de la queja: