Verse utiliza int como tipo para almacenar y manejar enteros. Un int en Verse puede contener un número positivo, un número negativo o un cero, y no tiene ningún componente fraccionario. Los números enteros admitidos van de −9 223 372 036 854 775 808 a 9 223 372 036 854 775 807 (incluidos).
Puedes incluir valores int predefinidos dentro de tu código como literales de int. Un literal de int es un número entero en tu código.
Los siguientes son ejemplos de cómo puedes crear constantes y variables enteras con literales de int:
# Esta variable nunca cambiará, porque es universalmente correcta.
AnswerToTheQuestion : int = 42
# Un carcaj de flechas cuesta esta cantidad de monedas, y no se puede cambiar:
CoinsPerQuiver : int = 100
# Un carcaj de flechas contiene esta cantidad de flechas, y no se puede cambiar:
ArrowsPerQuiver : int = 15
# El jugador tiene actualmente 225 monedas y 3 flechas. Estos valores pueden cambiar.
var Coins : int = 225
var Arrows : int = 3
# La partida lleva la cuenta del número total de compras que realiza el jugador.
# Hasta ahora, el jugador no ha comprado nada.
var TotalPurchases : int = 0
Operaciones de int
El tipo int admite operaciones matemáticas y comparaciones con otros enteros.
Matemáticas
Puedes utilizar las cuatro operaciones matemáticas básicas con números enteros en Verse: + para sumar, - para restar, * para multiplicar y / para dividir.
Para los números enteros, el operador / es falible, y el resultado es un tipo rational si es correcto.
El tipo rationalsolo puede utilizarse como parámetro de las siguientes funciones:
Floor(): Redondea a la baja el valor racional al número entero más cercano.Ceil(): Redondea al alza el valor racional al número entero más cercano.
El siguiente código utiliza la división de enteros para determinar cuántas flechas puede comprar el jugador con sus monedas. La división de enteros se utiliza en una expresión if porque esta división puede fallar y, por tanto, debe estar en un contexto de fallo:
if (NumberOfQuiversYouCanBuy : int = Floor(Coins / CoinsPerQuiver)):
NumberOfArrowsYouCanBuy : int = NumberOfQuiversYouCanBuy * ArrowsPerQuiver
También puedes combinar operadores para operaciones matemáticas básicas (suma, resta y multiplicación) y para actualizar el valor de una variable. Estos operadores combinados son lo mismo que asignar el resultado al primer operando de la operación matemática. El siguiente código utiliza matemáticas de int para vender las flechas del jugador a cambio de monedas:
# Coge monedas del jugador. Esto puede hacer que el jugador tenga un saldo negativo de
# monedas si no se comprueba que el jugador tiene suficientes monedas de antemano.
set Coins -= CoinsPerQuiver
# Da flechas al jugador.
set Arrows += ArrowsPerQuiver
# Cuenta esto como una compra. No tenemos una variable para esto.
set TotalPurchases += 1
El operador /= no es compatible con int, ya que el resultado de la división de enteros es de tipo rational y, por tanto, no puede asignarse a un int.
Enteros con signo
Un entero con signo es un valor que puede ser positivo, negativo o cero. El operador - se puede utilizar para negar un entero si - aparece antes del entero, por ejemplo -3.
También puedes usar el operador + antes de un entero para ayudar a alinear tu código visualmente, pero no cambiará el valor del entero.
# Esta es una forma alternativa de vender flechas al jugador. Es
# funcionalmente idéntico al código de la sección anterior Matemáticas.
set Coins += -CoinsPerQuiver
set Arrows += +ArrowsPerQuiver
set TotalPurchases += +1
Comparación
Puedes utilizar el operador falible = para comprobar si dos enteros son iguales, y el operador falible <> para comprobar la desigualdad.
Dado que los números están ordenados, se puede utilizar el operador falible < para comprobar si un entero es menor que otro, y el operador falible > para comprobar si un entero es mayor que otro.
Puedes utilizar el operador falible <= para comprobar si un entero es menor o igual que otro, y el operador falible >= para comprobar si un entero es mayor o igual que otro.
# Asegúrate de que el jugador puede permitirse esta compra.
if (Coins >= CoinsPerQuiver):
# ¡Así es! Procede con la compra.
set Coins -= CoinsPerQuiver
set Arrows += ArrowsPerQuiver
set TotalPurchases += 1
Biblioteca estándar
La biblioteca estándar proporciona funciones para ayudar a crear y utilizar enteros, y estructuras y funciones matemáticas comunes. Consulta las Referencias de la API de Verse para obtener más información sobre estas funciones.
Representaciones alternativas de los enteros
También puedes utilizar el sistema numérico hexadecimal para representar números enteros, que es base 16, en lugar del sistema numérico decimal que utiliza base 10. Esto significa que los valores hexadecimales se representan con los dígitos 0-9 y las letras A-F. Por ejemplo, 0x7F es lo mismo que 127, y 0xFACE es lo mismo que 64206.
Detalles de implementación
En una actualización futura, int representará semánticamente un entero de cualquier tamaño, pero actualmente un int en Verse se implementa como un entero de 64 bits con signo. Hasta esta actualización, un int debe estar en el rango [-2^63, ... , -1, 0, 1, ... , 2^63 - 1], y los enteros, incluidos los resultados de operaciones matemáticas que estén fuera de este rango para tamaños int, producirán un error en tiempo de ejecución denominado desbordamiento de enteros.
Aunque los números enteros tienen actualmente estas restricciones, el código Verse con números enteros que escribas hoy será semánticamente el mismo que cuando los números enteros puedan tener precisión arbitraria.
Tipo persistente
Los valores enteros son persistentes, lo que significa que puedes utilizarlos en tus variables weak_map de tu ámbito de módulo y hacer que sus valores se mantengan a lo largo de la sesión de juego. Para obtener más información sobre la persistencia en Verse, consulta la sección Cómo utilizar datos persistentes en Verse.