El tipo de cadena representa valores no numéricos, como palabras, nombres, oraciones y otras colecciones de caracteres. Type:Overview Parent: common-types-in-verse Order: 4 Tags: verse Tags: string Topic-Image:string-topic-image.png Hero-Image:string-hero-image.png Social-Image:string-social-image.png
Verse utiliza string como el tipo para almacenar y controlar texto, como "Hello Verse" y "Epic Games". En Verse, una cadena puede contener letras, números, puntuación, espacios y emojis. Una cadena que no contenga ningún carácter "" se denomina cadena vacía.
Puedes incluir valores de cadena predefinidos sin código como literales de cadena. Un literal de cadena es una secuencia de caracteres en el código rodeada por comillas dobles " ".
El siguiente es un ejemplo de cómo crear una variable de cadena denominada Hello inicializada con el literal de cadena "Hello world":
Hello : string = "Hello world"
Codificación de caracteres
La codificación de caracteres es el mapeo entre un carácter de texto y datos que una computadora puede comprender, denominados punto de código.
Verse usa el esquema de codificación de caracteres UTF-8 de Unicode , una norma desarrollada por Unicode Consortium para proporcionar compatibilidad comparable de caracteres entre idiomas, plataformas y dispositivos.
Por ejemplo, el emoticono en esta cadena "🐈" también puede representarse con el punto de código Unicode del emoticono "{0u1f408}". Para obtener una lista completa de los caracteres compatibles con Unicode y sus puntos de código correspondientes, consulta la documentación de Unicode.
La unidad de código UTF-8 es 8 bits (un byte), y codifica los caracteres con puntos de código de uno a cuatro bytes de longitud. Los puntos de código con menor valor usan menos bytes que los puntos de código con mayor valor. Por ejemplo, "a" usa un byte "{0c61}" mientras que "á" usa dos bytes "{0cC3}{0cA1}".
Operaciones con cadenas
Las cadenas admiten concatenación, comparación, indexación, obtener la longitud de la cadena e interpolación.
Concatenación
Concatenación es cuando una cadena se anexa a otra cadena. Puedes usar el operador + para concatenar cadenas.
Por ejemplo, el siguiente código da como resultado la variable Announcement que contiene la cadena "...And the winner is: Player One!" ("... Y el ganador es: ¡Jugador 1!"
# El nombre del jugador ganador:
WinningPlayerName : string = "Jugador uno"
# Construye un mensaje anunciando el ganador.
Announcement : string = "...And the winner is: " + WinningPlayerName + "!"
Interpolación de cadenas
Puedes introducir un valor en una cadena si tiene una función ToString() válida definida en el ámbito actual.
Por ejemplo, el siguiente código da como resultado la variable Announcement que contiene la cadena "...And the winner is: Player One!" ("... Y el ganador es: ¡Jugador 1!"
# El nombre del jugador ganador:
WinningPlayerName : string = "Jugador uno"
# Construye un mensaje anunciando el ganador.
Announcement : string = "...y el ganador es: {WinningPlayerName}!"
Comparación
Si dos cadenas son iguales depende de si usan los mismos caracteres.
La comparación de cadenas en Verse se realiza mediante la comparación de los puntos de código de cada caracter. La comparación de dos cadenas distingue mayúsculas de minúsculas, porque las mayúsculas y minúsculas tienen distintos puntos de código.
Puedes usar el operador falible = para probar si dos cadenas son iguales y el operador falible <> para probar la desigualdad.
Existen múltiples maneras de representar el mismo carácter en Unicode. Por ejemplo, "é" es "{0u0049}", pero también puedes usar dos puntos de código: "{0u0065}", que es "e" y "{0u0301}" que es el acento combinado. Es decir que, si comparas estas cadenas, donde parece que ambas tienen el carácter "é" pero que usan distintos puntos de código, las cadenas no serán iguales. "{0u0049}" no es lo mismo que "{0u0065}{0u0301}".
El siguiente ejemplo comprueba si el jugador ha usado el elemento correcto para avanzar en el juego de aventura o de puzzles:
# Este es el elemento que el puzzle requiere para desbloquear el siguiente paso:
ExpectedItemInternalName : string = "RedPotion"
# Este es el elemento que ha seleccionado el jugador:
SelectedItemInternalName : string = "BluePotion"
# Verifica si el jugador ha seleccionado el elemento correcto.
if (SelectedItemInternalName = ExpectedItemInternalName):
# ¡Claro que sí! Informa que el puzzle puede continuar al siguiente paso.
return true
# No lo ha hecho. Informa que este elemento no avanza el puzzle.
return false
Longitud
Puedes obtener el número de las unidades de código UTF-8 en una cadena si accedes al miembro Length en la cadena. Por ejemplo, "hey".Length es 3.
La longitud de una cadena equivale a la cantidad de datos que toma representar la cadena en unidades de código UTF-8. Por ejemplo, "héy".Length es 4, porque para representar el carácter é se necesita una unidad de código UTF-8 adicional, incluso cuando la cadena parece tener tres caracteres. En el siguiente código, se muestra un temporizador en "segundos" con dos dígitos. Rellenará la pantalla con un cero inicial si es necesario.
# Se supone que SecondsRemaining no es negativo.
SecondsRemaining : int = 30
# Cómo convertir automáticamente la representación del entero en una cadena:
SecondsString:string = SecondsRemaining
# Definir la cadena de visualización del temporizador
var Combined : string = "Time Remaining: "
# Si la cadena es demasiado larga, reemplazarla con el valor máximo de dos dígitos, 99.
if (SecondsString.Length > 2):
# ¡Demasiado tiempo en el reloj! Definir la cadena con un valor máximo codificado
set Combined += "99"
else if (SecondsString.Length < 2):
# Rellenar la pantalla con un cero inicial
set Combined += "0{SecondsString}"
else:
# La cadena ya es de la longitud exacta, añádela.
set Combined += SecondsString
Índice
Puedes acceder a la unidad de código UTF-8 en un índice específico de la cadena. La primera unidad de código UTF-8 en una cadena tiene un índice de 0 y el índice de cada unidad de código subsiguiente aumenta un número.
Por ejemplo, "cat"[0] es "c" y "cat"[1] es "a".
| Índice | 0 | 1 | 2 |
| Carácter | "c" |
"a" |
"t" |
| Unidad de código | "{0c63}" |
"{0c61}" |
"{0c74}" |
En los casos en los que una cadena tiene caracteres representados por más de una unidad de código, habrá un índice para cada unidad de código. Por ejemplo, "á" se representa con dos unidades de código UTF-8 "{0cC3}{0cA1}", por lo que "cát"[1] es "{0cC3}" y "cát"[2] es "{0cA1}".
| Índice | 0 | 1 | 2 | 3 |
| Carácter | "c" |
"á" |
"t" |
|
| Unidad de código | "{0c63}" |
"{0cC3}" |
"{0cA1}" |
"{0c74}" |
El último índice en una cadena es uno menos que la longitud de la cadena. Por ejemplo, "cat".Length es 3 y el índice de "t" en "cat" es 2.
Biblioteca estándar
La biblioteca estándar proporciona funciones para ayudar a crear y usar cadenas. Consulta la referencia de la API de Verse para obtener más detalles sobre estas funciones.
Representaciones alternativas de caracteres
Algunos caracteres tienen representaciones alternativas cuando se usan en un cadena. Por ejemplo, "{}" puede usarse para la interpolación de cadenas o para los puntos de código de caracteres, pero también puede usarse como llaves {} en texto.
Para poder usar una representación alternativa de un carácter en una cadena, debes añadir el carácter de escape "\" antes del carácter en la cadena. Por ejemplo, "\{\}" se representa como {} en el texto y "\n" comienza una nueva línea de texto.
Detalles de implementación
El tipo cadena es un alias de tipo de []char, una matriz de unidades de código UTF-8. Debido a que una cadena es un alias de tipo de una matriz, las cadenas tienen el mismo comportamiento que las matrices.
Existen dos tipos primitivos de caracteres dependiendo de su tamaño y formato de punto de código: char y char32. Las únicas capacidades de char y char32 en Verse son para comparación y para acceder a sus valores.
| Tipo primitivo | Descripción | Formatos admitidos |
|---|---|---|
| char | Un tipo primitivo que representa una sola unidad de código UTF-8 (un byte), hasta el valor 256 (0off). |
Unidades de código de la forma 0oXX. Por ejemplo, 0o52. |
| char32 | Un tipo primitivo que representa un punto de código Unicode. | Puntos de código de la forma 0uXXXX. Por ejemplo, 0u0041. |
También puedes expresar los literales con comillas simples. Que el tipo primitivo de la cadena entre comillas simples sea char o char32 depende de las unidades de código UTF-8 que se usen para el carácter. Por ejemplo, 'e' es char y 'é' es char32.
Tipos persistentes
Los valores de cadena, carácter y char32 son todos persistentes. Esto quiere decir que los puedes usar en tus variables weak_map del módulo y hacer que sus valores persistan entre las sesiones de juego. Para obtener más información sobre la persistencia en Verse, consulta Cómo usar datos persistentes en Verse.