Ruby IV.
Vítám Vás u dalšího dílu Ruby. Dnes se dozvíte, jak se vytvářejí metody a ukážeme si jejich využití.
12.2.2012 21:00 |
Jakub Lares
| Články autora
| přečteno 6491×
Metody
Co to vůbec metoda je? Metoda je v podstatě zabalený kus kódu do jednoho celku (metody), kterou když zavoláme, tak se kód obsažený v metodě spustí. Někdo může znát metody pod pojmem funkce. K čemu vůbec metody jsou? Metody se používají, když máme v programu opakující se činnost. Například budeme chtít opakovaně generovat nějaký složitější text. Proto si uděláme metodu, na toto vypisování. Pokud si to někdo nedokáže představit, ukážeme si to později na příkladu. Máme 3 základní problémy, které se v programech objevují, pokud někdo neumí používat metody. Neúměrná velikost zdrojového kódu. S tím souvisí nepřehlednost, a pokud chceme něco v programu poupravit, tak to musíme udělat na více místech.
Definování metod
Metody se vytváří pomocí příkazu def jméno_metody, poté blok příkazů a ukončení bloku pomocí příkazu end.
def pozdrav
puts "ahoj"
end
Nadefinovali jsme si metodu Pozdrav, která nám vypíše „ahoj“, pokud tento kus kódu spustíme, nic se nestane. Pro spuštění metody, ji totiž musíme zavolat. Existují také programy, které se skládají pouze z metod a nic jiného nedělají, takovýmto programům říkáme knihovny.
Volání metod
Metody voláme velice jednoduše, napíšeme pouze jejich jméno.
def pozdrav
puts "ahoj"
end
puts "Prvni volani"
pozdrav
puts "Muzu si ji zavolat kolikrat chci"
pozdrav
pozdrav
Výstup
Prvni volani
ahoj
Muzu si ji zavolat kolikrat chci
ahoj
ahoj
Nesmíme zapomenout na to, že metodu musíme nejdříve nadefinovat a poté ji můžeme zavolat.
Předávání parametrů
Většinou se metodám předávají data (parametry), která zpracovávají. Abychom mohli metodě předat parametr, musíme si nadefinovat proměnné, do které se data uloží. Nadefinování metody bude vypadat takto: Def jméno_metody (parametr1, parametr2, parametr3) a zase zakončení slovíčkem end.
def pozdrav (jmeno)
puts "Ahoj, ty jsi #{jmeno}?"
end
pozdrav("Jakub")
a = "Martin"
pozdrav(a) #Muzeme predavat i promenne
výstup
Ahoj, ty jsi Jakub?
Ahoj, ty jsi Martin?
Jak vidíme na příkladu, metoda se volá úplně stejně, ale do závorek napíšeme parametr, který předáváme. Pokud je parametrů víc, akorát je oddělíme čárkou
Návratová hodnota
Spolu s parametry využívají metody také návratové hodnoty. Například máme metodu, která něco počítá, a potřebujeme z ní dostat výsledek ven z metody. K tomu slouží příkaz return.
def scitani (a,b,c)
vysledek = a
vysledek = vysledek + b
vysledek += c #Je to to samé jako vyseled = vysledek + c
return vysledek
end
vypocet = scitani(1,2,3)
puts vypocet
výstup
Na příkladu vidíme nadefinování metody se 3 parametry. Poté kus kódu, který nám parametry zpracovává a poté vrácení zpracovaného výsledku. Poté si zavoláme metodu s parametry a to co se nám vrátí pomocí return, se uloží do proměnné výpočet. Když slovíčko return zapomenete, Ruby si s tím i přesto poradí a automaticky vrátí poslední použitou proměnou, do které se něco ukládá. Takže pokud s příkladu smažeme return výsledek i přesto nám to vrátí, to co v tomto případě chceme. Nedoporučuji se na toto spoléhat a vždy příkaz return používat.
Lokální proměnné
Proměnné které používáme v metodách, jsou takzvané lokální proměnné a nemůžeme je tedy použít nikde jinde v kódu, pouze v metodě, to je taky jeden z důvodů proč se používá příkaz return.
def testovani
tester = "Ahoj"
end
testovani
puts tester
výstup
Kdyby se tedy jmenovali proměnná v metodě a mimo ní stejně, nemají na sebe vůbec žádný vliv
tester = "Cau"
def testovani
tester = "Ahoj"
end
testovani
puts tester
výstup
A ještě jedna věc kterou bychom si měli pamatovat. Pokud pošleme nějaká data jako parametr do metody a potom ty data měníme, mimo metodu zůstanou nezměněna. Parametr se chová jako nová proměnná. Pro lepší pochopení příklad.
def test(a)
a = "ahoj"
end
b = "cau"
test(b)
puts b
výstup
Příklad
Nyní si ukážeme příklad, na které je vidět použití metod a proč jsme se je vlastně učili. Program je v podstatě zkouška, jak umí kdo počítat. Ukazuje příklady a ptá se na výsledky. Pokud odpovíme dobře, přičte se nám bod. Musíme tedy ptaní se několikrát opakovat.
puts "Dobry den, vitejte v testu z matematiky."
points = 0
puts "Kolik je 1+1?"
answer = gets.strip
if answer.to_i == 2
puts "Spravne!"
points = points + 1
else
puts "Chyba! Spravna odpoved je 2."
end
puts "Kolik je 3+4?"
answer = gets.strip
if answer.to_i == 7
puts "Spravne!"
points = points + 1
else
puts "Chyba! Spravna odpoved je 7."
end
puts "Kolik je 7+8?"
answer = gets.strip
if answer.to_i == 15
puts "Spravne!"
points = points + 1
else
puts "Chyba! Spravna odpoved je 15."
end
puts "Kolik je 1+3?"
answer = gets.strip
if answer.to_i == 4
puts "Spravne!"
points = points + 1
else
puts "Chyba! Spravna odpoved je 4."
end
puts "Diky za ucast v testu. Vase skore: #{points}b"
výstup
Dobry den, vitejte v testu z matematiky.
Kolik je 1+1?
3
Chyba! Spravna odpoved je 2.
Kolik je 3+4?
7
Spravne!
Kolik je 7+8?
15
Spravne!
Kolik je 1+3?
4
Spravne!
Diky za ucast v testu. Vase skore: 3b
Vidíme, že se nám část kódu opakuje, konkrétně kladení dotazu a kontrolování výsledku. Nyní následuje příklad, elegantnějším řešením pomocí metod.
def ask(a,b)
puts "Kolik je #{a} + #{b}?"
result = a + b
answer = gets.strip
if answer.to_i == result
puts "Spravne!"
return true
else
puts "Chyba! Spravna odpoved je #{result}."
return false
end
end
puts "Dobry den, vitejte v testu z matematiky."
points = 0
points = points + 1 if ask(1,1)
points = points + 1 if ask(3,4)
points = points + 1 if ask(7,8)
points = points + 1 if ask(1,3)
puts "Diky za ucast v testu. Vase skore: #{points}b"
výstup
Je totožný jako u předchozího příkladu.
Jak vidíme funkce programu je naprosto totožná, ale kód je o polovinu kratší a mnohem přehlednější. A lehce si můžeme předělat tento program na násobení oproti předchozímu příkladu, kde by jsme museli přepisovat na mnoha místech.
Závěr
Dneska jsme si tedy ukázali, jak se používají metody a k čemu slouží. Příště si už ukážeme objektově orientované programování v Ruby. Nadefinujeme si vlastní třídy, řekneme si jak se chovají proměnně ve třídách a mnoho dalšího.
Verze pro tisk
|
Nejsou žádné diskuzní příspěvky u dané položky.
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|