Відкрити головне меню

Ruby (англ. «Рубін», читається «Ру́бі») — це інтерпретована, повністю об'єктно-орієнтована мова програмування з чіткою динамічною типізацією. Мова вирізняється високою ефективністю розробки програм і увібрала в себе найкращі риси Perl, Java, Python, Smalltalk, Eiffel, Ada і Lisp. Ruby поєднує в собі Perl-подібний синтаксис із об'єктно-орієнтованим підходом мови програмування Smalltalk. Також деякі риси запозичено із мов програмування Python, Lisp, Dylan та CLU.

Ruby
Ruby logo.png
Парадигма:об'єктно-орієнтована, функційна, імперативна, логічна
Дата появи:1993
Творці:Юкіхіро Мацумото
Розробник:Юкіхіро Мацумото (поряд з іншими)
Останній реліз:2.5.1 (28 березня, 2018; 13 місяців тому (2018-03-28))
Система типізації:динамічна
Основні реалізації:Ruby, JRuby, Ruby.NET
Під впливом від:Smalltalk, Perl, Lisp, Scheme, Python, CLU, Dylan
Вплинула на:Groovy
ОС:багатоплатформова
Ліцензія:Ruby License та BSD
Сторінка інтернет:www.ruby-lang.org

Багатоплатформова реалізація інтерпретатора мови Ruby поширюється як Вільне програмне забезпечення. Початковий код проекту розповсюджується під ліцензіями BSD ("2-clause BSDL") і "Ruby", яка посилається на останній варіант ліцензії GPL і повністю сумісна з GPLv3.

Зміст

Історія створенняРедагувати

 
Мацумото Юкіхіро, — автор мови програмування Ruby.

Мова була створена Юкіхіро Мацумото, котрий почав працювати над Ruby 24 лютого 1993 року. Метою було створення об'єктно-орієнтованої, легкої в розробці, інтерпретованої мови програмування. Перша загальнодоступна версія 0.95 побачила світ 1995 року. «Ruby» був названий так (англ. рубін) через жарт, що ходив у колі друзів Мацумото, і був алюзією до назви мови програмування Perl (перлина) [1].

Ruby on RailsРедагувати

Близько 2005 року було розроблено MVC веб-фреймворк Ruby on Rails, який сприяв росту популярності Ruby.

Ruby 1.9Редагувати

Останньою версією гілки 1.9, є Ruby 1.9.3 В гілці Ruby 1.9, в порівнянні із гілкою Ruby 1.8 було внесено багато важливих змін. Ось деякі з них:

  • Локальні змінні у блоках
  • Додатковий лямбда синтаксис: (fun = ->(a,b) { puts a + b })
  • Новий API для сокетів (з підтримкою IPv6)

Ruby 2Редагувати

19 жовтня 2011 року почалася робота над Ruby 2. Ruby 2 - нова версія мови, що містить небагато нововведень та змін, і націлена, в основному, на швидкість виконання, дозволяючи збереження прекомпільованого байт-коду.

Перша версія Ruby 2 (Ruby 2.0.0-p0) офіційно вийшла в світ 24 лютого 2013 року. Поточна версія Ruby 2 - 2.5.0, випущена 25 грудня 2017.

Деякі з властивостей доданих в Ruby 2:

  • ключові слова в аргументах функцій;
  • стандартна кодова таблиця UTF-8;
  • нова система "уточнень" (Refinements) для ізоляції розширень класів і для більш безпечного використання "мавп'ячих латок" (monkeypatching);
  • використання DTrace для відладки;
  • суттєве підвищення швидкодії.

СемантикаРедагувати

Ruby — об'єктно-орієнтована мова програмування. Кожен тип даних є об'єктом, включно з типами та класами, котрі в багатьох інших мовах реалізовані як примітиви (такі як «integer» або «null»). Кожна функція є методом.

Змінні Ruby містять не самі об'єкти, а посилання на них. Присвоєння — це не передача значення, а копіювання посилання на об'єкти. Для тих, хто звик до поширених гібридних мов програмування, деякі наслідки такого рішення можуть здаватись не очікуваними. Наприклад:

a = "abcdefg"   =>   "abcdefg"
b = a           =>   "abcdefg"
b               =>   "abcdefg"
a[3] = 'R'      =>   "R"
b               =>   "abcRefg"

тобто при зміні значення змінної a неявно змінилось і значення b, оскільки вони містять посилання на один об'єкт. З іншого боку, це логічніше, ніж ситуація, коли для змінних різних типів присвоєння діє по різному (наприклад в Object Pascal)[джерело?].

Ruby не підтримує множинне успадковування, але замість цього має потужний механізм Mix In(англ.). Всі класи (безпосередньо або через інші класи) виведені з класу Object, тому, довільний об'єкт може використовувати визначені в ньому методи (наприклад, class, to_s, nil?). Процедурний стиль також підтримується, але всі глобальні процедури неявно є закритими методами класу Object.

Ruby був задуманий як мультипарадигмова мова. Він підтримує процедурну (кожна функція або змінна, визначена поза межами класу, стає частиною класу Object, що є батьківським для всіх інших класів), об'єктно-орієнтовану (все є об'єктом), або функціональну парадигму програмування. Ruby підтримує динамічну типізацію даних та поліморфізм. Ruby зараз не має повної підтримки Unicode, хоча частково підтримує UTF-8.

Можливості RubyРедагувати

  • Лаконічний і простий синтаксис, часто зустрічається вплив Ада, Eiffel і Python.
  • Може обробляти винятки в стилі Java і Python.
  • Дозволяє переозначувати оператори, які насправді є методами.
  • Повністю об'єктно-орієнтована мова програмування. Всі дані в Ruby є об'єктами в розумінні Smalltalk. Єдиний виняток — керівні конструкції, які в Ruby на відміну від Smalltalk не є об'єктами. Наприклад, число «1» — це екземпляр класу Шаблон:RDoc. Також можна додавати методи в клас і навіть в конкретний екземпляр під час виконання програми.
  • Не підтримується множинна спадковість, взамін може використовуватись концепція MixIn, заснована в даній мові на основі механізмів модулів.
  • Містить автоматичний прибиральник сміття. Він працює для всіх об'єктів Ruby, в тому числі для зовнішніх бібліотек.
  • Створення розширень для Ruby на C дуже просте, завдяки збору сміття та нескладного і зручного API.
  • Підтримує цикли з повною прив'язкою до змінних.
  • Підтримує блок коду (код взятий в {} або doend). Блоки можуть використовуватись в методах або перетворюватись в цикли.
  • Цілі змінні в Ruby автоматично конвертуються між типами Fixnum (32-розрядні) і Bignum (більше 32 розрядів) в залежності від їхнього значення, що дозволяє виконувати цілочисельні математичні розрахунки з нескінченною точністю.
  • Не вимагає попереднього оголошення змінних, хоча для інтерпретатора бажано, щоб змінній присвоювалось порожнє значення nil (тоді інтерпретатор знає, що ідентифікатор вказує на змінну, а не на ім'я методу). Мова використовує прості домовленості для визначення області видимості. Приклад: просто var — локальна змінна, @var — змінна екземпляра (член або поле об'єкта класу), @@var — змінна класу, $var — глобальна змінна.
  • Безпосередньо в мові Ruby реалізовано багато шаблонів програмування, так, наприклад, «одинак» (англ. singleton) може бути реалізований додаванням потрібних методів одному конкретному об'єктові.
  • Може динамічно завантажувати розширення, якщо це дозволяє операційна система.
  • Має незалежну від ОС підтримку невитискальної багатонитевості.
  • Перенесена на багато платформ. Мова розроблялася на GNU/Linux, але працює на багатьох версіях Unix, DOS, Microsoft Windows (частково, Win32), Mac OS, BeOS, OS/2 і т. д.

РеалізаціїРедагувати

Для Ruby тепер існує кілька основних реалізацій: офіційний інтерпретатор (так званий MRI - Matz Ruby Implementation), Рубініус (Rubinius) та JRuby—реалізація для віртуальної машини Java. Інтерпретатор Ruby для платформи Microsoft .Net IronRuby перебуває у стадії Pre-Alpha версії і доступний для завантаження.

У реалізаціях Rubinius та JRuby код Ruby компілюється у байт-код, що збільшує швидкість роботи, а також дозволяє використання власної багатонитевості операційної системи.

Ruby-gnome2Редагувати

Ruby-gnome2 — оболонка на мові програмування Ruby для бібліотеки GTK+ та низки бібліотек проекту GNOME. Ruby-gnome2 є вільним програмним забезпеченням і розповсюджується на умовах ліцензії GNU Lesser General Public License.

Приклад коду:

require 'gtk'

window = Gtk::Window.new(Gtk::WINDOW_TOPLEVEL)
button = Gtk::Button.new("Кнопка!")

button.signal_connect('clicked') {
    print "Кнопка натиснена!\n"
}

window.add button

button.show
window.show

Gtk.main

Коментарі в RubyРедагувати

В Ruby, як і в більшості мов є два типи коментарів:

  • Коментарі розміром в один рядок позначаються так # Коментарі
  • Коментарі розміром два і більше рядків позначаються так: =begin Коментарі =end

Приклад багаторядкових коментарів:

=begin
 def young? (age)
 if age < 30
    return true
  else
    return false
  end
end 
=end

Приклад однорядкового коментаря:

val =12
if val == 1 || val == 12 || val == 42
  # puts "коментар"
end

Див. такожРедагувати

ПриміткиРедагувати

ПосиланняРедагувати