Tipo string

El tipo string está pensado para almacenar información basada en texto y está marcado por la palabra clave string. Una cadena, o string, es una secuencia de caracteres ushort y es compatible con toda la gama Unicode, lo que incluye múltiples scripts nacionales. Por ejemplo, los nombres de los instrumentos financieros y los comentarios de las órdenes de trading son cadenas.

Por la naturaleza específica de las cadenas, su tamaño es un valor variable igual a la longitud duplicada del texto (cantidad de caracteres multiplicada por la «anchura» de un carácter, es decir, 2 bytes) más un carácter más. Este carácter adicional está pensado para el «cero final» (un carácter codificado como 0) que indica el final de la línea. Además, MQL5 utiliza algo de espacio para almacenar la información de servicio, es decir, una referencia al lugar de la memoria en el que comienza la cadena.

A diferencia de C++, en MQL5 no se puede obtener la dirección de una cadena ni ninguna otra variable. El acceso directo a la memoria está prohibido en MQL5.

Una cadena literal se registra en el código fuente como una secuencia de caracteres entre comillas dobles. Por ejemplo, "EURUSD" o "$". Debemos distinguir entre cadenas formadas por un solo carácter, como "$", y los mismos caracteres por separado, como '$'. Se trata de tipos de datos diferentes.

Una cadena vacía aparece como "". Teniendo en cuenta el cero final implícito, consume 2 bytes, aparte de la información de servicio.

Si es necesario utilizar el carácter de comillas dobles dentro de la cadena, este debe ir precedido del carácter de barra invertida, transformándose en una secuencia de control, como "Pulse \"OK\"".

En el script MQL5/Scripts/MQL5Book/p2/TypeString.mq5 se ofrecen ejemplos de inicialización de cadenas.

void OnStart()
{
   string h = "Hello";          // Hello
   string b = "Press \"OK\"";   // Press "OK"
   string z = "";               //
   string t = "New\nLine";      // New
                                // Line
   string n = "123";            // 123, text (not an integer value)
   string m = "very long message "
              "can be presented " 
              "by parts";
   // equivalent:
   // string m = "very long message can be presented by parts"; 
}

La cadena "Hola" se coloca en la variable h.

El texto que contiene comillas dobles se escribe en la variable b.

La variable z se inicializa con una cadena vacía. Esto es básicamente equivalente a describir z sin inicialización, pero aquí hay que hilar más fino. Más adelante, según avancemos en el texto, en la sección de Inicialización de variables descubriremos que las cadenas no inicializadas obtienen un valor especial, NULL, a diferencia de "", para el que, como ya se ha dicho, la memoria se asigna para el cero de terminación. Esta diferencia afecta a la ejecución de la cadena operadores de comparación y algunas otras. A medida que avancemos iremos abordando todos estos aspectos.

La variable t obtendrá un texto que, cuando se imprima en el registro utilizando la función Print o se muestre por otros métodos, se dividirá en 2 cadenas.

La cadena "123" registrada en la variable n no es un número, aunque lo parezca. Existen algunas funciones en MQL5 para convertir texto en números y viceversa (véase la sección Transformación de datos). Además, existe un conjunto independiente de funciones para trabajar con cadenas.

Por comodidad, los literales largos pueden escribirse en varias cadenas, como en el caso de la variable m. La regla general es la siguiente: el compilador fusiona todos los literales hasta el punto y coma que marca el final de la descripción de la variable. En este tipo de aplicación de formato, la clave es no olvidar añadir un espacio intermedio dentro de cada fragmento de la cadena, si ello es necesario (por ejemplo, para separar las palabras del mensaje como en el ejemplo anterior).

Para las cadenas se define la operación de suma (concatenación), denotada por el carácter '+'. Hablaremos de ello en el capítulo dedicado a las expresiones (véase Operaciones aritméticas).

Los caracteres de la cadena pueden leerse por separado, refiriéndose a ellos como elementos de array (véase Utilización de arrays): si s es una cadena, entonces s[i] es el código del carácter i-ésimo de la misma, escriba ushort.