A Ruby programozási nyelv

Bevezetés

A Ruby egy alapjaitól kezdve objektum-orientált nyelv, mely ráadásul szkriptnyelv is egyben. A szerző elképzelése az volt, hogy egy olyan egyszerű, gyorsan tanulható OOP-nyelvet alkosson, amely ráadásul hatékony rendszer-adminisztrációs eszköz és CGI programok fejlesztéséhez is jó választás. Sok tekintetben hasonlít a Perl nyelvhez, de annak sokszor rejtélyes szintaktikáját sikerült lényegesen leegyszerűsíteni - ugyanakkor rugalmassága, ami pl. a reguláris kifejezések használatából és a rengeteg hasznos műveletből adódott, szerencsére megmaradt. Hasonlóságokat mutat más szkriptnyelvekkel, mint pl. az awk-val, a Pythonnal vagy a Scheammel, ugyanakkor a szintaktikai szabályokon az Eiffel hatása is érezhető, kivételek kezelésében pedig a Javában megszokott lehetőségekkel élhetünk. Egy egyszerű példa a nyelvek hasonlóságára:

Ruby:

def fib(n) if n<2 n else fib(n - 2) + fib(n - 1) end end print(fib(20), "\n");

Python:

def fib(n): if n < 2: return n else: return fib(n - 2) + fib(n - 1) print fib(20)

Perl:

sub fib { my($n)=@_; if ($n < 2) { return $n; } else { return fib($n - 2) + fib($n - 1); } } print fib(20), "\n";

AWK:

function fib(n) { if ( n<2 ) return n; else return fib(n-2) + fib(n-1) } BEGIN { print fib(20); }

Scheme:

(define (fib n) (if (< n 2) n (+ (fib (- n 2)) (fib (- n 1))))) (display (fib 20)) (newline) (quit)

UNIX shell:

fib () { if test "$1" -lt 2; then echo "$1" else expr `fib \`expr "$1" - 2\`` + `fib \`expr "$1" - 1\`` fi } fib 20

Tcl vagy Expect:

proc fib {n} { if {$n < 2} { return $n } else { return [expr [fib [expr $n - 2]] + [fib [expr $n - 1]]] } } puts "[fib 20]\n"

PHP:

function fib($n) { if ($n < 2): return $n; else: return fib($n - 2) + fib($n - 1); endif; } print fib(20) . "\n";

Pike:

int fib(int n) { if (n < 2) return n; else return fib(n - 2) + fib(n - 1); } int main() { write(sprintf("%d\n", fib(20))); }

A Ruby tehát interpretált nyelv. Az interpretert egyszerűen Rubynak hívják és pl. a Perl-hez hasonlóan a programot tartalmazó file-t paraméterként kell átadni az interpreternek Unix környezetben. A programokat .rb kiterjesztésű file-okban szokás elhelyezni. Unixban természetesen a programfájl elején szokásos #!/.../bin/env ruby alakú értelmező megnevezés is használható. Az interpretert Windowsra is elkészítették már.

A nyelv megismerését megnehezíti, hogy a nyelv szerzője szerint a legjobb dokumentáció maga a forráskód, ezért a jelenlegi dokumentáció meglehetősen szűkszavú, sőt sok helyen egyszerűen hiányos.

Linux alatt a ruby és ruby-manual csomagok telepítésével érdemes kezdeni az ismerkedést, de sok más standard csomag is létezik, pl. az rdoc, mely tartalmaz egy dokumentáció-generáló programot a javadoc vagy a perldoc mintájára. Vannak könyvtárak Ruby-adatbázisokhoz kezeléséhez, SSL-támogatáshoz és sok máshoz. A nyelv honlapja: http://www.ruby-lang.org/.

Azon túl, hogy a Ruby a rengeteg programkönyvtárat leszámítva a Perl nyelv funkcionalitásával rendelkezik, van néhány hasznos és kényelmes funkciója, ami használhatóságát nagyban előmozdítja.

A Perl-hez hasonlóan a parancssorban is megadhatunk rövid szkripteket -e szkript formában. A -p és -n kapcsolókkal kiegészítve kényelmesen írhatunk olyan programot, ami a standard input sorain végigiterálva hajtódik végre, azaz a szkriptből ezekkel a kapcsolókkal megspórolhatjuk a ciklus szervezéséhez szükséges kódolást. Ezek a kis programok jól illeszkednek más programokhoz Unix pipe-okon keresztül. A -p annyival több a -n kapcsolónál, hogy a feldolgozott sort a ciklusmag végén meg is jeleníti. Ezzel egy printet is megspórolhatunk a parancssorból. Parancssorban definiált szkriptek írásánál még hasznos lehet, hogy parancssori kapcsolókkal beállítható az újsor-karakter egy reguláris kifejezésre, ill. opcióként megadható, milyen modulokat kell betölteni a programunk futtatásához. Az –X kapcsolót akkor használhatjuk, ha a szkriptünket tartalmazó forrásfájl elején nem a program szerves részét képező elemek is vannak, mint pl. e-mail-header vagy magyarázószöveg. Ez a kapcsoló ugyanis arra utasítja az interpretert, hogy hagyja figyelmen kívül a file elejét, egészen a ^#!.*ruby reguláris kifejezésre illeszkedő sorig. A -T az idegen forrásból származó vagy CGI-ként futó programok biztonsági kapcsolója (hasonlóan a Perl-hez).