FIGYELEM! Ez a dokumentum kizárólag az ELTE IK hallgatók számára oktatási célra készült! Félkész munka, dolgozunk rajta! Terjeszteni, felhasználni máshol a szerzők engedélye nélkül tilos!

Bevezetés


Ragyogó rubin

Végy egy valódi objektum orientált nyelvet, például a SmallTalkot. Válj meg a nem ismerős szintaxistól és mozdítsd(?) egy konvencionálisabb, fájl alapú forráskód fele. Most adj hozzá az olyan nyelvekből, mint Python vagy Perl egy jó adag rugalmasságot és kényelmet.

És kész is van a Ruby!

OO hívők sok mindent szeretni fognak a Ruby-ban: például a tisztán objektum orientáltságot (minden objektum!!), metaosztályok, iterátorok és a mindenütt meglevő heterogén kollekciók. Smalltalk programozók azonnal otthon fogják érezni magukat (a Java és C++-osok pedig féltékenyek lesznek).

Ugyanakkor a Perl és Python guruk is megtalálhatják azokat a dolgokat, amit imádnak: teljes reguláris kifejezés támogatás (regexp), szoros integráltság az oprendszerrel, kényelmes rövidítések és dinamikus kifejezés kiértékelések.

A Ruby-t egyszerű megtanulni. Egyszerűen lehet vele mindennapos feladatokat megírni, lekódolni és ha már egyszer megvagy vele, utána könnyedén bővíthető és karbantartható. Kétségtelenül, nehéz dolgokról hamar kiderül, nem is olyan nehezek már. A Ruby nyelv követi a Legkevésbé meglepő dolgok elvét (Principle of Least Surprise), a dolgok úgy működnek, ahogy az elvárható tőlük. Mindezt nagyon kevés kivétellel és speciális esettel. És ez nagy különbség, amikor programot írsz.

Mi a Ruby-t transzparens, átlátszó nyelvnek hívjuk. Ezt abban az értelemben, hogy a Ruby nem ködösíti a megoldást, amit írtál, sok-sok szintaxis mögé rejtve, ill. nem szükséges átverekedni magad kész kódok rengetegén, hogy rálelj egyszerű dolgokra. A Ruby segítségével program írása közben a problémakör közelében maradsz. Ötleteid és terveid állandó átalakítása helyett azt fogod észrevenni, hogy közvetlenül ki tudod fejezni magad könnyedén, elegánsan. Ez gyorsabb kódolást jelent. Meg azt is, hogy a kódod továbbra is olvasható, javítható marad.

A Ruby-t használva állandóan el leszel csodálkozva, egy ülő helyedben mekkora kódot meg tudsz írni, ami már elsőre működik! Kevés szintaktikai hiba, nincs típusütközés és a szokásosnál is kevesebb hiba. ..

Tehát miért érdemes a Ruby-t megtanulni? Mert mi úgy gondoljuk, segíteni fog jobban programozni. Segít jobban koncentrálni a problémára kevesebb elkavarodással. Egyszerűbbé teszi életed.

Miféle nyelv a Ruby?

Régebben a nyelvek között egyszerűbb volt különbséget tenni. Voltak a fordítóval rendelkezők, mint a C vagy Fortran és az interpreteresek, mint a BASIC. A lefordított programok gyorsabban futottak és elérték az alacsonyabb szinteket, az interpretáltak magasabb szintűek voltak, viszont lassabbak.

Változnak az idők, és a dolgok már nem olyan egyszerűek. Néhány programnyelv író elkezdte saját alkotását "szkript nyelv"-nek hívni. Ezáltal, úgy véljük, úgy értették, hogy nyelveik interpretáltak és arra valóak, hogy kiváltsák a batch fájlokat és a shell szkripteket, összehangolva más programok és az operációs rendszer viselkedését. A Perl, TCL, Python nyelveket mind szkript nyelvnek hívják.

Pontosan mi is a szkript nyelv? Szerencsére nem tudjuk, ez egy olyan különbség, amit megér megtenni? Ruby-ban minden rendszer szintű szolgáltatáshoz hozzá tudsz férni. Meg tudod ugyanazt tenni Ruby-ban, mint Perlben vagy Pythonban, ráadásul tisztábban. Azonban a Ruby alapvetően más. Ez egy valódi programnyelv erős elméleti alapokkal és elegáns, könnyed szintaxissal. Ha akarsz, összedrótozhatsz egy halom kódot, de valószínűleg nem ezt fogod tenni. Helyette jobban elmélyülsz a megoldás megtervezésben, olyan program megírásában, melyet egyszerű megérteni, karbantartani és gyerekjáték lesz majd tovább bővíteni és újrafelhasználni.

Habár mi a Ruby-t szkriptelős feladatokra használtuk, az idő legnagyobb részében inkább általános célú programnyelvként használtuk. Írtunk vele GUI alkalmazásokat, kiszolgáló programokat, de ennek a könyvnek a nagy részét is vele formáztuk meg. Mások szervereket és adatbázisokat menedzseltek vele. A Ruby web lapokat szolgáltat, adatbázisokhoz kapcsolódik és dinamikus tartalmat generál. Emberek mesterséges intelligenciákat és gépi tanulás programokat írnak Ruby-ban, és legalább egy személy a természetes evolúciót tanulmányozza vele. A Ruby a kutató matematika eszközeként egy otthonra lelt. És emberek világszerte különböző alkalmazások összekötésére használják. Igazán remek nyelv, mellyel a problémák tág körében készíthetünk megoldásokat.

A Ruby? Nekem?

A Ruby a programozók problémáira nem egy univerzális gyógyszer. Mindig lesznek esetek, amikor egy adott konkrét nyelvre lesz szüksége, talán a környezet, speciális könyvtárak vagy a teljesítmény miatt. Mi sem adtuk még fel a C++-t vagy a Javát (habár akadnak pillanatok, amikor azt tennénk).

Habár a Ruby valószínűleg több mindenre alkalmas, mint gondolnád. Bővíteni, akár a nyelven belül, akár kívülről, könyvtárak segítségével, igen egyszerű. Hordozható számos platform között. Relatíve pehelysúlyú és szerény rendszer erőforrást használ. Ráadásul könnyű megtanulási. Ismerünk embereket, akik egy nap alatt, ebből a könyvből kiragadott példákat kiragadva, jutottak el Ruby kódjukkal a teljes üzemig. A Ruby-t használtuk ahhoz, hogy az X11 ablakkezelő egy részét implementáljuk, ami C-ben komoly feladatnak számít. A Ruby megfelelt ennek a kihívásnak és segítségével órák alatt elkészültünk, ami amúgy napokba tellett volna.

Ha egyszer megszokta a Ruby-t, úgy gondoljuk, úgy fog visszatérni rá, mint egy választott nyelvre.

Miért írtuk ezt a könyvet?

Szóval épp befejeztük A pragmatikus programozót (The Pragmatic Programmer), családjaink megint elkezdtek hozzánk beszélni. Ekkor hirtelen úgy éreztük, írni kell egy másik könyvet. Hogy miért? Úgy éreztük, ez egyfajta küldetéstudatos hevületként

A Ruby-t Yukihiro Matsumoto (Matz) alkotta meg Japánban. Hazájában a nyelv népszerűsége 1995-től megdöbbentő méretekben megnőtt, pletykák szerint népszerűbb Japánban, mint a Python. Jelenleg a részletes Ruby dokumentációk nagy része japánul van meg. Talán ez nem az a programnyelv, ami mellett csak úgy keresztül lépne.

Terjeszteni akartuk az igét, minél több ember ismerje meg a Ruby-t Japánon kívül élvezve minden hasznát, így elhatároztuk, megírjuk az angol nyelvű dokumentációját. És ami egy kis projektként kezdődött, elkezdte kinőni magát.

Ruby változatok

Ez a könyv a Ruby 1.6 dokumentációja, 2000 szeptemberében lett kiadva.

A Ruby verziók számozása ugyanúgy történik, mint bármely más szabad forráskódú projektnél. A páros végű sorszámok (1.0, 1.2, 1.4, ...) jelentik a stabil, munkára alkalmas változatokat. Ezek vannak előrecsomagolva, letöltésre készen számos Ruby tükör szerveren.

A fejlesztői változatok a páratlan végződésűek (1.1, 1.3, ...). Ezeket azonban mindenkinek magának kell lefordítania.

A Ruby telepítése

A Ruby-t letölteni a legegyszerűbben http://www.ruby-lang.org honlapról a Download / Ruby menüpont alól lehet. Itt megtalálható stabil és számos fejlesztői változat is.

Természetesen a forráskód mindig elérhető, továbbá Windows-ra néhány operációs rendszerre előfordított és csomagolt változat is.

A Ruby fordítása

A Ruby disztribúcióban található egy README fájl, amely részletesen leírja a fordítás és telepítés menetét. Összefoglalva, ha POSIX rendszerre akarjuk telepíteni a Ruby-t, azt a következő parancsok sorozatával tehetjük meg:

./configure
make
make test
make install

Windowsra és más rendszerekre valamilyen POSIX környezetben, pl. cygwin

(...)

A Ruby futtatása

Most, hogy a Ruby felkerült a gépre, biztosan kipróbálnál néhány programot. A lefordított programokkal ellentétben itt kétféle módon lehet Ruby kódot futtatni: interaktív módon és mint program.

Interaktív Ruby

Ezt a legegyszerűbben úgy tehetjük meg, hogy parancssorból beütjük: ruby

% ruby
puts "Hello, world!"
^D
Hello, world!

Itt most beírtunk egy egyszerű puts kifejezést fájl vége karakterrel (ami esetünkben Ctrl-D). Ez eddig sima ügy, viszont elég kellemetlen, ha elgépelünk valamit és javítani kell a kódon.

A Ruby disztribúció sample alkönyvtárban található egy eval.rb szkript. Ezzel egy lépéssel egyszerűbb megnézni begépelt kifejezéseink értékét:

% cd sample
% ruby eval.rb
ruby> a = "Hello, world!"
"Hello, world!"
ruby> puts a
Hello, world!
nil
ruby> ^D
%

Itt megnéztük a puts parancs kimenetét és visszatérő értékét, ami esetünkben nil .

Eddig minden rendben, kivéve a többsoros kifejezéseket. A már bevitt sorok nem szerkeszthetőek és nem lehet visszalépdelni az előző sorokba (ahogy shell-ben a parancs történet működik).

Az eval.rb után itt van nekünk az irb - Interaktív Ruby programunk. Az irb egy Ruby shell, melyben már van parancs történet, sor szerkesztés és job kontroll. Jól konfigurálható és számos opciója van. Annyi, hogy önálló függeléket kapott (?). Javasoljuk a kedves Olvasónak, ismerkedjen meg az irb-vel közelebbről, segítségével a további példák kipróbálása egyszerűbb.

Ruby programok

Végezetűl a Ruby programok ugyanúgy futtathatók fájlból, mint más shell szkriptek, Perl vagy Python programok. Ruby programunk nevét paraméterként megadva futtathatjuk:

% ruby myprog.rb

Másik mód, ahogy UNIX-ok esetében megfejeljük szkriptünket egy sorral (amennyiben rendszerünk támogatja ezt, elkerülhetjük a Ruby teljes útvonalának beledrótozását a következő sorral: #!/usr/bin/env ruby. Ez majd megkeresi a Ruby-t és végre fogja hajtani.)

#!/usr/local/bin/ruby -w
 
puts "Hello, World!"

Ha forrás fájlunkat futtathatóvá tesszük (pl. így: chmod +x myprog.rb), UNIX-ban fájlunkat úgy tudjuk futtatni, mint egy programot:

% ./myprog.rb
Hello, World!

Ugyanezt hasonló módon megtehetjük Windows-on is fájl társítás segítségével.

További információk

Látogasd meg a Ruby webhelyét a http://www.rubycentral.com/ és http://www.ruby-lang.org/ címeken, ahol megtalálhatod az újdonságokat, beszélhetsz Ruby felhasználókkal hírcsoportokban vagy levelező listákon (lásd: C függelék).

Szeretnénk hallani felőled. Ha bármi észrevételed, javaslatod, hiba a szövegben van vagy probléma a példákban, kérjük, írj nekünk az alábbi email címekre:

rubybook@pragmaticprogrammer.com

Ha a könyvben találtál hibát és elmondod nekünk, betesszük az errata listánkba:

http://www.pragmaticprogrammer.com/ruby/errata/errata.html

Végezetül, a http://www.pragmaticprogrammer.com/titles/ruby/index.html webhelyen megtalálhatóak a könyv példái oldalanként csoportosítva.

Köszönetnyilvánítás

Egy könyv megírása komoly elkötelezettség, melyet sohasem tudtuk volna befejezni régi és új barátaink nélkül. Büszkén soroljuk a régiek közé az Addison-Wesley csapatát, Mike Hendricksont, John Fullert, az örök segítőkész Julie Steele-t és a csodálatos Julie DiNicolát. Köszönjük nekik!

Elbírálóink fantasztikusak voltak. Nagyon szoros határidőket állítottunk nekik és mindvégig betartották őket. Könyvet lektorálni, mely tele van technikai részletekkel sohasem egyszerű dolog. Ezért külön hálásak vagyunk George Coe-nak, Bob Davisonnak, Jeff Deifiknek, Hal Fultonnak, Tadayoshi Funabának, Clemenz Hintzének, Kazuhiro Hiwadának, Kikutani Makotonak, Mike Linksvayernek, Aleksi Niemelänak, Lew Perinnek, Jared Richardsonnak, Armin Roehrlnek, Conrad Schneikernek, Patrick Schoenbacjnak és Eric Voughtnak. További köszönet még a két Julie-nak az Addison Wesley-nél ennek a tisztán nemzetközi erőfeszítés koordinálásáért.

Sokan segítettek a könyv specifikus részeinek megírásában. Tadayoshi Funaba számtalan levelet váltott velünk, mire mi végre megértettük a Date modult. Guy Decoux és Clemenz Hintze türelmesen megválaszolta kérdéseinket, hogy kell Ruby bővítményeket írni, és Masaki Suketa segített megérteni a WinOLE modult.

Habár az eredeti Ruby dokumentáció nagy része japánul van, létezik egy egyre növekvő bázisa az angol nyelvű fordításoknak. Ezek többnyire japán fejlesztők munkái, akik angol tudásukkal nem szűnnek elkápráztatni minket. Habár nem tudunk minden egyéni közreműködőt név szerint megemlíteni itt, szeretnénk megköszönni Goto Kentaronak a nagy számú és kiváló minőségű dokumentációt, melyeket on-line elérhetővé tett.

Végezetül köszönet jár Yukihiro "Matz" Matsumotonak, a Ruby alkotójának. Már nem számoljuk azt a rengeteg kérdést, amit neki tettünk fel, se azt a rengeteg türelmes és részletes választ, melyet visszaküldött részünkre. Amellett, hogy egy tisztán csodálatos nyelvet hozott létre, Matz felnevelt egy csodálatosan segítőkész és nyílt kultúrát, melyben ez a nyelv gyarapodik.

Mindenkinek köszönjük! Domo arigato gozaimasu.

Dave Thomas és Andy Hunt.
The Pragmatic Programmers
http://www.pragmaticprogrammer.com/

Használatos jelölések

Könyvünkben a következő tipográfiai jelöléseket használjuk.

Literális kód példák írógépszerű betűtípussal szedettek:

class SampleCode
  def run
    #...
  end
end

A szövegen belül a Fred#doIt jelenti a Fred osztály doIt() példánymetódusát, a Fred.new (más Ruby dokumentációkban az osztálymetódusokat néha jelölik Fred::new formában is. Ez a jelölés is helyes a Ruby-ban, mi egyszerűen csak úgy éreztük, kevésbé zavaró a Fred.new olvasása.) osztálymetódus és a Fred::EOF pedig osztályon belüli konstans.

A könyv számos Ruby kódrészletet tartalmaz. Ahol lehet, megpróbáltuk kiírni, mi történik futtatásukkor. Egyszerűbb esetekben a sorok végére odaírtuk a kifejezések eredményét, például:

a = 1
b = 2
a + b
» 3

Azokban az esetekben, amikor kifejezetten érdekel minket az értékadások eredménye, odaírjuk a végére.

a = 1
» 1
b = 2
» 2
a + b
» 3

Ha programnak komplexebb a kimenete, azt a program alatt külön jelöljük.

3.times { puts "Hello!" }

eredménye:

Hello!
Hello!
Hello!

Osztálykönyvtárak leírásában bizonyos esetekben megmutattuk, hol vannak a kimeneten szóközök. Ezeket karakterrel jelöltük.

Parancssoros hívásokat literális szöveggel normál, a paramétereket döntött szedéssel írunk. További lehetséges paramétereket szögletes zárójelek közé írunk.

ruby [
            flags
            ]*
             [
            progname
            ] [
            arguments
            ]+

< Előző oldalKövetkező oldal >