Почему Ruby — особенный язык
easy

Почему Ruby — особенный язык

Потому что он прост как JavaScript и многогранен как С++.

Юкихиро Мацумото, автор Ruby, захотел создать совершенный объектно-ориентированный язык, чтобы в нём максимально полно работал ООП-подход. Кроме этого, новый язык должен соблюдать свод правил, которых придерживался сам Юкихиро и которые сейчас называются «Путь Ruby». Вот некоторые из них:

  1. Язык для человека, а не для компьютера — программа должна читаться легко даже при минимальном знании Ruby, а всё остальное берёт на себя компьютер.
  2. Просто, но не слишком просто — всё должно быть простым в программе, но только если для этого не придётся усложнять что-то другое.
  3. Принцип наименьшей неожиданности — все команды и действия в Ruby должны работать именно так, как от них ожидает программист. Если он встречается с чем-то новым в языке, то это не должно его удивить, а, наоборот, он воспримет это как что-то естественное.
  4. «Не нужно с этим бороться» — программисту нужно использовать то, что есть в языке, вместо того, чтобы пытаться подстроить язык под себя.

Первая версия Ruby вышла в 1995 году, и за это время язык вырос от проекта одного человека до большого комьюнити и 1,27 миллиона строк кода. Сейчас Ruby — универсальный кроссплатформенный язык программирования и поддерживается всеми современными версиями Linux и MacOS.

Особенность языка

Прелесть и сила Ruby в том, что в нём вообще всё — это объект. Даже числа, значения переменных и типы данных — это тоже объекты. Например, у вас есть сложение, которое реализуется так:

x = 7 + 5

7 и 5 — числа, за которые отвечает класс Numeric, и этот класс знает про знак сложения. Давайте немного расширим возможности этого класса:

class Numeric
  def plus(x)
    self + (x)
  end
end
y = 7.plus 5

С этого момента у всех чисел появляется метод plus, который складывает это число со вторым. И таким же способом можно расширить свойства и возможности каждого элемента в программе. Сделать автоматический перевод из минут в секунды? Легко:

class Numeric
  def seconds
    self  * 60
  end
end
#теперь можем легко перевести 35 минут в секунды:
time = 35.seconds

И так можно делать с чем угодно, без ограничений и несовместимости типов. Да и какая может быть несовместимость, если типы — это тоже объекты, которые можно изменить. Это делает Ruby похожим на C++, где есть перегрузка операторов и возможность использовать команды не так, как задумано изначально.

Синтаксис

На первом месте в Ruby стоит читабельность и простота, поэтому этот язык реально освоить за неделю на базовом уровне.

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

Комментарии. Пишем в начале строки знак решётки #, и за ней — комментарий любой длины. Ещё можно написать комментарий в несколько строк:

#Это простой однострочный комментарий
x = x + y
=begin
Это тоже комментарий, но в несколько строк.
Чтобы такое сделать, нужно в начале и конце комментария написать =begin и =end, каждый — в начале новой строки.
=end

Присваивание и математические операторы. Тут всё просто: присваивание — это знак равно «=», а математические операторы такие же, как в жизни — +, -, * и т. д.

Типы данных. Так как в Ruby всё объекты, то даже типы данных — это тоже объекты, а значит можно менять их свойства и поведение. По этой причине в Ruby очень мало встроенных типов данных. Если программисту понадобится что-то сложнее, чем встроенные типы, он легко может создать свой тип с нуля или на основе встроенного.

Целые числа: Fixnum (до 2³⁰) и Bignum. Второй тип может хранить в себе целые числа вообще любого размера, если для них хватит места в оперативной памяти.

Дробные числа: Float (число с плавающей запятой), Rational (рациональные числа) и Complex (комплексные числа с мнимой единицей).

Строка: String, последовательность байтов в кодировке UTF-8, могут быть любой длины.

Символ в Ruby — это не один какой-то символ, а просто любая строка, которая остаётся неизменной. Чтобы компьютер понял, что это символ, перед ним ставится двоеточие: symbol = :это_тоже_символ.

Диапазон — за него отвечает класс Range и в нём хранится непрерывная последовательность целых чисел:

 d1 = 1..5   # Две точки — от 1 до 5 включительно.
 d2 = 1...5  # Три точки — от 1 до 4, а 5 уже не входит в этот диапазон.

Условный оператор. Стандартная форма выглядит привычно:

if x > 0 then
  puts "x - положительное число" #puts выводит значение на экран
elsif x < 0 then
  puts "x - отрицательное число" 
else
  puts "x - нуль"
end

Но есть и несколько других вариантов условного оператора, например такой:

# Unless означает «Если условие не выполняется, то...»
unless x > 3 then 
  puts x.to_s  # Выведет значение x, если оно НЕ больше трёх.
else 
  puts "очень много, не сосчитать"
end

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

# Цикл for со счётчиком 
for i in 0 .. list.size-1 do
  print "#{list[i]} "
end
# Цикл с предусловием 
i=0
while i < list.size do
  print "#{ list [i]} "
  i += 1
end
# Цикл с постусловием
i = 0
begin
  print "#{list[i]} "
  i += 1
end until i == list.size

Классы, объекты и методы. Так как Ruby полностью объектно-ориентированный язык, то в нём работает всё, что только есть в ООП:

  • публичные и приватные методы,
  • конструкторы,
  • наследование (с помощью встроенных примесей),
  • переопределение класса,
  • и всё остальное, что вам только понадобится сделать с объектами или классами.

Для чего нужен Ruby

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

Также на Ruby пишут мобильные игры и приложения под Android и iOS, используя Ruboto или RubyMotion.

Но лучше всего Ruby работает в паре со своим знаменитым фреймворком Ruby on Rails для создания веб-приложений. Он позволяет быстро создать сайт со сложной структурой, динамическими страницами и при этом обойтись без изучения SQL-запросов и работы с базами данных.

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

Что сделано на Ruby

Ruby используют компании разного уровня, в том числе NASA, Motorola, Google или GitHub. Вот часть проектов, которые написаны на Ruby или Ruby on Rails:

  • Twitter,
  • Kickstarter,
  • SoundCloud,
  • Redmine (система багтрекинга),
  • Inkscape (работа с векторной графикой),
  • GitLab (управление репозиториями кода),
  • SketchUp (трёхмерное моделирование),
  • Netflix (сериалы),
  • Bloomberg (новостное агентство).

Если посмотреть на этот список, то становится понятно, что Ruby особенно хорош в веб-разработке и создании сайтов со сложной структурой.

С чего начать

Для старта вам даже не нужно ничего устанавливать на компьютер — используйте онлайн-интерпретатор onlinegdb или rextester.

Чтобы лучше разобраться в языке или его возможностях, почитайте руководство «Ruby за 20 минут» на официальном сайте Ruby. Единственный момент — это машинный перевод оригинальной статьи, как и всех остальных русскоязычных материалов на этом сайте. Поэтому если знаете английский — лучше сразу читайте на нём.

Если есть желание досконально разобраться в языке, рекомендуем книгу Хэла Фултона «Программирование на языке Ruby» (The Ruby Way).

Обложка:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
easy