Назад в блог

Обзор типов данных в Ruby

Обзор типов данных в Ruby

Ruby — известный язык программирования. Он направлен на повышение простоты и производительности. Это также полностью объектно-ориентированный язык программирования. Кроме того, Ruby обладает элегантным синтаксисом, который естественно читать и легко писать.

Любое программирование требует управления различными типами данных. Тип данных описывает определенный класс данных. Он сообщает машине, как следует обрабатывать данные в программе. Типы данных имеют решающее значение для определения того, что можно делать с данными (включая операции, которые могут быть выполнены). В этом руководстве мы более подробно изучим типы данных, доступные в Ruby. Мы также изучим динамическую типизацию. Используя эту функцию, Ruby может автоматически определять тип данных переменной без ее явного объявления. Давайте начнем!

Предварительные требования

Чтобы попрактиковаться и выполнить шаги, описанные в этом руководстве, вам понадобятся следующие компоненты:

Типы данных в Ruby

В Ruby представлены все распространенные типы данных, с которыми вы столкнетесь в любом языке программирования: целые числа, числа с плавающей запятой, строки, массивы, символы, хэши и т. д. Далее мы представим обзор того, как работать с различными типами данных в Ruby.

Шаг 1 – Целые числа

Как и в математике, целые числа в компьютерном программировании представляют собой целые числа. Значение может быть положительным, отрицательным или 0. Диапазон значений следующий:

Пришло время опробовать целые числа в Ruby. Первый пример — вывод простого целого числа на экран:

Data Types in Ruby 1

Далее мы будем работать с целочисленной переменной. Здесь переменная sample_int содержит целочисленное значение (99), а функция print выводит значение переменной на экран:

Data Types in Ruby 2

Мы также можем выполнять математические операции с целыми числами. Следующий пример демонстрирует простое сложение двух целых чисел:

Когда мы работаем с большими числами, мы часто используем запятые (,), чтобы облегчить чтение. Например, один миллион (1000000) записывается как 1,000,000 для лучшей читаемости. Хотя использование запятых запрещено, Ruby позволяет использовать символы подчеркивания ( _) в качестве разделителя. Посмотрите на следующий пример:

Data Types in Ruby 3

Использование символов подчеркивания улучшает читаемость кода, особенно при работе с большими целочисленными значениями.

Шаг 2 – Числа с плавающей запятой

Число с плавающей запятой (или просто float) представляет собой вещественное число. Подобно математическому определению, вещественные числа могут быть рациональными или иррациональными. В Ruby float — это, по сути, число, содержащее десятичную точку.

Давайте попробуем вывести значение с плавающей запятой на экран:

Следующий пример демонстрирует объявление переменной с плавающей запятой:

Мы также можем выполнять различные математические операции со значениями и переменными с плавающей запятой. Следующий пример демонстрирует простое сложение двух чисел с плавающей запятой:

Что если сложить число с плавающей запятой и целое число? Результирующее значение будет числом с плавающей запятой. В следующем примере, несмотря на то, что 55.0 — целое число, оно рассматривается как float:

Шаг 3 – Логический тип (Boolean)

Логические значения (Booleans) представляют собой истинные значения логического раздела математики. В Ruby логические типы данных представлены двумя значениями: true и false:

  • Больше

    • 100 > 99: true

    • 99 > 100: false

  • Меньше

    • 500 < 999: true

    • 999 < 500: false

  • Равно

    • 10 == 10: true

    • 9 == 99: false

Подобно числам, мы также можем хранить true или false значение в переменной. Следующий пример демонстрирует эту возможность:

Step 4 – Строки

В программировании строка представляется как последовательность символов (букв, цифр и знаков). В Ruby строки существуют внутри одинарных кавычек ( ') или двойных кавычек ( "). Мы уже подробно рассмотрели использование строк в Ruby, поэтому это будет короткий раздел.

Следующий пример — это базовая программа hello world на Ruby:

Мы также можем хранить строки в переменных. Следующий пример также включает конкатенацию строк:

Data Types in Ruby 4

Step 5 – Массивы

Массив — это структура данных, которая может хранить коллекцию элементов одного типа фиксированного размера. Его также можно представить как коллекцию переменных одного типа данных. Это одна из самых фундаментальных структур данных в большинстве современных языков программирования.

В Ruby массив определяется следующим образом:

Можно создать массив любых других типов данных, которые мы обсуждали ранее (целые числа, числа с плавающей запятой и строки). Вот несколько примеров:

  • Integer: [-5, 0, 5]

  • Float: [-9.99, -6.99, -3.99, 0, 3.99]

  • String: [“the”, “quick”, “brown”, “fox”]

В следующем примере реализованы все эти типы массивов:

Data Types in Ruby 5

Обратите внимание, что когда функция print встречает массив, она выводит весь массив на экран. Для большего удобства вы часто будете встречать массивы в виде переменных. Давайте обновим код:

Data Types in Ruby 6

Data Types in Ruby 7

Теперь мы можем работать с отдельными элементами массивов:

Data Types in Ruby 7

Обратите внимание, что в Ruby индексация массивов начинается с 0.

Для удобства массивы в Ruby поставляются с методами .first и .last, которые выводят первый и последний элементы:

Data Types in Ruby 8

В Ruby массивы имеют еще одну интересную особенность. Они могут одновременно содержать различные типы данных. Например, вы можете хранить строки, символы и даже другие массивы:

Data Types in Ruby 9

Шаг 6 – Символы

В Ruby символ — это специальный тип данных, который ведет себя как метка или идентификатор. Символы неизменяемы, то есть их нельзя изменить. Символы выглядят так, будто вы объявляете переменные без какого-либо значения.

Вот пример символа:

Как правило, символы используются для идентификации чего-то важного. Однако для других ситуаций строк более чем достаточно.

Ruby, будучи объектно-ориентированным языком, относится ко всему как к объекту (включая строки) с его уникальным адресом в памяти, даже если строки идентичны. Однако, когда вы ссылаетесь на символ, это один и тот же объект в любом месте программы, с тем же адресом в памяти.

Шаг 7 – Хэши

Хэш — это похожая на словарь коллекция ключей и значений. Часто хэши используются для хранения связанных данных, например, информации о пользователе.

Вот быстрый пример хэша. Мы создали хэш user_info, содержащий имя пользователя и пароль пользователя:

Data Types in Ruby hashing in ruby

Чтобы получить значения пары «ключ-значение», мы должны использовать ключ. Следующий пример демонстрирует этот процесс:

Data Types in Ruby retrieve value using key

Ruby также позволяет определять хэш с использованием немного другого синтаксиса ( : вместо =>):

Data Types in Ruby retrieving value using key

Эта синтаксическая структура похожа на синтаксис, используемый в других языках, например, JavaScript. В этой синтаксической структуре ключи определяются как символы. Вот почему вместо использования "username", мы используем: username для доступа к значению.

Динамическая типизация

Возможно, вы уже заметили, что при объявлении переменной нам не нужно явно указывать тип данных. Вместо этого тип данных определяется значением переменной. Ruby использует динамическую типизацию, при которой проверка типов выполняется во время выполнения. Напротив, в языках программирования со статической типизацией типы данных определяются во время компиляции (например, в C/C++).

В следующем примере все значения, присвоенные переменной dyn_var, являются допустимыми:

В динамически типизированных языках мы можем свободно повторно использовать существующую переменную для хранения различных типов данных. Здесь предыдущий пример обновлен для демонстрации этого явления:

dynamically typed variables

Как показывает этот пример, каждый раз при присвоении нового значения тип данных dyn_var меняется на лету. Это полезно при преобразовании одного типа данных в другой. Следующий пример демонстрирует это:

get input and cast

Здесь,

  • Поскольку вводимые с клавиатуры данные являются строками, length сначала является строкой.

  • Поскольку нам нужно значение с плавающей точкой (float), мы преобразуем строковое значение в float с помощью метода to_f.

  • Из-за изменения значения переменной length присваивается тип данных float. Это то, что мы видим при выводе ее значения на экран.

Что произойдет, если мы попытаемся смешать два разных типа данных? Ruby выдаст ошибку. Посмотрите:

mixing two datatypes

Определение типа данных

В Ruby всё рассматривается как объект. Каждый объект в Ruby поставляется с методом class. При вызове этот метод сообщает тип данных источника. Вот несколько примеров использования метода class:

get classes name

Еще один способ узнать тип данных — использовать kind_of? метод. Он проверяет тип данных объекта на соответствие запрашиваемому типу данных и возвращает логическое значение. Посмотрите на следующий пример:

check datatype

Аналогично, существует другой метод is_a?, который сравнивает типы данных и возвращает логическое значение. Единственное отличие — это название метода. Однако он может быть предпочтительнее, так как разработчикам его немного легче читать и понимать. Обновите предыдущий пример с помощью is_a?:

check datatype

Заключение

Работа с любым языком программирования требует хорошего понимания поддерживаемых им типов данных. В этом руководстве мы изучили наиболее распространенные типы данных, используемые в программировании на Ruby. Мы обсудили и продемонстрировали целые числа, числа с плавающей запятой, строки, символы, логические значения и хэши (с примерами).

Посмотрите другие руководства в нашем блоге, которые помогут вам изучить Ruby:

Приятного программирования!

author

Preslav Dobrev

Автор · CloudSigma

Preslav Dobrev — креативный дизайнер в CloudSigma, сосредоточенный на формировании последовательного корпоративного образа с помощью традиционных и инновационных маркетинговых каналов. Он умело сочетает художественное видение со стратегическим маркетингом, создавая убедительные истории бренда.

Комментарии

Комментариев пока нет. Будьте первым.