Verse verwendet int als Typ zum Speichern und Handhaben von Ganzzahlen. Ein int in Verse kann eine positive Zahl, eine negative Zahl oder Null enthalten und hat keine Nachkommastelle. Unterstützte ganze Zahlen reichen von -9.223.372.036.854.775.808 bis einschließlich 9.223.372.036.854.775.807.
Du kannst vordefinierte int-Werte als int-Literale in deinen Code einbauen. Ein int-Literal ist eine Ganzzahl in deinem Code.
Die folgenden Beispiele zeigen, wie du ganzzahlige Konstanten und Variablen mit int-Literalen erstellen kannst:
# Diese Variable wird sich nie ändern, weil sie universell richtig ist.
AnswerToTheQuestion : int = 42
# Ein Köcher mit Pfeilen kostet so viele Münzen und kann sich nicht ändern:
CoinsPerQuiver : int = 100
# Ein Köcher mit Pfeilen enthält so viele Pfeile und kann sich nicht ändern:
ArrowsPerQuiver : int = 15
# Der Spieler hat im Moment 225 Münzen und 3 Pfeile. Diese Werte können sich ändern.
var Coins : int = 225
var Arrows : int = 3
# Das Spiel verfolgt die Gesamtzahl der Einkäufe, die der Spieler tätigt.
# Bisher hat der Spieler noch nichts gekauft.
var TotalPurchases : int = 0
Int Operations
Der Typ int unterstützt mathematische Operationen und Vergleiche mit anderen Ganzzahlen.
Mathematik
Du kannst in Verse die vier Grundrechenarten mit ganzen Zahlen anwenden: + für Addition, - für Subtraktion, * für Multiplikation und / für Division.
Für ganze Zahlen ist der Operator / fehlbar, und das Ergebnis ist ein rationaler Typ, wenn er erfolgreich ist.
Der rationale Typ kann nur als Parameter für die folgenden Funktionen verwendet werden:
Floor(): Rundet den rationalen Wert auf die nächstliegende ganze Zahl ab.Ceil(): Rundet den rationalen Wert auf die nächstliegende ganze Zahl auf.
Der folgende Code verwendet eine ganzzahlige Division, um herauszufinden, wie viele Pfeile der Spieler mit seinen Münzen kaufen kann. Die ganzzahlige Division wird in einem if-Ausdruck verwendet, da die ganzzahlige Division fehlschlagen kann und daher in einem Fehlerkontext stehen muss:
if (NumberOfQuiversYouCanBuy : int = Floor(Coins / CoinsPerQuiver)):
NumberOfArrowsYouCanBuy : int = NumberOfQuiversYouCanBuy * ArrowsPerQuiver
Du kannst auch Operatoren für Grundrechenarten (Addition, Subtraktion und Multiplikation) kombinieren und den Wert einer Variablen aktualisieren. Diese kombinierten Operatoren sind dasselbe, wie das Ergebnis dem ersten Operanden der mathematischen Operation zuzuweisen. Der folgende Code verwendet die int-Mathematik, um den Spielern Pfeile im Austausch gegen Münzen zu verkaufen:
# Nimm Münzen vom Spieler. Dies kann dazu führen, dass der Spieler eine negative Anzahl
# Münzen hat, wenn nicht vorher geprüft wird, ob der Spieler genug Münzen hat.
set Coins -= CoinsPerQuiver
# Give arrows to the player.
set Arrows += ArrowsPerQuiver
# Verbuche dies als einen Kauf. Wir haben keine Variable dafür.
set TotalPurchases += 1
Der Operator /= wird für int nicht unterstützt, da das Ergebnis einer ganzzahligen Division ein rationaler Typ ist und daher keinem int zugewiesen werden kann.
Ganzzahlen mit Vorzeichen
Eine ganze Zahl mit Vorzeichen ist ein Wert, der positiv, negativ oder Null sein kann. Der Operator - kann verwendet werden, um eine ganze Zahl zu negieren, wenn - vor der ganzen Zahl steht, zum Beispiel -3.
Du kannst auch den Operator + vor einer ganzen Zahl verwenden, um deinen Code visuell auszurichten, aber der Wert der ganzen Zahl wird dadurch nicht verändert.
# Dies ist ein alternativer Weg, um Pfeile an den Spieler zu verkaufen. Er ist
# funktional identisch mit dem Code im Abschnitt Mathe oben.
set Coins += -CoinsPerQuiver
set Arrows += +ArrowsPerQuiver
set TotalPurchases += +1
Vergleich
Du kannst den fehlbaren Operator = verwenden, um zu prüfen, ob zwei ganze Zahlen gleich sind, und den fehlbaren Operator <>, um auf Ungleichheit zu prüfen.
Da Zahlen geordnet sind, kannst du den fehlbaren-Operator < verwenden, um zu prüfen, ob eine ganze Zahl kleiner als eine andere ganze Zahl ist, und den fehlbaren-Operator >, um zu prüfen, ob eine ganze Zahl größer als eine andere ist.
Du kannst den fehlbaren Operator <= verwenden, um zu prüfen, ob eine ganze Zahl kleiner oder gleich einer anderen ganzen Zahl ist, und den fehlbaren Operator >=, um zu prüfen, ob eine ganze Zahl größer oder gleich einer anderen ganzen Zahl ist
# Prüfe, ob sich der Spieler diesen Kauf leisten kann.
if (Coins >= CoinsPerQuiver):
# Er kann! Setze den Einkauf fort
set Coins -= CoinsPerQuiver
set Arrows += ArrowsPerQuiver
set TotalPurchases += 1
Standard-Bibliothek
Die Standardbibliothek bietet Funktionen, die helfen, Ganzzahlen sowie allgemeine mathematische Strukturen und Funktionen zu erstellen und zu verwenden. Weitere Details zu diesen Funktionen findest du in der Verse API-Referenz
Alternative Darstellungen von Ganzzahlen
Du kannst zur Darstellung ganzer Zahlen auch das hexadezimale Zahlensystem verwenden, bei dem es sich um die Basis 16 handelt, anstatt um das dezimale Zahlensystem, das die Basis 10 verwendet. Das bedeutet, dass hexadezimale Werte mit den Ziffern 0-9 und den Buchstaben A-F dargestellt werden. Zum Beispiel ist 0x7F das gleiche wie 127 und 0xFACE ist das gleiche wie 64206.
Implementierungsdetails
In einem zukünftigen Update wird int semantisch eine Ganzzahl beliebiger Größe darstellen, aber derzeit ist eine int in Verse als 64-bit Ganzzahl mit Vorzeichen implementiert. Bis zu diesem Update muss ein int im Bereich [-2^63, ... , -1, 0, 1, ... , 2^63 - 1] liegen. Ganzzahlen, einschließlich der Ergebnisse von mathematischen Operationen, die für int-Größen außerhalb dieses Bereichs liegen, führen zu einem Laufzeitfehler, der als integer overflow bezeichnet wird.
Obwohl Ganzzahlen derzeit diesen Einschränkungen unterliegen, ist der Verse-Code, den du heute mit Ganzzahlen schreibst, semantisch derselbe als wenn Ganzzahlen eine beliebige Genauigkeit hätten.
Dauerhafte Typen
Ganzzahlen sind dauerhaft, was bedeutet, dass du sie in deiner modulbereichsbezogenen Variable weak_map verwenden kannst und ihre Werte dann über Spielsitzungen hinweg erhalten bleiben. Weitere Details zum Fortbestand in Verse findest du unter Verwenden dauerhafter Daten in Verse.