Типы данных 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 пар.
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 и nil6. Встроенный класс: Символ
Работа с символами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()
.