Divíte se, proč je Ruby tak populární? Fandové ho nazývají krásným, důmyslným jazykem. Je praktické a použitelné. Co poskytuje?

Myšlenky tvůrce Ruby

Ruby je pečlivě vyvážený jazyk. Jeho tvůrce, Yukihiro “matz” Matsumoto, spojil části svých oblíbenžch jazyků (Perl, Smalltalk, Eiffel, Ada a Lisp) do nového jazyka s vyváženým poměrem funkcionálních a imperativních vzorů.

Mnohokrát zopakoval, že se „snaží Ruby udělat přirozené, nikoliv jednoduché“ tak, aby bylo odrazem opravdového světa.

K tomu dodává:

Ruby působí jednoduše, ale uvnitř je velmi složité. Jako lidské tělo1.

O vývoji Ruby

Od vydání první verze v roce 1995 si Ruby získalo mnoho oddaných uživatelů po celém světě. V roce 2006 si Ruby získalo pozornost široké veřejnosti. V nejdůležitějších centrech světa se utvořili usergroups a konference o Ruby mají značnou návštevnost.

Graph courtesy of Gmane.

Ruby-Talk je hlavní mailing list věnovaný programování v Ruby. Denní počet zpráv se vyšplhal na 200.

Podle indexu TIOBE (index rozšiřování programovacích jazyků) je Ruby devatým nejoblíbenějším jazykem na Zemi. Velký podíl na tom má populární software napsaný v Ruby, především framework Ruby on Rails2.

Ruby je naprosto svobodné. Je zdarma a můžete ho upravovat a distribuovat dle svých potřeb.

Všechno je objekt

Původně Matz studoval jiné jazyky, aby nalezl ideální syntaxi. Uvedl tehdy: „Chtěl jsem skriptovací jazyk mocnější než Perl a objektovější než Python3.“

V Ruby je všechno objekt. Každá informace i každá část kódu má svoje vlastnosti a akce. V objektově orientovaném programování se vlastnost nazývá proměnná instance a akci říkáme metoda. Čistě objektový přístup Ruby je demonstrován na následujícím kódu:

5.times { print "We *love* Ruby -- it's outrageous!" }

Ve většině jazyků nejsou základní typy (primitives) objekty. Ruby následuje vzor Smalltalku a všem proměnným přiřazuje přiřazuje instanční proměnné a metody. To zjednodušuje práci s Ruby, protože pro všechno platí pouze pravidla práce s objekty.

Flexibilita Ruby

Ruby je flexibilní jazyk. I tu nejzákladnější část Ruby můžete libovoně upravovat, doplňovat, či dokonce smazat. Hlavním cílem Ruby je neomezovat programátora.

Například sčítání je prováděno operátorem plus (+). Ale pokud byste radši chtěli používat slovo plus, stačí přidat příslušnou metodu do základní třídy Numeric.

class Numeric
  def plus(x)
    self.+(x)
  end
end

y = 5.plus 6
# y is now equal to 11

Operátory v Ruby jsou jen “syntaktické pozlátko”. Můžete je upravovat dle svých potřeb.

Bloky

Bloky jsou v Ruby dalším zdrojem flexibility. Programátor může k jakékoliv metodě přidat closure, která určí její chování. Takováto closure se nazývá blok a je velmi oblíbená mezi programátory přecházejícími z např. z PHP nebo Visual Basic.

Bloky jsou inspirovány funkčními jazyky. Matz řekl, že “chtěl v clusres Ruby respektovat odkaz Lispu4.”

search_engines = 
  %w[Google Yahoo MSN].map do |engine|
    "http://www." + engine.downcase + ".com"
  end

Ve výše uvedeném kódu je blok uzavřem mezi do a end. Příkaz map aplikuje blok na všechna slova ze seznamu. V Ruby je mnoho dalších prázdných míst, která může programátor využít k detailní specifikaci funkce dané metody.

Ruby a mixin

Narozdíl od mnohých objektově orientovaných jazyků Ruby záměrně nepodporuje vícenásobnou dědičnost. Namísto toho využívá principu modulů (v Objective-C známé pod názvem “Category”). Moduly jsou sbírky metod.

Mixin může být přidán (mixed-in) do třídy a třída získá všechny jeho metody. Například do každé třídy která implementuje metodu each může výt přidán modul Enumerable, čímž získá mnoho metod pro each průchody.

class MyArray
  include Enumerable
end

Ruby používá mixiny protože je považuje za jednodušší a čistší cestu než výcenásobnou dědičnost, která je složitá a může být omezující.

Vzhled Ruby

Ruby využívá minimum interpunkce, klíčová slova jsou anglická. Interpunkce se používá k zpřehlednění kódu. V Ruby nejsou potřeba deklarace proměnných. Rámec platnosti proměnných je definován jednodušše:

  • var je lokální proměnná
  • @var je proměnná instance
  • $var je globální proměnná

Tento zápis usnadňuje programátorovy snadno zjistit role proměnných. Také není nutné používat zápis self..

Další vlastnosti

Ruby má mnoho dalších vlastností, například:

  • Obsluha chyb. Stejně jako v Javě a Pythonu lze v Ruby snadno ošetřit výjimky.
  • Automatická “mark and sweep” garbage collection.
  • Vývoj rozšíření v C je pro Ruby mnohem snadnější než v Perlu nebo Pythonu. Ruby disponuje elegantním API pro volání Ruby z C. Toto dovoluje používat Ruby jako skriptovací jazyk. SWIG rozhraní je také dostupné.
  • Pokud to OS dovolí, Ruby načítá rozšíření dynamicky.
  • Ruby implementuje vlákna nezávisle na OS. Tudíž, s Ruby můžete mít multithreading třeba na MS-DOS!
  • Ruby je velmi přenosné; bylo vyvynuto na GNU/Linux, ale funguje např. na UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2 a mnoha dalších OS.

Reference

1 Matz, Ruby-Talk mailing list, 12. Května 2000.

2 Více informací na webu Ruby on Rails.

3 Matz, An Interview with the Creator of Ruby, 29. Listopu 2001.

4 Matz, Blocks and Closures in Ruby, 22. Prosince 2003.