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 лет"
Вы также можете использовать escape-последовательности внутри строки для обозначения некоторых специальных символов. Например, команда puts "a\nb\nc”
покажет три строки вывода. Они заключаются в следующем:
Важно помнить, что строки Crystal являются неизменяемыми после их создания, поэтому любая операция над ними приведет к созданию новой строки. Многие операции можно выполнять со строками; они будут использоваться в примерах на протяжении всей книги. Вот некоторые распространенные операции, которые можно выполнять со строками:
Строки и числа являются обычным представлением большинства данных, но есть еще несколько структур, которые мы можем изучить, чтобы облегчить понимание данных.
Диапазоны (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 # => Отрицательные числа, кроме нуля
.. # => Ассортимент, который включает в себя все, даже самого себя
Диапазоны также можно применять к разным типам; подумайте, например, о временных интервалах.
С диапазонами можно выполнять множество операций. В частности, Range
реализует как Enumerable
, так и Iterable
, что позволяет ему действовать как сбор данных. Вот несколько служебных методов: