![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Java tampoco se ejecuta fuera de su máquina virtual, ahí tendrás los mismos problemas, no puedes hacer una dll que se pueda cargar y llamar desde un programa C.
Si te gusta C# entonces también te gustará ObjectPascal (la seguridad de tipos, la rigurosidad, toda la filosofía que hay detrás, excepto lo de la máquina virtual). Después de todo, el diseñador y principal arquitecto de C# es la misma persona que creó Turbo-Pascal y Delphi (ObjectPascal) y eso se nota. En algunos aspectos, C# es como ObjectPascal con una sintaxis de C (fea, pero hoy en día de moda).
Para interactuar directamente con la máquina y con C-APIs (como se necesita para MetaTrader) y seguir utilizando un lenguaje tan potente como C# no hay muchas alternativas a ObjectPascal. Algunos dicen que C++ es igual de potente (y, por supuesto, también se puede utilizar en lugar de OP), pero es evidente que no es tan elegante, tiene muchas inconsistencias y es tan propenso a los errores que sólo los verdaderos expertos pueden dominarlo realmente.
.... el retorno dentro de una función hará que ésta vuelva al lugar desde el que se llamó a la función.
Esta es la distinción crucial 7bit: Estoy hablando de invocar una función completamente diferente, subrutina o incluso código importado, subrutinas y/o funciones enteras FUERA de la función actual. Un ejemplo conceptual:
Estoy en una función que tiene lugar desde la línea 100 hasta la línea 20, pero quiero invocar algo que cae fuera de ESTE ámbito. Tal vez una función completamente diferente que está en las líneas 50 a 60. <=-Esto no se ajusta a los parámetros y al ejemplo anterior que es lo que estoy preguntando Es un sustituto al 100% del antiguo gosub/return y además la función permite pasar valores y devolver valores.
Puedes tener múltiples declaraciones de retorno dentro de la misma función y también puedes salir de los bucles con break ....
Entendido
Pero me siguen diciendo que puedo moverme dentro del ámbito de una función específica, lo cual entiendo. Pero esto NO es lo que estoy preguntando en absoluto y declarado al principio de todo esto.
En cuanto a las "excepciones", supongo que puedes llamarlas así si lo deseas. Como he dicho, estoy tratando de encontrar un 'trabajo alrededor' para agregar y utilizar la funcionalidad de las funciones tales como: GoTo, GoSub (fuera de la función CURRENT) etc que no existe como una función directamente dentro de MQL4. Por sus respuestas, la mayoría de ustedes saben y entienden estas distinciones de programación, pero no están abordando la pregunta real.
FourX:
Estoy en una función que tiene lugar de la línea 100 a la 20, pero quiero invocar algo que cae fuera de ESTE ámbito. Tal vez una función completamente diferente que está en las líneas 50 a 60.considera esto:
¿Qué pasará ahora? Empecemos con main(), explicaré todos los pasos durante la ejecución (los comentarios están en verde, las instrucciones en negro):
¿Puedes verlo? la función foo necesita un marco de pila local de 8 bytes más la dirección de retorno y la función bar sólo 4 bytes más la dirección de retorno. Sus declaraciones de retorno ya tienen esto incorporado por el compilador en tiempo de compilación, sacan diferentes cantidades de bytes de la pila, no puedes usar un retorno para hacer el trabajo del otro, cada uno funciona sólo para la función para la que fue compilado.
Estos viejos lenguajes que tenían GOTO en todo el programa no tenían alcance de variables locales y lo único que había que hacer bien era que el número de GOSUB y RETURN fueran iguales, todos sus retornos sólo hacían saltar la dirección de retorno y nada más, todos los retornos se comportaban exactamente igual. Pero ahora tenemos un montón de "GOSUB "s de diferentes tamaños (cada uno empuja diferentes cantidades en la pila) y también muchos retornos diferentes que saltan diferentes cantidades de la pila. Y tenemos variables locales en la pila. Esto simplemente no puede funcionar, no importa qué cosas locas intentes construir en el compilador.
Teóricamente podrías hacer GOTO dentro de la *misma* función (y algunos lenguajes lo permiten) pero no puedes mostrarme un trozo de código en el que esto conduzca realmente a un código más elegante y más fácil de entender y mantener que una programación estructurada adecuada. Todo lo que haría es producir un lío horrible. Nadie necesita esto, así que no se implementa.
Todos sabemos ya que MQL4 no tiene funciones nativas como un GoTo O un 'GoSub -=> ReturnFromGoSub'. No hay discusión sobre eso. Esto se ha convertido en repetidas explicaciones y ejemplos del hecho de que MQL4 no tiene tales funciones nativas. No hay discusión allí. Este hilo no trata de eso y nunca lo ha hecho. ¿Así que podemos dejar de discutir sobre lo que ya sabemos y estamos de acuerdo?
Sabemos que son funciones válidas en otros lenguajes de programación y que pueden ser muy útiles.
El objetivo de esto es averiguar si podemos simularlas y utilizarlas con lo que está disponible en MQL4.
Por ejemplo, una función válida para completar el segundo caso en la primera frase de'GoSub -=> ReturnFromGoSub ' sería Volver al punto del programa en el que se llamó al GoSub y devolver los valores del GoSub al punto de llamada en el programa.
Por ejemplo, una terminación de función válida del segundo caso en la primera frase de'GoSub -=> ReturnFromGoSub ' sería Volver al punto del programa en el que se llamó a GoSub y devolver los valores de GoSub al punto de llamada en el programa.
FourX:
'GoSub -=> ReturnFromGoSub ' sería para: Regresar al punto del programa que el GoSub fue llamado y devolver los valores del GoSub al punto de llamada en el programa.
FourX si estás aprendiendo mql4 mientras todavía tienes la mente en BBC Basic piensa en defproc y proc y olvida GoTo y GoSub.
Tuve un BBC micro a principios de los 80 ....ahhhh todavía recuerdo las alegrías de tratar de conseguir que los programas se carguen de su unidad de cinta de cassette :( solíamos escribir programas en BBC Basic
FourX si estás aprendiendo mql4 mientras todavía tienes la mente en BBC Basic piensa en defproc y proc y olvida GoTo y GoSub.
Tuve un BBC micro a principios de los 80 ....ahhhh todavía recuerdo las alegrías de tratar de conseguir que los programas se carguen de su unidad de cinta de cassette :( solíamos escribir programas en BBC Basic
LOL . . . Tenía un Acorn Electron... cuando estaba caliente no leía cosas de la cinta que había escrito cuando estaba fría y viceversa... esos eran los días. ;-)
Sí que eran los días :) girando un destornillador doblado en ese pequeño tornillo por las cabezas de la cinta, mientras que repetidamente golpeando el lado de ella jaja