Verse utiliza string (cadena) como el tipo para almacenar y manejar texto, como "Hello Verse" y "Epic Games". En Verse, una cadena puede contener letras, números, signos de puntuación, espacios y emojis. Una cadena que no contiene ningún carácter "" se denomina cadena vacía.
Puedes incluir valores de cadena predefinidos en el código como literales de cadena. Un literal de cadena es una secuencia de caracteres en el código rodeada de comillas dobles " ".
El siguiente es un ejemplo de cómo crear una variable de cadena llamada Hello e inicializada con el literal de cadena "Hello world":
Hello : string = "Hello world"
Codificación de caracteres
La codificación de caracteres es la asignación entre un carácter de texto y unos datos que el ordenador puede entender, llamados puntos de código.
Verse utiliza el esquema de codificación de caracteres UTF-8 Unicode, un estándar desarrollado por el Unicode Consortium para proporcionar un soporte comparable a los caracteres en todos los idiomas, las plataformas y los dispositivos.
Por ejemplo, el emoji de esta cadena (cadena) "🐈" también puede representarse mediante el punto de código "{0u1f408}" del emoji. Para obtener una lista completa de personajes compatibles con Unicode y sus correspondientes puntos de código, consulta la documentación de Unicode.
La unidad de código UTF-8 es de 8 bits (un byte), y codifica caracteres con puntos de código de uno a cuatro bytes de longitud. Los puntos de código con un valor más bajo utilizan menos bytes que los puntos de código con valores más altos. Por ejemplo, "a" usa solo 1 byte "{0c61}", mientras que "á" utiliza 2 bytes "{0cC3}{0cA1}".
Operaciones de cadena
Las cadenas admiten concatenación, comparación, indexación, obtención de la longitud de la cadena e interpolación.
Concatenación
La concatenación se produce cuando una cadena se añade a otra. Puedes usar el operador + para concatenar cadenas.
Por ejemplo, el siguiente código da como resultado que la variable Announcement contenga la cadena "...Y el ganador es: ¡Jugador Uno!".
# El nombre del jugador ganador:
WinningPlayerName : string = "Player One"
# Crea un mensaje que anuncie el ganador.
Announcement : string = "...And the winner is: " + WinningPlayerName + "!"
Interpolación de cadenas
Puedes inyectar 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 que la variable Announcement contenga la cadena "...Y el ganador es: ¡Jugador Uno!".
# El nombre del jugador ganador:
WinningPlayerName : string = "Player One"
# Crea un mensaje que anuncie el ganador.
Announcement : string = "...And the winner is: {WinningPlayerName}!"
Comparación
Que dos cadenas sean iguales depende de si utilizan los mismos caracteres.
La comparación de cadenas en Verse se hace equiparando los puntos de código de cada carácter. La comparación de dos cadenas distingue entre mayúsculas y minúsculas, porque los caracteres en mayúsculas y minúsculas tienen puntos de código diferentes.
Puedes utilizar el operador falible = para comprobar si dos cadenas son iguales, y el operador falible <> para comprobar la desigualdad.
Puede haber varias formas de representar un mismo carácter en Unicode. Por ejemplo, "é" es "{0u0049}", pero también puedes utilizar dos puntos de código: "{0u0065}", que es "e", y "{0u0301}", que es un acento de combinación. Esto significa que si comparas estas cadenas (cadena), que parecen ser el personaje "é" pero la cadena (cadena) utiliza puntos de código diferentes, la cadena (cadena) no será igual. "{0u0049}" no es lo mismo que "{0u0065}{0u0301}".
El siguiente ejemplo comprobaría si el jugador ha utilizado el objeto correcto para avanzar en un juego de aventura o puzle:
# Este es el objeto que requiere el puzle para desbloquear el siguiente paso:
ExpectedItemInternalName : string = "RedPotion"
# Este es el objeto que el jugador ha seleccionado:
SelectedItemInternalName : string = "BluePotion"
# Comprueba si el jugador tiene seleccionado el objeto correcto.
if (SelectedItemInternalName = ExpectedItemInternalName):
# ¡Así es! Informa de que el puzle puede continuar con el siguiente paso.
return true
# ¡No lo tiene! Informa de que este objeto no hace avanzar el puzle.
return false
Longitud
Puedes obtener el número de unidades de código UTF-8 de una cadena accediendo al miembro Length de la cadena. Por ejemplo, "hey".Length es 3.
La longitud de una cadena significa la cantidad de datos necesarios para representar la cadena en unidades de código UTF-8. Por ejemplo, "héy".Length es 4, porque toma una unidad de código UTF-8 adicional para representar el carácter é, aunque la cadena parece tener tres caracteres. El siguiente código muestra un cronómetro de "segundos" con dos dígitos. Si es necesario, rellenará la pantalla con un cero a la izquierda.
# Se asume que SecondsRemaining es un número no negativo.
SecondsRemaining : int = 30
# Convierte automáticamente la representación int en una cadena:
SecondsString:string = SecondsRemaining
# Configura la cadena de visualización del cronómetro.
var Combined : string = "Time Remaining: "
# Si la cadena es demasiado larga, sustitúyela por el valor máximo de dos dígitos, 99.
if (SecondsString.Length > 2):
# ¡Demasiado tiempo en el reloj! Establece la cadena con un valor máximo codificado.
set Combined += "99"
else if (SecondsString.Length < 2):
# Rellena la pantalla con un cero a la izquierda.
set Combined += "0{SecondsString}"
else:
# La cadena ya tiene la longitud exacta, así que añádela.
set Combined += SecondsString
Índice
Puedes acceder a la unidad de código UTF-8 en un índice concreto de la cadena. La primera unidad de código UTF-8 de una cadena tiene un índice de 0, y cada índice de unidad de código posterior aumenta en 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 | "{0o63}" |
"{0o61}" |
"{0o74}" |
En los casos en que una cadena tenga 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 | "{0o63}" |
"{0oC3}" |
"{0oA1}" |
"{0o74}" |
El último índice de una cadena es uno menos que la longitud de la misma. 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 utilizar cadenas. Consulta Referencia para la API de Verse para obtener más información sobre estas funciones.
Representaciones alternativas de caracteres
Algunos caracteres tienen representaciones alternativas cuando se utilizan en una cadena. Por ejemplo, se puede usar "{}" para la interpolación de cadenas o para los puntos de código de los caracteres, pero también se pueden usar como llaves en sí en texto.
Para poder utilizar 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 muestra como {} en el texto, y "\n" inicia una nueva línea en el texto.
Detalles de implementación
El tipo string es un alias de tipo de []char, una matriz de unidades de código UTF-8. Como la cadena es un alias de tipo para una matriz, la cadena tiene el mismo comportamiento que las matrices.
Hay dos tipos primitivos de caracteres, en función de su tamaño y formato de punto de código (char y char32). Las únicas funciones de char y char32 en Verse son la comparación y el acceso 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). |
Codifica unidades 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 utilizadas para el carácter. Por ejemplo, 'e' es char y 'é' es char32.
Tipo persistente
Los valores de cadena, carácter y char32 son todos persistentes, lo que significa que puedes usarlos en tus variables weak_map de tu ámbito de módulo y hacer que sus valores se mantengan a lo largo de las sesiones de juego. Para obtener más información sobre la persistencia en Verse, consulta la sección Cómo utilizar datos persistentes en Verse.