В Verse int используется в качестве типа для хранения и обработки целых чисел. Переменная int в Verse может содержать положительное число, отрицательное число или ноль и при этом не имеет дробной составляющей. Поддерживаются целочисленные значения в диапазоне от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 включительно.
Вы можете включать предопределённые значения int в свой код как литералы int. Литерал int — это целое число в коде.
Ниже приведены примеры того, как можно создать целочисленные константы и переменные с помощью литералов типа 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.
Операции с переменными типа int
Переменные типа int поддерживают математические операции и сравнения с другими целочисленными значениями.
Математика
В Verse можно использовать четыре основные математические операции с целыми числами: сложение +, вычитание -, умножение * и деление /.
Для целых чисел оператор / может с привести к ошибке, при этом в случае успешного выполнения результат будет иметь тип rational.
Тип rational может использоваться в качестве параметра только для следующих функций:
Floor():округляет значение типа rational до ближайшего целого числа в меньшую сторону.Ceil(): округляет значение типа rational до ближайшего целого числа в бóльшую сторону.
В приведённом ниже коде выполняется деление целых чисел для определения того, сколько стрел игрок может купить на имеющееся у него количество монет. Деление целых чисел выполняется в выражении if, так как такое деление может завершиться с ошибкой, в связи с чем оно должно выполняться в контексте, допускающем ошибки:
if (NumberOfQuiversYouCanBuy : int = Floor(Coins / CoinsPerQuiver)):
NumberOfArrowsYouCanBuy : int = NumberOfQuiversYouCanBuy * ArrowsPerQuiverВы также можете комбинировать операторы для выполнения основных математических операций (сложение, вычитание и умножение) и обновление значения переменной. Эти комбинированные операторы аналогичны присвоению результата первому операнду математической операции. В нижеприведённом коде выполняются математические операции с int для продажи игроку стрел в обмен на монеты:
# 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 += 1Оператор /= не поддерживается переменными типа int, поскольку результат целочисленного деления имеет тип rational и не может быть присвоен переменной типа int.
Целочисленные значения со знаком
Целочисленное значение со знаком — это значение, которое может быть положительным, отрицательным или нулевым. С помощью оператора - можно сделать число отрицательным, поставив - перед самим числом, например -3.
Кроме того, можно использовать оператор + перед целочисленным значением, чтобы выровнять код визуально, при этом целочисленное значение не меняется.
# 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 += +1Сравнение
Вы можете использовать оператор с возможностью ошибки =, чтобы проверить равенство двух целых чисел, и оператор с возможностью ошибки <>, чтобы проверить неравенство.
Поскольку числа упорядочены, можно использовать оператор < (допускающий возможность ошибки) для проверки того, меньше ли одно целочисленное значение другого целочисленного значения, а также оператор с возможностью ошибки > для проверки того, больше ли одно целочисленное значение другого целочисленного значения.
Вы можете использовать оператор с возможностью ошибки <= для проверки того, меньше или равно ли одно целочисленное значение другому целочисленному значению, и оператор с возможностью ошибки >= для проверки того, больше или равно ли одно целочисленное значение другому целочисленному значению.
# 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 += 1Стандартная библиотека
Стандартная библиотека содержит функции, помогающие создавать и использовать целочисленные значения, а также общие математические структуры и функции. Более подробную информацию об этих функциях см. в Справочнике по API Verse.
Альтернативные представления целых чисел
Вы также можете использовать шестнадцатеричную систему счисления для представления целых чисел, которая имеет основание 16, вместо десятичной системы с основанием 10. Шестнадцатеричные значения представляются цифрами 0–9 и буквами A–F. К примеру, 0x7F равно 127, а 0xFACE равно 64206.
Подробнее о реализации
В будущем обновлении int будет семантически представлять целое число любого размера, однако в настоящее время в языке Verse тип int реализован как знаковое 64-битное целое число. До этого обновления значение типа int должно находиться в диапазоне [-2^63, … , -1, 0, 1, … , 2^63 - 1], а целочисленные значения, включая результаты математических операций, которые выходят за пределы этого диапазона целых чисел, будут вызывать ошибку среды выполнения integer overflow.
Несмотря на то что для целочисленных значений в настоящее время действуют эти ограничения, код на языке Verse с целыми числами, который вы пишете сегодня, семантически будет таким же, как и в случае, когда целые числа будут иметь произвольную точность.
Тип persistable
Целочисленные значения являются сохраняемыми. Это означает, что вы можете использовать их в переменных weak_map, входящих в область видимости модуля, и их значения будут сохраняться в течение всех игровых сеансов. Подробнее о сохраняемых элементах в Verse см. в статье Использование сохраняемых данных в Verse.