При записи числа в соответствии со значением будет использоваться наиболее подходящий тип: если это целое число, то это будет Int32
, Int64
или UInt64
, в зависимости от того, что наиболее подходит. Если это значение с плавающей запятой, оно всегда будет Float64
. Вы также можете добавить суффикс, чтобы указать один конкретный тип. Наконец, для улучшения читаемости можно свободно использовать символы подчеркивания. Вот несколько примеров того, как можно выразить числа:
small_number = 47 # Это тип Int32
larger_number = 8795656243 # Теперь это тип Int64
very_compact_number = 47u8 # Тип UInt8 из-за суффикса
other_number = 1_234_000 # Это то же самое, что 1234000
negative_number = -17 # Есть и отрицательные значения
invalid_number = 547_u8 # 547 не соответствует диапазону UInt8
pi = 3.141592653589 # Дробные числа имеют формат Float64
imprecise_pi = 3.14159_f32 # Это Float32
Как и ожидалось, вы также можете выполнять математические операции с числами. В большинстве языков это работает аналогично математике. Операторов много, и их можно переставлять в зависимости от их приоритета. В любом случае круглые скобки могут помочь организовать более крупное выражение. Давайте посмотрим пример:
hero_health_points = 100
hero_defense = 7
enemy_attack = 16
damage = enemy_attack - hero_defense # Враг наносит 9 единиц урона
hero_health_points -= damage # Теперь здоровье героя составляет 91
healing_factor = 0.05 # Герой исцеляется со скоростью 5% за ход
recovered_health = hero_health_points * healing_factor
hero_health_points += recovered_health # Теперь здоровье 95,55
# Этот же расчет можно выполнить и в одну строку: result = (100 - (16 - 7)) * (1 + 0.05) # => 95.55
Вот некоторые из наиболее распространенных операций с числами:
Существуют и другие типы чисел для выражения больших или более точных величин:
• BigInt
: произвольно большое целое число.
• BigFloat
: произвольно большие числа с плавающей запятой.
• BigDecimal
: точные и произвольные числа по основанию 10, особенно полезно для валют.
• BigRational
: выражает числа в виде числителя и знаменателя.
• Complex
: содержит число с действительной и мнимой частью.
Все они действуют как числа и имеют функциональность, аналогичную целым числам и числам с плавающей запятой, которые мы уже представили.
Примитивные константы — true, false и nil
В Crystal есть три примитивные константы, каждая из которых имеет свое значение. Ниже указаны типы и использование:
Значения true и false являются результатом выражений сравнения и могут использоваться с условными выражениями. Несколько условных операторов можно комбинировать с помощью &&
(и) или ||
(или) символы. Например, 3 > 5 || 1 < 2
оценивается как true
.
Не все данные состоят только из чисел; нам часто приходится иметь дело с текстовыми данными. Давайте посмотрим, как мы можем с ними справиться.
Строки и символы (String и Char)
Текстовые данные могут быть представлены типом String: они могут хранить произвольные объемы текста UTF-8, предоставляя множество служебных методов для его обработки и преобразования. Существует также тип Char
, способный хранить одну кодовую точку Юникода: character. Строки выражаются с помощью текста в двойных кавычках, а символы — с одинарными кавычками:
text = "Crystal is cool!"
name = "John"
single_letter = 'X'
kana = 'あ' # Международные символы всегда действительны
Внутри строки вы можете использовать интерполяцию для внедрения в текст других значений. Это полезно для создания строки из данных в других переменных. Хотя вы можете интерполировать любое выражение, постарайтесь сделать его простым. Вот несколько примеров того, как это делается:
name = "John"
age = 37
msg = "#{name} is #{age} years old" # То же, что и "Джону 37 лет"