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
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