Вступление
Когда вы пишете программы, вы используете data types для классификации данных. Типы данных сообщают компьютеру, как обрабатывать данные в вашей программе. Они также определяют, что вы можете делать с данными, в том числе какие операции вы можете выполнять.
Один из способов думать о типах данных - рассмотреть различные типы данных, которые мы используем в реальном мире. Например, мы используем целые числа (0, 1, 2,…), целые числа (…, -1, 0, 1,…) и иррациональные числа (π).
Обычно в математике мы можем комбинировать числа разных типов и получать какой-то ответ. Например, мы можем добавить 5 к π:
5 + π
Мы можем либо оставить уравнение в качестве ответа для учета иррационального числа, либо мы можем округлить π до числа с кратким числом десятичных разрядов, а затем сложить числа вместе:
5 + π = 5 + 3.14 = 8.14
Но если мы попытаемся оценить числа с другим типом данных, таким как слова, вещи начнут терять смысл. Как бы мы решили следующее уравнение?
sky + 8
Это не то, что мы сразу знаем, как решить. Компьютер не может либо, потому что данные имеют два разных типа. «Небо» - это слово, а «+ 8 +» - целое число. Когда мы пишем программы, мы должны быть осторожны с тем, как мы присваиваем значения и как мы манипулируем ими с помощью таких операций, как сложение, вычитание, умножение и другие.
В этом руководстве вы узнаете о наиболее важных типах данных, встроенных в Ruby: целые числа, числа с плавающей запятой, строки, символы, массивы и хэши. Это не исчерпывающее исследование типов данных, но оно поможет вам ознакомиться с опциями, которые у вас есть в ваших программах.
Затем вы изучите динамическую типизацию. Программы Ruby определяют типы данных на основе того, что содержат переменные, поэтому понимание того, как работает динамическая типизация, поможет вам избежать сложных ситуаций в ваших собственных программах. И поскольку переменные могут содержать любое значение, вы научитесь определять тип данных переменной.
Давайте начнем с рассмотрения того, как работать с целыми числами в Ruby.
Целые
Как и в математике, integers в компьютерном программировании - это целые числа, которые могут быть положительными, отрицательными или 0 (…, + -1 +
, + 0 +
, + 1 +
,…). Целое число также широко известно как + int +
.
Вы можете распечатать целое число следующим образом:
print -25
Output-25
Вы также можете сохранить целое число в переменной и затем вывести значение, ссылаясь на переменную:
my_int = -25
print my_int
Output-25
Вы можете сделать математику с целыми числами тоже. Например, вы можете вычислить сумму двух чисел и распечатать результат:
sum = 116 - 68
print sum
Output48
Когда мы записываем большие числа, мы склонны использовать запятые, чтобы их было легче читать. Например, мы бы написали «+ 1 000 000 » для «один миллион». Вы не можете использовать запятые в своем коде, но Ruby позволяет использовать символ подчеркивания (` _ +`), чтобы сделать большие числа более читабельными.
Попробуйте это:
large_number.rb
large_number = 1_234_567
print large_number
Вы увидите целое число, напечатанное без подчеркивания:
Output1234567
Подчеркивание позволяет вам писать более читаемый код, если вам нужно представлять большие числа в своих программах.
Чем больше вы узнаете о языке Ruby, тем больше у вас будет возможностей работать с целыми числами. Давайте посмотрим, как работать с реальными числами.
Числа с плавающей точкой
Число с плавающей точкой или float представляет собой real число. Действительные числа могут быть либо рациональными, либо иррациональными числами; числа, содержащие дробную часть, например + 9.0 +
или + -116.42 +
. Другими словами, число с плавающей точкой в программе на Ruby - это число, которое содержит десятичную точку.
Вы можете распечатать числа в Ruby так же, как вы печатаете целые числа:
print 17.3
Output17.3
Вы также можете объявить переменную и присвоить число с плавающей точкой:
my_float = 17.3
print my_float
Output17.3
И, как и с целыми числами, вы также можете выполнять математику с плавающей точкой в Ruby
sum = 564.0 + 365.24
print sum
Output929.24
Если вы добавите число с плавающей точкой к целому числу в Ruby, вы получите число с плавающей точкой:
sum = 564 + 365.24
print sum
Output929.24
Ruby будет рассматривать любое число, записанное без десятичных знаков, как целое число (как в + 138 +
), а любое число, записанное с десятичными знаками, как число с плавающей запятой (как в + 138.0 +
).
Далее давайте посмотрим на логические значения в Ruby.
Булевы типы данных
Booleans используются для представления значений истинности, которые связаны с логической ветвью математики, которая предоставляет алгоритмы в области компьютерных наук. В Ruby мы представляем этот тип данных одним из двух значений: + true +
или + false +
.
Многие операции по математике дают нам ответы, которые оценивают как истинные или ложные:
-
лучше чем
-
500> 100
+ true +
-
1> 5
+ false +
-
меньше, чем
-
200 <400
+ правда +
-
4 <2
+ false +
-
равный
-
5 = 5
+ правда +
-
500 = 400
+ ложь +
Как и с числами, вы можете хранить значение + true
или` + false` в переменной:
result = 5 > 8
Затем вы можете вывести логическое значение с помощью вызова функции + print () +
:
print result
Поскольку 5 не больше 8, вы увидите следующий результат:
Outputfalse
По мере того, как вы будете писать больше программ на Ruby, вы больше узнаете о том, как работают логические значения и как различные функции и операции, выполняющие вычисления либо в + true +
, либо в + false +
, могут изменить ход программы.
Далее давайте рассмотрим работу с текстом в наших программах.
Струны
_Https: //www.digitalocean.com/community/tutorials/how-to-work-with-strings-in-ruby [строка] _ представляет собой последовательность из одного или нескольких символов, таких как буквы, цифры и символы. Строки в основном существуют в одинарных кавычках (+ '+
) или в двойных кавычках (`+" + `) в Ruby, поэтому для создания строки заключите в кавычки последовательность символов, например:
"This is a string in double quotes."
Простая программа «https://www.digitalocean.com/community/tutorials/how-to-write-your-first-python-3-pro[[Hello, World!]» Демонстрирует, как можно использовать строку в компьютерном программировании. , так как символы, составляющие фразу + Hello, World! +
, являются строкой.
print "Hello, World!"
Как и с другими типами данных, вы можете хранить строки в переменных:
output = "Hello, World!"
И распечатайте строку, вызвав переменную:
print output
OutputHello, World!
Как и числа, существует множество операций, которые мы можем выполнять над строками в наших программах, чтобы манипулировать ими для достижения результатов, которые мы ищем. Строки важны для передачи информации пользователю, а также для передачи информации пользователю обратно в программу.
Иногда вам нужно работать со списками данных. Вот где массивы пригодятся.
Массивы
Https: //www.digitalocean.com/community/tutorials/how-to-work-with-arrays-in-ruby [массив] _ может содержать несколько значений в одной переменной. Это означает, что вы можете содержать список значений в массиве и выполнять их итерацию. Каждый элемент или значение, находящееся внутри массива, называется _element.
Массивы определяются путем указания значений в квадратных скобках + [] +
, разделенных запятыми.
Массив целых чисел выглядит так:
[-3, -2, -1, 0, 1, 2, 3]
Массив с плавающей точкой выглядит так:
[3.14, 9.23, 111.11, 312.12, 1.05]
Вот список строк:
['shark', 'cuttlefish', 'squid', 'mantis shrimp']
Как и другие типы данных, вы можете назначить массив переменной:
sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp']
Если мы распечатаем переменную, вывод будет выглядеть точно так же, как и созданный нами массив:
print sea_creatures
['shark', 'cuttlefish', 'squid', 'mantis shrimp']
Вы получаете доступ к отдельным элементам в массиве, используя индексный номер, начиная с + 0 +
.
puts sea_creatures[0] # shark
puts sea_creatures[2] # squid
Чтобы распечатать последнее значение, вы можете использовать индекс + -1 +
. Ruby также предоставляет методы + .first +
и .` + last + `для получения первой и последней записи соответственно:
puts sea_creatures.first # shark
puts sea_creatures.last # mantis shrimp
Массивы в Ruby могут иметь много разных типов данных. Вы можете хранить строки, символы и даже другие массивы в массиве:
record = [
:en,
"Sammy",
42,
[
"coral",
"reef"
]
]
Массивы в Ruby являются mutable, что означает, что вы можете добавлять значения, удалять значения и даже изменять записи в массиве.
Иногда нам нужен способ маркировать вещи в программе. Вот для чего нужны символы.
Символы
Symbol - это специальный тип данных, который действует как метка или идентификатор в программе Ruby. Символы immutable, что означает, что они не могут быть изменены. Символ выглядит как объявление переменной без значения. Вот пример символа:
:time_zone
В Ruby вы обычно используете символ для обозначения чего-то важного, в то время как вы используете строку для текста, с которым вам нужно работать или манипулировать. Каждая строка в Ruby-программе - это собственный объект с уникальным расположением в памяти, даже если строки идентичны.
Но если вы ссылаетесь на один и тот же символ несколько раз, вы ссылаетесь на один и тот же объект повсюду в вашей программе, что означает, что вы ссылаетесь на одну и ту же область памяти.
Вы увидите эту концепцию в действии, когда мы посмотрим на хэши, которые позволяют связывать ключи со значениями.
Хэш
Hash представляет собой словарную коллекцию ключей и значений. Эти пары ключ-значение предоставляют полезный способ хранения и доступа к данным. Хеши часто используются для хранения связанных данных, таких как информация о пользователе. Вы определяете хеш как это:
{"first_name" => "Sammy", "last_name" => "Shark"}
Вы можете назначать хэши для переменных, как и другие типы данных:
user = {"first_name" => "Sammy", "last_name" => "Shark"}
Чтобы извлечь значения из хеша + user +
, используйте ключ для значения:
print user["first_name"] # "Sammy"
print user["last_name"] # "Shark"
Вы можете использовать символы в качестве ключей в вашем хэше вместо строк:
user = {:first_name => "Sammy", :last_name => "Shark"}
Использование символов в качестве ключей хеша предпочтительнее, когда это возможно. Каждый экземпляр символа указывает на один и тот же объект, тогда как каждый экземпляр строки ссылается на уникальный объект. Использование символов в качестве ключей приводит к немного лучшей производительности и меньшему использованию памяти.
Когда вы используете символы в качестве ключей, вы используете символы для получения значений:
print user[:first_name] # "Sammy"
print user[:last_name] # "Shark"
Вы также можете использовать немного другой синтаксис при определении хеша:
user = {first_name: "Sammy", last_name: "Shark"}
Этот синтаксис похож на синтаксис, используемый в JavaScript и других языках. Этот синтаксис определяет ключи как символы, поэтому вы должны получить доступ к записям, используя +: first_name +
и +: last_name +
вместо строк " first_name "
и " last_name "
.
Вы рассмотрели несколько типов данных, поэтому давайте посмотрим, как Ruby работает с этими типами.
Динамический набор текста
В Ruby вы явно не объявляете тип данных перед назначением значения; присвоение значения определяет тип данных. Ruby использует dynamic typing, что означает, что проверка типов выполняется во время выполнения, а не во время компиляции, как в языках, которые используют static typing. Ruby определяет тип данных по данным, хранящимся в переменной. Это похоже на типы data в Python и на https://www.digitalocean.com/community/tutorials / понимание-типы данных в JavaScript [типы данных в JavaScript].
Переменная + t +
в следующем примере может быть установлена на любой доступный тип данных:
t = 42 # t is an Integer
t = "Sammy" # t is a String
t = :sammy # t is a Symbol
t = true # t is a boolean (true)
t # t is nil
С динамически типизированными языками вы можете повторно использовать существующую переменную для хранения разных типов данных.
Это полезно при преобразовании данных из одного типа в другой. Например, у вас может быть этот код, который запрашивает у пользователя числовое значение:
print "Please enter the length of the room: "
length = gets.chop
Данные, которые вы получаете с клавиатуры, всегда являются строкой, поэтому для выполнения математических операций вам необходимо преобразовать данные переменной + length +
в число. В языках со статической типизацией, где вам необходимо объявить тип данных переменной, прежде чем вы сможете присвоить ей значение, вам понадобится новая переменная для хранения преобразованных данных. Но в Ruby, поскольку он динамически типизирован, вы можете повторно использовать переменную + length +
, если хотите.
# Convert the amount to a Float.
length = length.to_f
Метод + to_f +
преобразует строку в число с плавающей точкой. Ruby также предоставляет метод + to_i +
для преобразования строк в целые числа, и большинство объектов можно преобразовать в строки с помощью метода + to_s +
:
42.to_s # "42"
(42.5).to_s # "42.5"
["Sammy", "Shark"].to_s # "[\"Sammy\", \"Shark\"]"
Ruby имеет динамическую типизацию, но он не позволяет выполнять операции с различными типами данных без преобразования их в один и тот же тип. Например, этот код приведет к ошибке:
print 5 + "5"
OutputTypeError: String can't be coerced into Integer
Как будет этот код:
print "5" + 5
OutputTypeError: no implicit conversion of Integer into String
Если вы хотите сложить числа вместе, чтобы получить + 10 +
, преобразуйте строку в целое число. Если вы хотите объединить их вместе, чтобы получить " 55 "
, конвертируйте Integer в строку.
Динамическая типизация предлагает гибкость, но одним недостатком является то, что вы не всегда можете быть уверены в том, с какими типами данных вы работаете, поскольку переменная может содержать любой доступный тип. Ruby предоставляет вам способы определения типа данных.
Определение типов данных
В Ruby практически все является объектом. Integer, Float, Array, Symbol и Hash являются объектами Ruby, и у них всех есть метод с именем + class +
, который скажет вам, какой у них тип. Даже логические + true
и` + false`, а значение + nil
являются объектами. Попробуй сам:
42.class # Integer
(42.2).class # Float
["Sammy", "Shark"].class # Array
true.class # TrueClass
nil.class # NilClass
Кроме того, вы можете использовать метод + kind_of? +
Для проверки определенного типа данных, например:
42.kind_of?(Integer) # true
Это особенно полезно, когда у вас есть переменная, и вы хотите определить ее тип:
# somewhere in the code...
sharks = ["Hammerhead", "Tiger", "Great White"]
...
# somewhere else...
sharks.kind_of?(Hash) # false
sharks.kind_of?(Array) # true
Вы также можете использовать это для проверки правильности данных, поступающих из внешнего источника:
if data.kind_of? String
data = data.to_f
end
Ruby также предоставляет метод + is_a? +
, Который делает то же самое, что и + kind_of? +
, Но может быть немного проще для чтения для некоторых разработчиков:
if data.is_a? String
data = data.to_f
end
Использование + class +
, + kind_of? +
И + is_a? +
Может помочь вам убедиться, что вы работаете с правильным видом данных. Когда вы узнаете больше о Ruby, вы обнаружите другие способы обработки данных, которые не требуют явной проверки типа данных.
Заключение
Вы будете использовать много разных типов данных в своих программах на Ruby. Теперь вы лучше понимаете основные типы данных, доступные в программах на Ruby.
Взгляните на эти руководства, чтобы продолжить изучение типов данных Ruby: