Шрифт:
Интервал:
Закладка:
Теперь давайте рассмотрим некоторые из наиболее распространенных примитивных типов данных.
Числа (Numbers)
Как и в других языках, числа бывают разных видов; вот таблица с их описанием:
Таблица 2.1 – Виды чисел и их пределы
При записи числа в соответствии со значением будет использоваться наиболее подходящий тип: если это целое число, то это будет 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
Вот некоторые из наиболее распространенных операций с числами:
Таблица 2.2 – Операции, применимые к числам
Существуют и другие типы чисел для выражения больших или более точных величин:
• BigInt: произвольно большое целое число.
• BigFloat: произвольно большие числа с плавающей запятой.
• BigDecimal: точные и произвольные числа по основанию 10, особенно полезно для валют.
• BigRational: выражает числа в виде числителя и знаменателя.
• Complex: содержит число с действительной и мнимой частью.
Все они действуют как числа и имеют функциональность, аналогичную целым числам и числам с плавающей запятой, которые мы уже представили.
Примитивные константы — true, false и nil
В Crystal есть три примитивные константы, каждая из которых имеет свое значение. Ниже указаны типы и использование:
Таблица 2.3 – Примитивные константы и описания
Значения 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 лет"
Вы также можете использовать escape-последовательности внутри строки для обозначения некоторых специальных символов. Например, команда puts "anbnc” покажет три строки вывода. Они заключаются в следующем:
Таблица 2.4 – Специальные escape-последовательности внутри строк или символов
Важно помнить, что строки Crystal являются неизменяемыми после их создания, поэтому любая операция над ними приведет к созданию новой строки. Многие операции можно выполнять со строками; они будут использоваться в примерах на протяжении всей книги. Вот некоторые распространенные операции, которые можно выполнять со строками:
Таблица 2.5 – Общие операции над строковыми значениями
Строки и числа являются обычным представлением большинства данных, но есть еще несколько структур, которые мы можем изучить, чтобы облегчить понимание данных.
Диапазоны (Ranges)
Еще один полезный тип данных — Range; это позволяет представлять интервал значений. Используйте две или три точки, разделяющие значения:
• a..b обозначает интервал, начинающийся с a и заканчивающийся буквой b включительно.
• a...b обозначает интервал, начинающийся с a и заканчивающийся непосредственно перед b, исключая его.
Ниже приведены примеры диапазонов:
1..5 # => 1, 2, 3, 4, и 5.
1...5 # => 1, 2, 3, и 4.
1.0...4.0 # => Включает 3,9 и 3,999999, но не 4.
'a'..'z' # => Все буквы алфавита
"aa".."zz" # => Все комбинации двух букв
Вы также можете опустить начало или конец, чтобы создать открытый диапазон. Вот некоторые примеры:
1.. # => Все числа больше 1
...0 # => Отрицательные числа, кроме нуля
.. # => Ассортимент, который включает в себя все, даже самого себя