Características del lenguaje mql4, sutilezas y técnicas - página 12

 
Ihor Herasko:

En muchas empresas de software, un código como éste haría que les arrancaran todos los dedos. Lo primero que hay que hacer siempre y en todo momento es evitar la "lectura innecesaria". Por ejemplo, si se utiliza una condición al introducir una función:

entonces se recomienda escribir:

Este enfoque es una gran ayuda contra las condiciones de encierro.

Una vez más, es un dolor de cabeza. Porque nadie comprobó lo que devolvía la función OrderType(). ¿O tal vez devolvió -1 o 6? Este es un ejemplo de cómo se puede entrar en las propiedades del compilador, lo que siempre debe evitarse. Usted mismo cita muchos ejemplos de código multiplataforma. Entonces, ¿por qué se aleja de ella en este caso? Saldrá un nuevo compilador de MQ y este código ya no funcionará correctamente.

Con continuar la misma situación. Un código como:

es más difícil de leer que:

Y, sin embargo, la eficacia de la ejecución es la misma en ambos casos.

Eso es una verdadera lástima:

if (!OrderSelect(i, SELECT_BY_POS))
   continue;

if (OrderSymbol() != Symbol())
   continue;

if (OrderMagicNumber() != m_nMagicNumber)
   continue;
 
Vitaly Muzichenko:

Es un fastidio total, ¿no?

¿Qué es lo que está en el tintero? Una línea de una superexpresión es donde se pone difícil. Los humanos no son ordenadores y no tienen que procesar el resto de la condición. Un humano, a diferencia de un ordenador, tiene que calcular toda la expresión hasta el final y entonces sólo entiende que su primer componente conduce a un resultado falso.

En una entrada, en la que todo se descompone por condiciones simples, este cálculo es innecesario: la primera condición no se cumple - se va.

Hay que ahorrar tiempo, no cuerdas. Pero sólo luchan por la brevedad, que en realidad es un empaquetamiento de operaciones y condiciones entre sí. Si este embalaje le diera una ganancia de productividad considerable, podría entenderlo. Pero no es así. El crecimiento máximo está dentro del error de medición. La gente se preocupa por ahorrar cadenas, pero no piensa en absoluto en el ahorro de tiempo que supone entender y depurar el código.

 
Ihor Herasko:

¿Qué es la lata? Una línea de super-expresión - ahí es donde es difícil. Los humanos no son ordenadores, por lo que pueden entender inmediatamente que no tienen que procesar más la condición. Un humano, a diferencia de un ordenador, tiene que calcular toda la expresión hasta el final y entonces sólo entiende que su primer componente conduce a un resultado falso.

En una entrada, en la que todo se descompone por condiciones simples, este cálculo es innecesario: la primera condición no se cumple - se va.

Hay que ahorrar tiempo, no cuerdas. Pero sólo luchan por la brevedad, que en realidad es un empaquetamiento de operaciones y condiciones entre sí. Si este embalaje le diera una ganancia de productividad considerable, podría entenderlo. Pero no es así. El crecimiento máximo está dentro del error de medición. La gente se preocupa por ahorrar cadenas, pero no piensa en absoluto en el ahorro de tiempo que supone entender y depurar el código.

Yo no lo llamaría una super-expresión difícil de leer.

if(!OrderSelect(i, SELECT_BY_POS) || OrderSymbol() != Symbol() || OrderMagicNumber() != m_nMagicNumber)
   continue;

Ah, y el "ciclo de cálculo corto" es algo básico que se tiene en cuenta "automáticamente" al leer una condición sin requerir ningún esfuerzo mental para hacerlo.

De nuevo, una opinión puramente subjetiva.

 
Vladislav Boyko:

Tú mismo has aceptado que es una cuestión de costumbre.

Y lo diré de nuevo. No estoy animando a nadie a que cambie sus hábitos y busque una diferencia de sabor en los rotuladores.

Igor Makanu:

Como has dicho, es cuestión de gustos, pero como sabes: todos los rotuladores son diferentes ))))

Los rotuladores sólo se diferencian en el color, saben igual.
 
Vladislav Boyko:

Yo no lo llamaría un superlativo difícil de leer.

Y no hay necesidad de llamar a nada aquí. Hasta ahora, mis oponentes (tú incluido) no han presentado ni un solo argumento de que esta expresión sea más fácil de leer que el desglose de líneas.

Sin embargo, desde mi punto de vista, se han esgrimido hasta tres argumentos:

  1. Una línea larga no cabe en el campo de visión. Requiere al menos una mínima rotación de la cabeza (aumenta el tiempo de procesamiento). Una línea corta y la que le sigue no requieren tanto esfuerzo.
  2. En una larga cola es más fácil cometer un error y no darse cuenta. La división en líneas disminuye la probabilidad de este tipo de error.
  3. Una línea larga es imposible de depurar. Dividirlo en cadenas está bien.
No hay preferencias subjetivas. Todo se justifica por el sentido práctico y nada más. Sí, a algunas personas les puede resultar más cómodo rascarse la oreja izquierda con el talón derecho, pero eso no significa que este enfoque sea práctico. En la naturaleza, todo está sujeto a la practicidad y los que son más prácticos sobreviven.
 
Ihor Herasko:

Y no es necesario nombrar nada aquí. Hasta ahora, mis oponentes (tú incluido) no han presentado ni un solo argumento de que esta expresión sea más fácil de leer que el desglose de líneas.

Sin embargo, desde mi punto de vista, se han esgrimido hasta tres argumentos:

  1. Una línea larga no cabe en el campo de visión. Requiere al menos una mínima rotación de la cabeza (aumenta el tiempo de procesamiento). Una línea corta y la que le sigue no requieren tanto esfuerzo.
  2. En una larga fila es más fácil cometer un error y no darse cuenta. La división en líneas disminuye la probabilidad de este tipo de error.
  3. Una línea larga es imposible de depurar. Dividirlo en cadenas está bien.
No hay preferencias subjetivas. Todo se justifica por el sentido práctico y nada más. Sí, a algunas personas les puede resultar más cómodo rascarse la oreja izquierda con el talón derecho, pero eso no significa que este enfoque sea práctico. Y en la naturaleza, todo está sujeto a la practicidad y los que son más prácticos sobreviven.

Igor, si los ojos no se mueven en las cuencas oculares y tienes que girar la cabeza, puedes escribir así:

if(OrderSelect(i, SELECT_BY_POS)
&& OrderSymbol() == _Symbol
&& OrderMagicNumber() == m_nMagicNumber)
 {
  // Делаем что надо...
 }

Y cuántas líneas cortas me he encontrado con errores........... Aparentemente, el número y la probabilidad de errores no dependen de la longitud de la línea.

Sólo se puede estar de acuerdo con la depuración. Pero el hábito se desarrolló antes de que apareciera el depurador en mql4 y no todo el mundo es capaz de cambiar los hábitos.

 
Alexey Viktorov:

Igor, si los ojos no se mueven en las cuencas oculares y tienes que girar la cabeza, puedes escribirlo así:

Y cuántas líneas cortas me he encontrado con errores........... Por lo visto, el número y la probabilidad de errores no dependen de la longitud de la línea.

Uno sólo puede estar de acuerdo con la depuración. Pero el hábito se ha desarrollado antes del depurador en mql4 y no todo el mundo es capaz de cambiar los hábitos.

Puedes hacerlo así, pero con este estilo para ver un bloque de programa tienes que desplazar la pantalla 2 veces y esto es peor que ver todo el código en una sola pantalla. (No te concierne, es sólo un ejemplo).

 
fxsaber:

Por desgracia, este mito no encuentra apoyo en la historia del foro. Además, los promotores han dejado clara su posición de que tales cambios no pueden realizarse por principio.

Había una cosa así. La clasificación tuvo un impacto.

La discusión probablemente se llevó a cabo en el antiguo foro de metatrader4.com (todavía abierto recientemente, ahora se redirige a mql5.com).

 
Andrey Khatimlianskii:

Fue así. La clasificación se vio afectada.

La discusión debe haber sido en el antiguo foro de metatrader4.com (todavía abierto recientemente, ahora redirigiendo a mql5.com).

Lo fue, lo fue. Al igual que ahora con el número de órdenes históricas, si se establece "Hoy", entonces OrdersHistoryTotal() devolverá el número de órdenes cerradas que se han cerrado hoy. Si la pestaña "Historial" no muestra ningún pedido antiguo, entonces no está disponible ni siquiera por ticket.

 
Alexey Viktorov:

Lo fue, lo fue. Al igual que ahora con el número de órdenes históricas, si se establece "Hoy", OrdersHistoryTotal() devolverá el número de órdenes cerradas que se han cerrado hoy. Si la pestaña "Historial" no muestra ningún pedido antiguo, entonces no está disponible, ni siquiera por ticket.

Se trata de clasificar. Por aquel entonces, si no estaban ordenados por tiempo, no podías encontrar el último por índice: era el último de los ordenados.

¿Y ahora la profundidad de la historia no depende de la ficha seleccionada? En mi opinión, sigue siendo así.

Razón de la queja: