Ruby на нашем проекте дается как «второй язык». Это значит, что мы подразумеваем определенный багаж знаний у тех, кто учится ему здесь. В первую очередь это владение каким-либо другим языком программирования. Для понимания материала курса нужно иметь представление о типах данных, переменных, условных конструкциях, циклах, функциях, объектах (свойствах и методах) и лямбда-функциях (анонимных функциях).
Изучение второго языка значительно проще первого, поэтому и структура материала сильно меняется. Здесь мы обзорно касаемся базовых конструкций для быстрого знакомства с синтаксисом, и переходим к интересным задачкам, ради которых, собственно, и изучается Ruby.
В чём соль?
Ruby — динамический, строго типизированный язык с глубоким уклоном в объектно-ориентированную и функциональную парадигму программирования.
# Строгая типизация, число нельзя умножить на строку
4 * 'hexlet' # TypeError (String can't be coerced into Integer)
# Всё объекты
1.8.round # 2
# Функции высшего порядка
['one', 'two'].map(&:upcase) # ["ONE", "TWO"]
Он обладает местами непривычным, но невероятно выразительным синтаксисом. Благодаря этому код на Ruby читается как английский язык и при этом остаётся компактным:
# Определение конечного автомата
class Job
include AASM
aasm do
state :sleeping, initial: true
state :running, :cleaning
event :run do
transitions from: :sleeping, to: :running
end
event :sleep do
transitions from: [:running, :cleaning], to: :sleeping
end
end
end
job = Job.new
job.sleeping? # true
job.may_run? # true
job.run
job.running? # true
job.may_run? # false
На Ruby создано большое количество решений, которые потом распространились по другим языкам. Самым ярким примером является фреймворк Ruby On Rails, который когда-то перевернул веб-разработку, и до сих пор является самым продвинутым бэкенд фреймворком для веб-разработки. И github.com, и gitlab.com написаны с использованием Rails. Даже этот сайт написан на Rails.
В Ruby очень много метапрограммирования, встроенного во все части языка. Это значит, что программа может менять свое поведение прямо во время работы практически в любую сторону. Посмотрите, как происходит добавление методов во встроенные классы:
# Этот код можно написать в любом месте программы
class String # встроенный в Ruby класс, отвечающий за строки
def wow # определение метода
'ruby power'
end
end
# Вызываем метод
'hexlet'.wow # 'ruby power'
И даже так:
# Только для демонстрации
# Класс New наследуется от случайно выбранного
# класса One или Two, в зависимости от того,
# какой из них выберет метод sample на момент загрузки файла с классом
class New < [One, Two].sample
# тут код класса
end
На этом моменте у вас возможно возникла мысль «это же ад». Как и любой мощный инструмент, Ruby можно использовать во зло — это правда, но если посмотреть на реальное положение дел, то при правильном использовании Ruby позволяет писать невероятно выразительный код. И раз вы здесь, то давайте научимся это делать.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.