- Introducción a MQL5 y al entorno de desarrollo
- Edición, compilación y ejecución de programas
- Asistente MQL y borrador del programa
- Sentencias, bloques de código y funciones
- Primer programa
- Tipos de datos y valores
- Variables e identificadores
- Asignación e inicialización, expresiones y arrays
- Entrada de datos
- Corrección y depuración de errores
- Salida de datos
- Formato, sangría y espacios
- Miniresumen
- Fundamentos de programación
- Programación orientada a objetos
- API comunes
- Creación de programas de aplicación
- Automatización de trading
- Herramientas lingüísticas avanzadas
- Conclusión
Tipos de datos y valores
Además de llamar a la función integrada Symbol, también podríamos utilizar nuestra propia función que hemos definido en el código fuente. Supongamos que queremos imprimir en el registro no sólo «Hola», sino diferentes saludos en función de la hora del día. Determinaremos la hora del día con precisión horaria: de 0 a 8 es por la mañana, de 8 a 16 por la tarde, y de 16 a 24 por la noche.
Es lógico sugerir que la estructura de definición de la nueva función debe ser similar a la de la función OnStart que ya conocemos. Sin embargo, su nombre debe ser único, es decir, no debe duplicar los nombres de otras funciones o palabras reservadas. Estudiaremos la lista de estas palabras más adelante en este libro de texto, aunque por ahora por suerte sugerimos que la palabra Greeting puede utilizarse como nombre.
Al igual que la función Symbol, esta función debe devolver una cadena; esta vez, sin embargo, la cadena debe ser una de las siguientes frases, dependiendo de la hora del día: «Buenos días», «Buenas tardes» o «Buenas noches».
Guiados por el sentido común, utilizamos aquí el concepto común de cadena. Al parecer, el compilador lo encuentra familiar, ya que vimos cómo había generado un programa imprimiendo el texto predefinido. Así, nos hemos acercado fácilmente al concepto de tipos en el lenguaje de programación, siendo uno de los tipos una cadena, es decir, una secuencia de caracteres.
En MQL5, este tipo se describe mediante la palabra clave string. Este es el segundo tipo que conocemos, el primero fue void. Ya hemos visto un valor de este tipo, sin saber que lo era: se trata del literal «Hola, ». Cuando nos limitamos a insertar una constante (en especial, algo así como un texto entrecomillado) en el código fuente, su descripción de tipo no es necesaria: define el tipo correcto automáticamente.
Utilizando la descripción de la función OnStart como muestra, podemos sugerir cómo debería aparecer la función Greeting en una primera aproximación.
string Greeting()
|
En este texto se indica nuestra intención de crear la función Greeting, que puede devolver un valor arbitrario del tipo string. Sin embargo, para que la función realmente devuelva algo, es necesario utilizar una sentencia especial con el operador return . Este es uno de los numerosos operadores MQL5; más adelante los exploraremos todos. Si la función tiene un tipo de valor de retorno distinto de void, debe contener el operador return.
En concreto, para devolver la antigua cadena de saludo «Hola, » de la función, debemos escribir:
string Greeting()
|
El operador return detiene la ejecución de la función y envía como resultado lo que está a su derecha. «Out» oculta el fragmento de código fuente desde el que se ha invocado a la función.
No hemos explorado todas las opciones para escribir expresiones que podrían formar una cadena arbitraria. Sin embargo, el caso más sencillo con el texto entrecomillado se traslada aquí sin cambios. Es importante que el tipo de valor de retorno coincida con el tipo de función, como en nuestro caso. Al final de la sentencia, ponemos un punto y coma.
No obstante, queríamos generar saludos distintos según la hora del día. Por tanto, la función debe tener un parámetro que defina la hora y que pueda tomar valores comprendidos entre 0 y 23. Obviamente, el número de la hora es un número entero, es decir, un número que no tiene parte fraccionaria. Está claro que el tiempo no se detiene en una hora, y que en ella se cuentan los minutos, siendo el número de minutos también un número entero. De nuevo, es inútil determinar la hora del día con precisión de un minuto. Por tanto, nos limitaremos a elegir el saludo únicamente por el número de la hora.
Para los valores enteros hay un tipo especial int en MQL5. Este valor debe enviarse a la función Greeting desde otro lugar del programa, desde el que esta función será invocada. Aquí nos hemos enfrentado por vez primera a la necesidad de describir una célula de memoria con nombre, es decir, una variable.