Verse utilise int comme type pour stocker et gérer les nombres entiers. Un int dans Verse peut contenir un nombre positif, un nombre négatif, ou zéro, et ne contient pas de composante fractionnaire. Les entiers pris en charge vont de -9 223 372 036 854 775 808 à 9 223 372 036 854 775 807 inclus.
Vous pouvez inclure des valeurs int prédéfinies dans votre code sous forme de littéraux int. Un littéral int est un nombre entier dans votre code.
Les exemples suivants montrent comment créer des constantes et des variables entières avec des littéraux int :
# This variable will never change, because it is universally correct.
AnswerToTheQuestion : int = 42
# A quiver of arrows costs this many coins, and cannot change:
CoinsPerQuiver : int = 100
# A quiver of arrows contains this many arrows, and cannot change:
ArrowsPerQuiver : int = 15
# The player currently has 225 coins and 3 arrows. These values can change.
var Coins : int = 225
var Arrows : int = 3
# The game keeps track of the total number of purchases the player makes.
Opérations sur les Int
Le type int prend en charge les opérations et les comparaisons mathématiques avec d'autres nombres entiers.
Math
Dans Verse, vous pouvez utiliser les quatre opérations mathématiques de base avec les nombres entiers : + pour l'addition, - pour la soustraction, * pour la multiplication, et / pour la division.
En ce qui concerne les nombres entiers, l'opérateur / est faillible, et le résultat est de type rationnel s'il réussit.
Le type rationnel ne peut être utilisé que comme paramètre des fonctions suivantes :
Floor(): arrondit la valeur rationnelle au nombre entier inférieur le plus proche.Ceil(): arrondit la valeur rationnelle au nombre entier supérieur le plus proche.
Le code suivant utilise la division d'entiers pour déterminer combien de flèches le joueur peut acheter avec ses pièces. La division d'un nombre entier est utilisée dans une expression if parce que la division d'un nombre entier peut échouer et doit donc se trouver dans un contexte d'échec :
if (NumberOfQuiversYouCanBuy : int = Floor(Coins / CoinsPerQuiver)):
NumberOfArrowsYouCanBuy : int = NumberOfQuiversYouCanBuy * ArrowsPerQuiverVous pouvez également combiner les opérateurs pour effectuer des opérations mathématiques élémentaires (addition, soustraction et multiplication) et mettre à jour la valeur d'une variable. Ces opérateurs combinés reviennent à assigner le résultat au premier opérande de l'opération mathématique. Le code suivant utilise le type mathématique int pour vendre des flèches au joueur en échange de pièces :
# Take coins from the player. This can cause the player to go into negative
# coins if there is no check that the player has enough coins in advance.
set Coins -= CoinsPerQuiver
# Give arrows to the player.
set Arrows += ArrowsPerQuiver
# Count this as a purchase. We do not have a variable for this.
set TotalPurchases += 1L'opérateur /= n'est pas pris en charge pour int, car le résultat de la division d'un nombre entier est un type rationnel et ne peut donc pas être assigné à un int.
Les nombres entiers signés
Un nombre entier signé est une valeur qui peut être positive, négative ou nulle. L'opérateur - peut être utilisé pour inverser le signe d'un nombre entier si - apparaît devant le nombre entier, par exemple -3.
Vous pouvez également utiliser l'opérateur + devant un nombre entier pour aligner votre code visuellement, mais il ne changera pas la valeur du nombre entier.
# This is an alternate way to sell arrows to the player. It is
# functionally identical to the code in the Math section above.
set Coins += -CoinsPerQuiver
set Arrows += +ArrowsPerQuiver
set TotalPurchases += +1Comparaison
Vous pouvez utiliser l'opérateur faillible = pour vérifier si deux nombres entiers sont égaux, et l'opérateur faillible <> pour vérifier l'inégalité.
Les nombres étant ordonnés, vous pouvez utiliser l'opérateur faillible < pour vérifier si un nombre entier est inférieur à un autre nombre entier, et l'opérateur faillible > pour vérifier si un nombre entier est supérieur à un autre nombre entier.
Vous pouvez utiliser l'opérateur faillible <= pour vérifier si un nombre entier est inférieur ou égal à un autre nombre entier, et l'opérateur faillible >= pour vérifier si un nombre entier est supérieur ou égal à un autre nombre entier.
# Check that the player can afford this purchase.
if (Coins >= CoinsPerQuiver):
# They can! Proceed with the purchase
set Coins -= CoinsPerQuiver
set Arrows += ArrowsPerQuiver
set TotalPurchases += 1Bibliothèque standard
La bibliothèque standard fournit des fonctions permettant de créer et d'utiliser des nombres entiers, mais aussi des structures et fonctions mathématiques courantes. Consultez la référence API de Verse pour plus d'informations sur ces fonctions.
Représentations alternatives des nombres entiers
Vous pouvez également utiliser le système de numération hexadécimal, qui est en 0 et 9 et les lettres A à F. Par exemple, 0x7F correspond à 127 et 0xFACE à 64206.
Détails de l'implémentation
Dans une future mise à jour, int représentera sémantiquement un nombre entier de n'importe quelle taille, mais actuellement, un int dans Verse est implémenté comme un nombre entier signé de 64 bits. En attendant cette mise à jour, un int doit être compris dans la plage [-2^63, ..., -1, 0, 1, ..., 2^63 - 1], et les nombres entiers, y compris les résultats des opérations mathématiques qui sont en dehors de cette plage pour les tailles d’int, généreront une erreur d'exécution appelée dépassement sur les entiers.
Bien que les entiers aient actuellement ces restrictions, le code Verse avec des entiers que vous écrivez aujourd'hui sera sémantiquement le même que lorsque les entiers auront une précision arbitraire.
Type persistant
Les valeurs entières sont persistantes, ce qui signifie que vous pouvez les utiliser dans vos variables weak_map sur l'étendue du module et faire persister leurs valeurs d'une session de jeu à l'autre. Pour en savoir plus sur la persistance dans Verse, consultez la rubrique Utiliser des données persistantes dans Verse.