Sobre el estilo de codificación - página 5

 

¿Dónde están las clases en MQL4, C-4? Y creo que los desarrolladores dijeron que no habrá herencia en el 5 por el momento.

 
Mathemat >> :

¿Dónde están las clases en MQL4, C-4? Y creo que los desarrolladores dijeron que no habrá herencia en el 5.

Ya lo hay, con todas las sutilezas que conlleva. Y se puede ver incluso en el Tetris (en fuentes mq5).

 

Vaya, qué interesante. Hace tres meses que se publicó el juguete, y acabo de enterarme...

 
Mathemat >> :

Vaya, qué interesante. Hace tres meses que se publicó el juguete y acabo de enterarme...

Creo que me lo he perdido....

¿a qué viene esta exclamación "wow"? ¿hay algún mt5 por ahí para probar las fuentes? si es así, no te importa darme un enlace para descargarlo.

 

Pues no, la MT5 aún no es visible (para los simples mortales), pero al menos puedes mirar el código. Está más o menos claro lo que se puede esperar.

 

¿Puede alguien sugerir una aplicación que pueda analizar el código fuente MQL y mostrar de alguna forma los nombres de las variables/funciones utilizadas y el número de sus "menciones" en el texto?

por ejemplo, para atrapar restos de variables no utilizadas de los textos arrojados, y para no renombrar accidentalmente un nombre muy abreviado a algo más largo y claro, que resulta ser el nombre de una variable global, de la que te olvidaste hace tiempo y que existe en alguna parte del código.

 
YuraZ >> :

Prefiero

si ( a > c )

codret = 3;

si ( l < b )

codret = 5;

...

...

si ( h != b )

codret = 100;


// especialmente si hay algunas operaciones adicionales comunes para todas las salidas antes de la devolución

... Por ejemplo, aquí hacemos algo más

retrun( codret);

}

Acabas de dar un ejemplo de por qué utilizo salidas de retorno múltiples. En su ejemplo, la función devolverá el último if() activado, no el primero. En mi ejemplo, la función devolverá la primera coincidencia. En la práctica, a menudo me encuentro con que necesito devolver exactamente el primer valor que satisface la condición, y casi nunca tengo que devolver la última comprobación activada. En este ejemplo, el hecho de tener un solo retorno no facilita el seguimiento de los valores devueltos por la función, al contrario, se puede esperar todo de un solo retorno.

Por cierto, personalmente no me gusta separar el carácter crucial ";" de la expresión:

extern double max_price[100] ; //almacena los precios de los máximos de las últimas cien barras

extern double max_price[100] ; //Contiene los precios de las últimas cien barras como máximo - sólo lo escribo así

 
En los años 70 había una tendencia muy de moda llamada "Programación estructurada". Se han escrito muchos libros sobre ello. Las frases más recordadas eran: la función debe caber en una hoja (entonces no había pantallas), no goto, y así todo el libro. Luego, supuestamente, todo se convirtió en programación orientada a objetos. ¿Quizás estemos reinventando la rueda de nuevo?
 

No, sólo estamos hablando de estilo. Por cierto, en algunos casos no me importa el goto en absoluto.

 
C-4 >> :

¿Por qué declarar una función dentro de otra función? Personalmente, como he crecido sólo en C y C++ no entiendo este método.

La encapsulación... Cuando escribes plantillas y quieres ocultar una función o functor o clase muy local, es muy útil.

Y la mayor parte de las veces se puede arreglar con un espacio de nombres sin nombre.

2. Odio el estilo muy común de poner paréntesis rizados como este:

Mucho para nada. Un caldo de cultivo para todo tipo de meteduras de pata con aparatos. En el pasado, la justificación era el ahorro de espacio y la regla del tamaño del código de la función.

Pero ahora, en la era de los terabytes, ¿por qué deberíamos lamentar la falta de espacio?

5. Utilizo funciones dentro de funciones:

Ineficiente (con varias llamadas de uno), manchado y largo. Especialmente uno de UB, que es un semillero de errores maliciosos no triviales.


Además... sobre los copypastes. Algo muy molesto :). Confieso que lo uso y me equivoco muy a menudo. Por ejemplo, me olvidé de cambiar el nombre de una variable, cambiar un comentario o lo que sea.

Por eso la revisión del código es algo muy útil.


Sobre Pascal :) . Hasta ahora, sigue siendo la principal lengua de las Olimpiadas. Por una simple razón: pocas palabras clave, estructura lógica.

Durante mucho tiempo no creí que Pascal (o más bien Delphi) fuera peor que C++, hasta que descubrí que C++ era mejor.

Ahora creo que Pascal es mejor en un sentido: es más difícil escribir código binario en él.


>> Luego, sobre los comentarios, es todo una mierda, sobre todo lo del 30%.

Escriba código autodocumentado y será feliz. Como no hay clases en MQL4 es bastante difícil de hacer. Pero con las clases debería ser más fácil.


Todo lo demás -sangría, principios de denominación, alineación- no son más que recomendaciones.

Por cierto, hablando de funciones. ¿Cuál debería ser el tipo de letra? ¿Y si es una línea más? Lo principal es dejar claro lo que hace, y el resto son sólo recomendaciones.


Lo más importante es que el código sea lo más comprensible posible para quienes puedan mantenerlo.