Ruby (programovací jazyk)

**Ruby** je interpretovaný skriptovací programovací jazyk. Vďaka svojmu jednoduchému syntaxu je pomerne ľahký na naučenie, predsa však dostatočne výkonný, aby dokázal konkurovať známejším jazykom ako je Python a Perl. Je plne objektovo orientovaný – všetko v Ruby je objekt.

## História
Tvorcom Ruby je jediný človek – Yukihiro Matsumoto, známy taktiež pod prezývkou *Matz*. Ten ako zástanca objektovo orientovaného programovania hľadal v prvej polovici 90. rokov skriptovací jazyk, ktorý by mu vyhovoval. Ale Perl mu pripadal v tej dobe málo výkonný a Python zase nebol natoľko objektový, ako by chcel. A tak sa rozhodol, že vytvorí vlastný jazyk. Práce na ňom začali v roku 1993, prvá verzia bola uverejnená v roku 1995. Matz svoj jazyk pomenoval podľa rubínu – anglicky Ruby.

Dnes je Ruby asi najširšie používaný v zemi svojho pôvodu – v Japonsku. Rozšíreniu do sveta dlhú dobu bránila absencia kvalitnej dokumentácie v anglickom jazyku. Dnes už je však anglických materiálov celkom dosť. V súčasnej dobe záujem o Ruby prudko rastie vďaka úspechu webového frameworku Ruby on Rails.

## Oblasti použitia
Rovnako ako iné skriptovacie jazyky, je oblasť použitia Ruby pomerne široká. Asi najčastejšie využitie nájde na platforme Linux (a iných systémoch typu Unix) pri písaní skriptov pre uľahčenie každodennej práce. Vďaka svojej prehľadnej syntaxi a striktnej objektovosti sa hodí i k písaniu veľkých projektov, CGI skriptov, ba dokonca GUI aplikácií (GTK2, TK, Qt, fxRuby atd.). Keďže podporuje regulárne výrazy, je Ruby vhodným jazykom pre spracovanie textových súborov.

## Výhody a nevýhody
**Výhody:**

* interpretovaný jazyk a z toho plynúce výhody (odpadá proces kompilácie, zmeny v zdrojovom kóde sú ihneď viditeľné)
* prenosnosť zdrojového kódu medzi platformami (MS Windows, GNU/Linux, Solaris, …)
* možnosť spustenia v interaktívnom režime (príkazy sú prevádzané okamžite pri svojom zápise, podporuje dopĺňanie mien)
* jednoduchý a ľahko naučiteľný syntax
* plná podpora objektovo orientovaného programovania – všetko je objekt (je možné však písať i klasické štruktúrované programy)
* dynamické dátové typy
* regulárne výrazy
* modularita zdrojových kódov
* možnosť písať GUI alebo webové aplikácie

**Nevýhody:**

* nižšia rýchlosť oproti kompilovaným jazykom (interpretovaný jazyk je prekladaný až za behu, navyše veľká časť knižníc je napísaná rovnako v Ruby)
* závislosť na interpretri
* nedostatok slovenskej dokumentácie
* menej rozšírený jazyk oproti napríklad Perlu

## Ukážka kódu
Pre predstavu, ako Ruby vyzerá, ukážme si niekoľko príkladov. Pre začiatok tradičný program hello world:

```ruby
puts "Ahoj Svet!"
```


Tento program je často používaný na dôkaz toho ako je kód v Ruby čitateľný:

```ruby
5.times { puts "ahoj!" }
```

Tento program päťkrát vypíše "ahoj!". Doslovne by sa dal brať 5-krát (*times* znamená slovensky *krát*) 
vypíš ahoj (puts je skratka z **put** **s**tring – "daj reťazec" (na štandardný výstup)).

Tento príklad je ale stále tak jednoduchý, že nám o štruktúre nič nepovie. Nasledujúci príklad prezradí viac:

```ruby
def fib(n)
	a, b = 0, 1
	while b < n
		print b, " "
		a, b = b, a+b
	end
end

fib(100)
```


Tu je definícia metódy fib, ktorá vypíše začiatok Fibonacciho postupnosti. Na poslednom riadku je táto metóda volaná s parametrom 100, čím hovoríme, že chceme vypísať postupnosť všetkých čísel Fibonacciho postupnosti menších než 100. Výstup programu je nasledujúci:

 1 1 2 3 5 8 13 21 34 55 89

Keďže je Ruby plne objektový jazyk, ukážme i objekty:

```ruby
class Dievca
	def initialize(meno, vek)
		@meno = meno
		@vek = vek
	end
	def to_s
		"Meno:\t#{@meno}\nVek:\t#{@vek}"
	end
	attr_reader :meno, :vek
end

moje_dievca = Dievca.new('Eva', 18)
puts moje_dievca.to_s
puts moje_dievca.meno
puts moje_dievca.vek
```


Po spustení bude na výstupe:

 Meno:  Eva
 Vek:    18
 Eva
 18

V Ruby je úplne všetko objekt (i triedy sú objekty typu Class!). Napríklad 

```ruby
1 + 2
```


je vlastne zavolanie metódy + objektu 1 s argumentom 2:

```ruby
1.+(2)
```


Naše dva objekty 1 i 2 sú objekty triedy Fixnum, ktorá v Ruby slúži k uchovávaniu celých čísel. Veľké celé čísla sú objekty triedy Bignum, ktorých teoretická hranica je veľkosť operačnej pamäte.

## Externé odkazy
* http://ruby-lang.org – oficiálna stránka jazyka
* http://www.ruby-doc.org/ – Ruby dokumentačný projekt
* http://rubyforge.org/ – stránky projektov v Ruby
* http://www.rubycentral.com/book/  – online kniha Programming Ruby
* Full Ruby on Rails Tutorial  (anglicky)
* Euruko 2008 – videozáznamy prednášok z European Ruby Conference 2008 v Prahe na avc-cvut.cz

Kategória:Programovacie jazyky