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

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

'one' # String
true # Boolean
false
3 # Integer
5.2 # Float
[] # Array
{} # Hash
1..3 # Range

Роль null в ruby играет nil. Такое название традиционно используется в Smalltalk и семействе Lisp-языков для обозначения концепции «ничего». В остальном всё очень похоже.

Тип Range используется для задания непрерывного диапазона чисел. Встречается не так часто, но бывает удобен, особенно при работе с датами в библиотеках.

# От сейчас до +24 часа
Time.now..(Time.now + 60 * 60 * 24)

Массивы в Ruby, как и в любом другом динамическом языке, тоже динамические. Их можно изменять, уменьшать и увеличивать прямо в процессе работы:

companies = []
# Добавление элемента
companies << 'hexlet'

Тип данных Hash хотя и называется необычно, по сути является обычным хранилищем key-value пар.

В JavaScript для этого используются объекты, в PHP — ассоциативные массивы, а в Python — словари.

options = {
  sanitize: true
}
options['table'] = false

Кроме стандартных типов Ruby добавляет довольно необычный тип, называемый символом. Подобный тип есть во многих языках, включая Erlang (атом), Clojure (кейворд) и JavaScript (символ). Пример:

:key
:anotherone

Символ очень похож на строку, но он представлен в памяти в единственном экземпляре — в отличие от строк, которые создаются каждый раз заново. Это если говорить про техническую сторону. На практике символ удобен там, где строка выражает саму себя. Обычно там, где в других языках создают константы, в которые записаны строки с именем этой константы, в Ruby просто используют символ. По большому счёту символ не является чем-то жизненно необходимым — он немного сокращает количество кода и местами чуть удобнее в использовании. В остальном по смыслу — это та же строка.

Символы — это такая концепция, которая «заходит» исключительно на практике. Чем больше примеров будет перед глазами, тем быстрее получится использовать этот тип по назначению.

Для проверки типа в каждом объекте присутствует метод is_a?:

1.is_a? String # false
1.is_a? Integer # true
# Либо сам тип
1.class # Integer
'hexlet'.class # String

Реализуйте функцию type_of_type(value), которая определяет, является ли тип данных составным, и возвращает символ :complex, если да, и :simple — если нет. Составным считаются только три типа: Hash, Array и Range. Остальные — простые.

type_of_type({}) # :complex
type_of_type('') # :simple

Для проверки условия ИЛИ используйте оператор ||.

Не забудьте при этом поставить скобки вокруг вызова методов: 1.is_a?(String). Иначе код выполнится не так, как задумано, из-за приоритетов операций.

Упражнение не проходит проверку — что делать? 😶

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет 🤨

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя 🤔

Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно 🙄

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

←Предыдущий

Следующий→

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics

Модули | Ruby | CodeBasics

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

В Ruby для этого используется система модулей. Функции, определенные внутри модуля, локальны относительно этого модуля. То есть разные модули могут иметь внутри функции с одинаковыми именами.

# file: module_name.rb
module MyModule
  def self.run
    'go!'
  end
end

При определении функции внутри модуля, к ней нужно добавлять префикс self., только в этом случае получится её вызвать напрямую из модуля. Без self. функции тоже объявляют, но только тогда, когда модуль играет роль миксина. Это очень интересная концепция, которая всё чаще встречается в других языках. Подробнее о ней в соответствующем разделе.

MyModule.run # 'go!'

Вызов функции из модуля выглядит абсолютно идентично вызову методов из класса. Является ли модуль классом? Это легко проверить:

MyModule.new # undefined method `new' for MyModule:Module
# При этом модуль это объект
MyModule.class # Module

Как понять что перед нами класс, а не модуль? Короткий ответ: никак. Обычно это не проблема, потому что из контекста понятно, с чем идёт работа. В Ruby-мире много соглашений по тому, как работают библиотеки и как организуется код. Благодаря этому резко упрощается понимание происходящего.

Встроенных в Ruby модулей не так много. Из наиболее простого можно назвать Math, в котором лежат разные полезные математические функции:

# Можно обращаться напрямую,
# встроенные модули всегда загружены
Math.sin(1)

Из наиболее используемых — модуль Kernel. С его помощью управляют поведением процесса и интерпретатора.

Kernel.exit

Особенность этого модуля в том, что все функции модуля Kernel доступны для вызова напрямую, без указания имени модуля. Это происходит за счёт того, что модуль Kernel «подмешан» в класс Object, от которого наследуются практически все классы в Руби (неявно).

Если смотреть дальше, то возникает множество вопросов и разных интересных ситуаций: вложенные модули, модули вложенные в классы, классы вложенные в модули и даже классы вложенные в классы. Все это возможно в Ruby. А как соотносятся файловая система и модули? А можно ли определять классы без модулей? А можно ли вызывать функции модуля из функций модуля? К сожалению, не представляется возможным разобрать все эти вопросы в рамках нашего материала.

За дальнейшими подробностями добро пожаловать на Хекслет!

Создайте модуль MyNumber. Реализуйте внутри модуля функцию reverse_int(), которая переворачивает цифры в переданном числе (типа Integer) и возвращает новое число.

reverse_int(13) # 31
reverse_int(-123) # -321
reverse_int(8900) # 98

Полезные методы:

  • abs() – возвращает модуль числа
  • to_s() – преобразование в строку
  • to_i() – преобразование в число
  • reverse() – переворачивает строку
Упражнение не проходит проверку — что делать? 😶

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет 🤨

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя 🤔

Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно 🙄

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

←Предыдущий

Следующий→

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics

Изучите Ruby с нуля — Бесплатный интерактивный курс

3 Проекты

124 Уроки

13 Викторины

31 Проблемы

176 ПЛОХОДЫ

. .

Изучите идиоматический Ruby.

Узнайте о блоках, методах, регулярных выражениях и многом другом в Ruby.

Узнайте, как программировать, используя Ruby в качестве первого языка программирования.

Изучите идиоматический Ruby.

Узнайте о блоках, методах, регулярных выражениях и многом другом в Ruby.

Обзор курса

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

Как вы будете учиться

Практические среды программирования

Вы не станете лучше плавать, наблюдая за другими. Кодирование ничем не отличается. Практикуйтесь, когда вы учитесь, в среде живого кода внутри вашего браузера.

Быстрее, чем видео

Видео сдерживают вас. В среднем видеоурок произносится со скоростью 150 слов в минуту, а вы можете читать со скоростью 250. Вот почему наши курсы основаны на тексте.

Настройка не требуется

Немедленно приступайте к обучению, вместо того, чтобы возиться с SDK и IDE. Это все в облаке.

Прогресс, который вы можете показать

Встроенные тесты позволяют проверить свои навыки. Сертификаты об окончании позволяют их показать.

Практическая среда программирования

Вы не станете лучше плавать, наблюдая за другими. Кодирование ничем не отличается. Практикуйтесь, когда вы учитесь, в среде живого кода внутри вашего браузера.

Быстрее, чем видео

Видео сдерживают вас. В среднем видеоурок произносится со скоростью 150 слов в минуту, а вы можете читать со скоростью 250. Вот почему наши курсы основаны на тексте.

Настройка не требуется

Немедленно приступайте к обучению, вместо того, чтобы возиться с SDK и IDE. Это все в облаке.

Прогресс, который вы можете показать

Встроенные тесты позволяют проверить свои навыки. Сертификаты об окончании позволяют их показать.

Содержание курса

1. Общая картина

Программирование — это созданиеRuby объектно-ориентирован

2. Переменные

Что такое переменные?0034 3. Встроенный класс: Numeric

Работа с числамиВикторина по числовым задачамУпражнение 1: Игра с числамиУпражнение 2: Нахождение модуляУпражнение 3: Четное или нечетное?

4. Встроенный класс: String

Работа с StringsString InterpolationQuiz on StringsExercise 1: Объединение подстрок. Упражнение 2: Заполнение и выравнивание. : TrueClass, FalseClass и NilClass

Объекты true, false и nil

6. Встроенный класс: Символ

Работа с символами

7. Встроенный класс: Массив

Работа с массивамиЧто мы можем делать с массивамиВикторина по массивамУпражнение 1: Создание массиваУпражнение 2: ЧередованиеУпражнение 3: Создание выраженияУпражнение 4: Замена Элемент в массиве. Упражнение 5. Извлечение и рекомбинация элементов массива. Упражнение 6. Обращение массива. 2. Вложенный хеш. Упражнение 3. Перестановка ключей и значений

9. Объекты

Объекты, классы и методы, которые являются экземплярами ClassObjects, имеют метод, ослабевающая методики, и методы цепочки. Случайно. Упражнение 3. Преобразование миль в километры

11. Операторы — это методы

. Арифметические операторы. Логические операторы. Операторы сравнения. Операторы — это методы.0034 12. Блоки

Что такое блоки Альтернативный синтаксис блока Аргументы блока Возвращаемые значения блока Упражнение 1. Извлечение четных элементов из массива Инверсия управляющих итераторов Тест по блокам Упражнение 2. Обратное четное Упражнение 3. Суммирование строк матрицы Упражнение 4. Печать вывода с использованием вложенных массивов

Мини-проект

3 Приготовьтесь к еще одной тренировке!

14. Условные выражения

Что такое условные выражения?Сокращенный синтаксисУсловные возвращаемые значенияНичто и правдаВикторина по условным выражениямУпражнение 1. Количество дней в месяце

15. Задача кодирования: правдивость и эквивалентность

Задача 1: Проверка правды. WritersState and BehaviorInteracting ObjectsОбласть действия объекта и самопроверка по классамУпражнение 1. Создание класса прямоугольникаУпражнение 2. Методы класса

Мини-проект

Проект «Почтовый ящик»

19. В центре внимания незамеченные вещи

Последовательности экранирования объектов верхнего уровня Альтернативные синтаксисы Множество других методов Использование правильных слов Незамеченные вещиУпражнение 1. Проверка равенства массивов

20. Дополнительные темы

Использование библиотекМодулиЧастные методыРегулярные выраженияПодробнее о классах символов (регулярные выражения)Викторина по дополнительным темамУпражнение 1. Захват имен классовУпражнение 2. Использование модуля

21. Ваш инструментарий

Текстовый редакторTerminalInteractive Ruby ShellНезависимое программирование

22. Приложение: Проект почтового ящика Предварительные условия

Краткий обзор: HTML

Присоединяйтесь к более чем 1,4 миллионам учащихся из таких компаний, как

Рекомендуется перед началом этого курса
Рекомендуется перед началом этого курса курс
Рекомендуется перед началом этого курса
Рекомендуется после окончания этого курса
Рекомендуется после окончания этого курса
Рекомендуется после окончания этого курса

Что говорят наши учащиеся

Что говорят наши учащиеся

КУРС ПО:

Образовательный

Лицензия: Attribution-ShareAlike (CC90-0SA) Ruby для начинающих от Ruby Monday Study Group

Команды любого размера выбирают

Образовательный курс для бизнеса

для обучения, повышения квалификации и адаптации своих разработчиков

Ruby in Twenty Minutes

1 ​​ | 2 | 3 | 4

Введение

Это небольшое руководство по Ruby, которое займет не более 20 минут. завершить. Предполагается, что у вас уже установлен Ruby. (Если у вас нет Ruby на вашем компьютере, установите его прежде чем вы начнете.)

Interactive Ruby

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

Откройте IRB (расшифровывается как Interactive Ruby).

  • Если вы используете macOS , откройте Terminal и введите irb , затем нажмите Enter.
  • Если вы используете Linux , откройте оболочку и введите irb и нажмите входить.
  • Если вы используете Windows , откройте Interactive Ruby из Рубиновый раздел вашего меню «Пуск».
 irb(main):001:0> 

Итак, он открыт. Что теперь?

Введите это: "Hello World"

 irb(main):001:0> "Hello World"
=> "Hello World" 

Руби повиновалась тебе!

Что только что произошло? Мы только что написали самое короткое в мире «Hello World»? программа? Не совсем. Вторая строка — это просто способ, с помощью которого IRB сообщает нам результат последнего вычисленного выражения. Если мы хотим распечатать «Hello World» нужно немного больше:

 irb(main):002:0> ставит «Hello World»
Привет, мир
=> ноль 

ставит — это основная команда для вывода чего-либо в Ruby. Но потом что такое бит => nil ? Это результат выражения. ставит всегда возвращает nil, что является значением Ruby «абсолютно положительно-ничего».

Ваш бесплатный калькулятор здесь

Уже достаточно, чтобы использовать IRB в качестве базового калькулятора:

 irb(main):003:0> 3+2
=> 5 

Три плюс два. Достаточно легко. Как насчет трех умножить на два? Вы могли бы введите его, он достаточно короткий, но вы также можете подняться и изменить то, что вы только что ввели. Попробуйте нажать стрелка вверх на ваш клавиатуру и посмотрите, не появится ли на ней строка с 3+2 . Если это так, вы можете использовать клавишу со стрелкой влево для перемещения сразу после знака + , а затем используйте backspace, чтобы изменить его на знак * .

 ирб(основной):004:0> 3*2
=> 6 

Далее попробуем три в квадрате:

 irb(main):005:0> 3**2
=> 9 

В Ruby ** — это то, как вы говорите «в силу». Но что, если вы хотите пойти другим путем и найти квадратный корень из чего-то?

 irb(main):006:0> Math.sqrt(9)
=> 3.0 

Хорошо, подождите, что это было последнее? Если вы догадались, «это выясняло квадратный корень из девяти», вы правы. Но давайте поближе познакомимся вещи. Прежде всего, что такое Math ?

Модули Группировка по темам

Математика — встроенный математический модуль. Модули выполняют две роли в Рубин. Это показывает одну роль: группировка похожих методов вместе под знакомое имя. Math также содержит такие методы, как sin() и tan() .