07.06.2015 Views

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

S O F T W A R E<br />

uložia absolútnu hodnotu z èísla do premennej<br />

absValue.<br />

absValue = Math.abs(-3) // Java kód<br />

absValue = -3.abs // Ruby kód<br />

Ako vidie , v Ruby sú aj èísla objekty, a tak<br />

môžeme zavola metódy objektu Integer.<br />

ITERÁTORY. Všeobecne je iterátor spôsob,<br />

akým sa dá pracova s prvkami v kontajnerových<br />

objektoch (pole...). Ruby to má vyriešené ve¾mi<br />

elegantne. Najprv si ukážeme kód, ktorý postupne<br />

vysvetlím.<br />

desiata = [“cokolada“, “ba<strong>na</strong>n“, “jablko“]<br />

desiata.each { |value| puts “dnes budem jest<br />

: “ + value }<br />

Tento kód vypíše:<br />

dnes budem jest : cokolada<br />

dnes budem jest : ba<strong>na</strong>n<br />

dnes budem jest : jablko<br />

V prvom riadku sme do po¾a desiata vložili<br />

re azce „cokolada“, „ba<strong>na</strong>n“, „jablko“. V druhom<br />

riadku sme použili iterátor po¾a. Iterátor v Ruby je<br />

metóda, ktorej sa dá priradi blok. Blok je <strong>sk</strong>upi<strong>na</strong><br />

príkazov, ohranièená zátvorkami {}. Môžeme si<br />

ho predstavi ako funkciu s parametrami (i keï to<br />

nie je celkom pravda). Náš blok má parameter<br />

value a priradili sme ho iterátoru each. Tento<br />

iterátor prejde všetky prvky po¾a a každý z nich<br />

odovzdá ako parameter svojmu bloku a ten môže<br />

vyko<strong>na</strong> ¾ubovo¾nú operáciu. Uvediem ïalší ve¾mi<br />

pekný príklad:<br />

11.times { |number|<br />

(if number < 6<br />

number<br />

else<br />

10 - number<br />

end + 1).times { print “.“ }<br />

print “\n“<br />

}<br />

A výsledok:<br />

.<br />

..<br />

...<br />

....<br />

.....<br />

......<br />

....<br />

...<br />

..<br />

.<br />

V kóde je použitá ïalšia metóda (iterátor)<br />

objektu Integer, a to times. Tá zavolá blok<br />

to¾kokrát, aká je hodnota daného èísla.<br />

PRIDÁVANIE METÓD. Ve¾mi príjemná<br />

vlastnos , ktorú budú urèite závidie programátori<br />

z Javy a C++. Nemusíte vytvára ïalší objekt,<br />

ak potrebujete prida len jednu metódu, jednoducho<br />

ju pridáte. Metódu môžete prida triede<br />

(objektu) alebo inštancii nejakého objektu. V druhom<br />

prípade bude pridaná metóda patri iba<br />

danej inštancii. Syntax je ve¾mi jednoduchá.<br />

def File.safeOpen(fileName, fileMode)<br />

# implementacia<br />

...<br />

end<br />

Tento príklad pridá metódu safeOpen objektu<br />

File.<br />

ULOŽENIE BLOKU DO PREMENNEJ. Táto<br />

vlastnos sa dá výhodne použi spolu s iterátormi.<br />

cisla = [1, 2, 3]<br />

if action == 1<br />

a = Proc.new { |number| print number }<br />

else<br />

a = Proc.new { |number| print number*2 }<br />

end<br />

cisla.each(&a)<br />

V príklade sa premennou action riadi, aký<br />

blok sa odovzdá iterátoru each, ktorý potom<br />

zobrazí buï ‘123’, alebo ‘146’. Na uloženie bloku<br />

slúži objekt Proc, ktorý uloží nielen blok kódu,<br />

ale zapamätá si aj kontext (lokálne premenné... ),<br />

v ktorom je blok zadefinovaný. Tak sa môže sta ,<br />

že v bloku sú prístupné lokálne premenné, ktoré<br />

by i<strong>na</strong>k už zanikli.<br />

MODULY. Ruby neumožòuje viacnásobnú dediènos<br />

, ale má iný spôsob, ako to docieli , a to<br />

pomocou modulov. Modul je zo<strong>sk</strong>upenie metód,<br />

ktoré sa potom pridajú (mix-in) do triedy. Prida<br />

môžeme viacero modulov do jednej triedy. Samotný<br />

modul nemôže vytvori inštanciu. Typický<br />

príklad modulu je Comparable, ktorý sa pridáva<br />

do tried, ktoré potrebujú metódy <strong>na</strong> porovnávanie.<br />

Samotný modul využíva metódu ,<br />

ktorá vracia -1, ak je menší, 0, ak sa rov<strong>na</strong>jú, a 1,<br />

ak je väèší, ale sám túto metódu nedefinuje. Tá<br />

musí by zadefinovaná v triede, ktorá si modul<br />

pridá. Pridaním tohto modulu sa vytvoria metódy<br />

, ==, = a between? (z<strong>na</strong>k ? <strong>na</strong> konci<br />

metódy hovorí, že vracia iba true alebo false)<br />

module Comparable #modul<br />

def >(obj) # metoda ><br />

if (self obj) == 1 # obj je mensi<br />

true<br />

else<br />

false<br />

end<br />

end<br />

# dalsie metody<br />

...<br />

end<br />

class Priklad<br />

include Comparable # pridame modul do<br />

tejto triedy<br />

def (obj) # definicia metody pre<br />

odul Comparable<br />

# implementacia metody <br />

...<br />

end<br />

end<br />

V príklade je zadefinovaná trieda Priklad,<br />

ktora si pridá modul Comparable a potom sa<br />

dajú použi metódy <strong>na</strong> porovnávanie, ako ...<br />

Na záver dúfam, že som vo vás týmto krátkym<br />

èlánkom, ktorý ani zïaleka nezmapoval všetky<br />

jeho zaujímavé vlastnosti, vzbudil záujem o tento<br />

exotický jazyk z Ïalekého východu :).<br />

Referencie<br />

http://<strong>www</strong>.ruby-lang.org – oficiál<strong>na</strong> stránka<br />

http://<strong>www</strong>.rubygarden.org – rôzne správy<br />

a informácie o Ruby<br />

http://<strong>www</strong>.rubycookbook.org – rôzne <strong>sk</strong>ripty<br />

http://<strong>www</strong>.rubycentral.com/book/index.html –<br />

výborná kniha o Ruby<br />

Peter Vrábe¾<br />

114 PC REVUE 12/2001

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!