Java — зріла. Перевірена. І швидка (всупереч твердженням анти‑Java табору).
Водночас вона доволі багатослівна. Переходячи з Java на Ruby, очікуйте
суттєвого скорочення коду. Також можна очікувати, що швидкі прототипи
створюватимуться швидше.

### Подібності

Як і в Java, у Ruby...

* Пам’ять керується збирачем сміття.
* Об’єкти мають строгі типи.
* Є методи public, private і protected.
* Є вбудовані інструменти документації (у Ruby це RDoc). Документація,
  згенерована rdoc, дуже схожа на ту, що створюється javadoc.

### Відмінності

На відміну від Java, у Ruby...

* Вам не потрібно компілювати код. Ви просто запускаєте його.
* Є кілька популярних сторонніх GUI-наборів. Користувачі Ruby можуть
  спробувати [WxRuby][1], [FXRuby][2], [Ruby-GNOME2][3],
  [Qt][4] або [Ruby Tk](https://github.com/ruby/tk).
* Ви використовуєте ключове слово `end` після визначення таких речей, як
  класи, замість обгортання блоків коду фігурними дужками.
* Ви використовуєте `require` замість `import`.
* Усі змінні-члени приватні. Ззовні доступ здійснюється через методи.
* Дужки у викликах методів зазвичай необов’язкові і часто опускаються.
* Усе є об’єктом, включно з числами, як-от 2 і 3.14159.
* Немає статичної перевірки типів.
* Імена змінних — це лише мітки. Вони не мають пов’язаного типу.
* Немає оголошень типів. Ви просто присвоюєте значення новим змінним за
  потреби, і вони “з’являються” (тобто `a = [1,2,3]` замість
  `int[] a = {1,2,3};`).
* Немає кастингу. Просто викликайте методи. Ваші юніт-тести повинні
  повідомити вам ще до виконання коду, якщо ви побачите виняток.
* Це `foo = Foo.new("hi")` замість `Foo foo = new Foo("hi")`.
* Конструктор завжди називається “initialize”, а не як назва класу.
* Є “міксини” замість інтерфейсів.
* YAML зазвичай надається перевага над XML.
* Це `nil` замість `null`.
* `==` і `equals()` працюють у Ruby по-іншому. Використовуйте `==`, коли
  хочете перевірити еквівалентність у Ruby (`equals()` у Java). Використовуйте
  `equal?()` коли хочете дізнатися, чи це той самий об’єкт (`==` у Java).



[1]: https://github.com/eumario/wxruby
[2]: https://github.com/larskanis/fxruby
[3]: https://ruby-gnome2.osdn.jp/
[4]: https://github.com/ryanmelt/qtbindings/
