Me ha gustado el artículo, aunque no he entendido nada.
"Por eso la principal tarea que resuelven las plantillas sigue siendo reducir la cantidad de código que escribe un programador desde el teclado."
¿Para qué molestarse con plantillas si se puede prescindir del copiar y pegar? Y la cantidad de código tecleado no te molesta en absoluto -bueno, habrá 300 líneas de código en lugar de 100-, así que ¿qué hay de malo? Lo principal es que funciona y la depuración no sobrecarga.
Y el código será más transparente sin plantillas.
Me ha gustado el artículo, aunque no he entendido nada.
"Por eso la principal tarea que resuelven las plantillas sigue siendo reducir la cantidad de código que escribe un programador desde el teclado."
¿Para qué molestarse con plantillas si se puede prescindir del copiar y pegar? Y la cantidad de código tecleado no te molesta en absoluto -bueno, habrá 300 líneas de código en lugar de 100-, así que ¿qué hay de malo? Lo principal es que funciona y la depuración no sobrecarga.
Y el código será más transparente sin plantillas.
300 :)
¿Qué tal 10-20K (y eso teniendo en cuenta la división en módulos)...? ?
300 :)
Y 10-20K qué tal tú (y eso teniendo en cuenta el desglose en módulos).... ?
¿Son 20.000? Jesús, ¿cómo se cava ahí? ¿Quizás el algoritmo no ha sido finalizado? Esos tamaños deberían haberse puesto en las bibliotecas hace tiempo. ¿Qué estás programando? 20.000 líneas, eso son 10 programadores para seis meses de trabajo.
En cuanto a las bibliotecas, ya te lo dije - teniendo en cuenta la modularidad.
En cuanto a 20K, hemos visto más. Por ejemplo, modzli para 1C 7.7 son 50K líneas (y no es código propio, sino ajeno).
Perdóname si no entiendo la esencia de la tarea. En C++ hay ahorro de registros de código fuente, aquí no. Las plantillas de funciones en C++ muestran dónde se puede ahorrar realmente. "Ahorrar código fuente" es la idea clave.
Y generar una cantidad obviamente excesiva de código fuente para dificultar el trabajo posterior, pues no, por favor.
¿Necesitas la misma función para diferentes tipos de datos? MQL5 tiene sobrecarga de métodos. No tengo ninguna duda de que usted sabe sobre él. Sobre todo porque cambiar el tipo de datos de entrada a menudo requiere cambiar la implementación.
Y sobre esto:
>>Para depurar, por supuesto, tendrás que mover el archivo al directorio del archivo llamado o al directorio Include. Este es exactamente el inconveniente de la depuración del que hablaba más arriba cuando mencioné las desventajas de las pseudoplantillas.
No necesitas mover nada manualmente.
#property copyright "Copyright 2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Función de inicialización experta| //+------------------------------------------------------------------+ void gena() { string filename="code.mqh"; int handle=FileOpen(filename,FILE_WRITE|FILE_UNICODE); //-- generación de código arbitrario string st=TimeToString(TimeLocal(),TIME_DATE|TIME_MINUTES|TIME_SECONDS); string code=" MessageBox(\"¡Hola Mundo! Ahora: "+st+"\");\r\n"; //------------------------------ FileWriteString(handle,code); FileClose(handle); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ int OnInit() { //--- gena(); #include "../Files/code.mqh"; //incluir el código generado //--- return(0); }
El ejemplo es primitivo. Los inkludes se pueden insertar dentro de funciones. Y todo el código en el archivo incluido actúa dentro del ámbito de visibilidad del lugar de inserción. Lo único es que tendrás que crear un archivo code.mqh vacío en Files para evitar que el compilador maldiga. En la primera ejecución se creará el código, y en la segunda incluirá el trozo generado.
Nikolai, aquí hay una pregunta. ¿Tienes una función que evalúe una cadena? Es decir, por ejemplo:
Necesito una función void eval(str), con el resultado a=1.5.
El artículo es bueno, ¡gracias!
Entiendo que la pregunta no es sobre la evaluación, sino sobre el análisis sintáctico. El análisis sintáctico es muy versátil.
Puedes escribir diferentes reglas. Todo depende de lo que quieras obtener.
Por ejemplo: ¿cómo debería comportarse el analizador sintáctico en esos ejemplos?
"double a=1.5;" "double a =1.5;" "double a = 1.5;" "double a=1.5,b=2.5;" "double a =1.5,b =2.5;" "double a = 1.5,b = 2.5;" "double a = 1.5 , b = 2.5 ;"ya sabes. Sólo puedo recomendarte que estudies la funcionalidad de la sección de funciones de cadena en ejemplos sencillos. Si eres capaz de manejar las funciones desde la memoria, podrás planificar tu desarrollo basándote en las posibilidades de la funcionalidad. Sin pensar en lo que puedes y no puedes hacer. Conociendo las posibilidades de la funcionalidad, tendrás una idea clara de qué algoritmo será el más adecuado para resolver tu tarea.
Así que entiendo que la pregunta no se refiere a la evaluación, sino al análisis sintáctico. El análisis sintáctico es muy versátil.
Puedes tener diferentes reglas. Todo depende de lo que quieras conseguir.
Por ejemplo: cómo debería comportarse el analizador sintáctico en esos ejemplos.
ya sabes. Sólo puedo recomendarte que estudies la funcionalidad de la sección de funciones de cadena en ejemplos sencillos. Si eres capaz de manejar las funciones desde la memoria, podrás planificar tu desarrollo basándote en las posibilidades de la funcionalidad. Sin pensar en lo que puedes y no puedes hacer. Conociendo las capacidades de la funcionalidad, tendrás una idea clara de qué algoritmo será el más adecuado para resolver tu tarea.muchas gracias por la respuesta... Estudiaré la cuestión
- www.mql5.com
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Usar Pseudo-Plantillas como Alternativa a Plantillas C++:
Este artículo describe una forma de programas sin usar plantillas, pero manteniendo el estilo de programación inherente a ellas. Trata sobre la implementación de plantillas usando métodos personalizados y tiene un archivo adjunto con un script ya hecho para crear un código basado en las plantillas especificadas.
Autor: Nikolay Demko