Zpříjemněte si vývoj webových stránek s frameworkem Ruby on Rails (díl 1.)

Martin Pešout   7. 2. 2011


Když jsem před dvěma lety přemýšlel o tom, jak zefektivnit a zpříjemnit svojí programátorskou práci, tak jsem ještě netušil, že mě osud zavede k Ruby on Rails, frameworku postaveném na jazyce Ruby. Do té doby jsem používal několik let programovací jazyk PHP, který byl dostačující pro většinu projektů, se kterými se běžně setkávám. Většina lidí si řekne, co mě teda vedlo k této změně? Hlavním důvodem bylo především to, že práce s tímto nástrojem je snadnější a hlavně pro vývojáře mnohem příjemnější. V tomto článku bych rád přiblížil právě ty prvky, které nám tento nástroj přináší a čím může ulehčit programátorovi práci.

Programovací jazyk Ruby

Před samotným popisem Ruby on Rails je nutné zmínit alespoň pár slov k programovacímu jazyku Ruby, na kterém je tento webový framework postaven. Tvůrcem je Yukihiro Matsumoto, v internetovém světě známý pod přezdívkou Matz. Záměrem bylo spojit prvky z jeho oblíbených programovacích jazyku (Perl, Smalltalk, Eiffel, Ada a Lisp). Podařilo se mu zformovat nový jazyk, který vyvažuje funkcionální programování s imperativním. Matz přímo tvrdí ve svém článku, že se snažil utvořit Ruby přirozený, ne jednoduchý.


Ruby je jednoduchý navenek, ale velmi komplexní uvnitř, přesně jako naše lidské tělo.

—Yukihiro Matsumoto

Oblíbenost tohoto nástroje

Programovací jazyk Ruby spatřil poprvé světlo světa v roce 1995. Větší pozornosti se mu dostalo až v posledních letech, a to ve spojení s frameworkem Ruby on Rails. Index TIOBE1,
který měří nárůst programovacích jazyku, uvádí Ruby v lednu 2011 na desátém místě mezi všemi programovacími jazyky na světě. Množství popularity je přisuzováno počtu softwaru napsaného v Ruby. Ruby je k dispozici zcela zdarma. Volně ho lze užívat, kopírovat, upravovat a distribuovat.

tiobe

Vše, na co si vzpomenete, je objektem

Ruby je plně objektový programovací jazyk. To má za následek, že vše, co vývojář v kódu použije, je objektem. Muže si pak dovolit využít i takových konstrukcí, které ukazuje následující příklad.

2.times {print "Hello world "}
>> Hello world Hello world

Každý kousek kódu má svoje vlastnosti a akce. V objektově-orientovaném programování jsou vlastnosti nazývány instanční proměnné a akce jsou známy jako metody. Mnoho programovacích jazyku nemá čísla a další primitivní typy implementovány jako objekty. Zde tomu tak není a opravdu každý typ zde má svoje instanční proměnné a akce. Pro ukázku, například v jazyce Java je možné získat absolutní hodnotu nějakého čísla tak, že se zavolá oddělená funkce a následně se jí předá potřebná hodnota. Bude použito nejspíš něco takového:

number = Math.abs(-5) // Java kód

Jak již bylo zmíněno, čísla vystupují v roli objektu. Proto jazyk Ruby poskytuje možnost zjistit absolutní hodnotu pomocí vlastní metody daného čísla. Pro zjištění výsledku se jednoduše použije následující volání:

number = -5.abs # Ruby kód

Také třídy objektu vystupují v tomto jazyce jako objekty. Je možné proto s nimi dělat všechny běžné věci jako s ostatními objekty v Ruby. Vytvářet lze úplně nové třídy objektu, editovat stávající přidáním nebo odebráním metod. Lze dokonce naklonovat třídu, upravovat pak její kopii a originál tak zachovat.

Flexibilita

Programovací jazyk Ruby přichází s větší flexibilitou, protože dovoluje vývojářům volně měnit vlastní části jazyka. Základní metody tak mohou být zcela odebrány nebo znovu definovány. Programátor má v tomto směru naprosto volnou ruku. Vše si lze představit na následujícím jednoduchém příkladu. Sčítání je běžně reprezentováno pomocí operátoru plus (+). Ve vytvářeném programu bychom raději použili citelnější slovo plus. Jednoduše je tak možné přidat novou metodu do třídy Numeric. Dosáhne se toho, že pak u libovolného čísla v našem systému bude dovoleno využívat tuto novou metodu.

class Numeric
    def plus(x)
        self.+(x)
    end
end
y = 5.plus 6
# y je nyní rovno číslu 11

Další věcí, kterou se Ruby odlišuje od ostatních nástrojů, je způsob, jakým lze psát kód. Syntaxe pak ve výsledku připomíná spíše psanou větu než kód programovacího jazyka. Autoři tohoto nástroje si této vlastnosti velmi cení a i zkušenosti mnoha programátorů říkají, že jakmile si vývojář na tento styl psaní kódu zvykne, nebude chtít používat nic jiného. Docílí se tím poté i pěkné čitelnosti a úspory syntaxe. Jednoduchý příklad je vidět na následující ukázce.

body += additional_text unless additional_text.nil?

Pro nové vývojáře, kteří přešli k Ruby z některého imperativního programovacího jazyka jako je Visual Basic nebo PHP, je velice oblíbenou vlastností používání takzvaných bloků. Programátor je schopný pomocí bloku připojit na konec libovolné metody vlastní část zdrojového kódu, ve kterém popíše požadované chování. Psaní bloku je inspirováno především funkcionálními jazyky. Na následující ukázce je předvedeno použití bloku mezi konstrukcí doend. Metoda map pak aplikuje náš blok na uvedený seznam slov.

search_engines =
    %w[Google Yahoo MSN].map do |engine|
        "http://www." + engine.downcase + ".com"
    end

Zpestření zdrojového kódu

Při programování lze poměrně rychle zjistit, že Ruby rozumí spoustě konstrukcí. Závorky je možné používat ke zpřehlednění psaného kódu, avšak dá se obejít i bez nich. Stejně se tento jazyk staví i k používání středníku pro ukončení příkazu na řádku. Obě následující volání jsou proto ekvivalentní:

number = (2 + 1);
number = 2 + 1

Nové proměnné, které bude potřeba používat, není nutné předem deklarovat. Pro jejich označení je zde několik základních konvencí, kterými je vhodné se řídit.

  • var je označení pro lokální proměnnou
  • @var označuje instanční proměnnou
  • $var se používá pro globální proměnné

Dodržení těchto pravidel pak zvyšuje čitelnost kódu a dovoluje programátorům jednoduše označit role každé proměnné.

Co můžeme čekat v dalším díle?

V tomto článku jsem chtěl čtenářům poskytnout úvod k bližšímu vyprávění ohledně frameworku Ruby on Rails. Zaměřil jsem se především na popis jazyka Ruby, na kterém je samotný framework postavem. V dalším díle se budu zabývat samotným nástrojem Ruby on Rails a zmíním jeho význačné prvky.

Zdroje a odkazy na podrobnější informace

Zařazeno v Vývoj

Jsem brněnský UI vývojář pěkného frontendu. Od malička si potrpím na detail, ale přitom kladu důraz na jednoduchost a přehlednost. Zastávám názor, že jednodušší weby jsou ty nejkrásnější.


8 komentáře

  1. blizzboz

    „Ruby je plně objektový programovací jazyk. To má za následek, že vše, co vývojář v kódu použije, je objektem. Muže si pak dovolit využít i takových konstrukcí, které ukazuje následující příklad.“

    neni to zároveň aj dôvod pomalosti intrpretera? vo vačšine objektových jazykov existujú aj primitívne datové typy, ale pracuje sa s nimi ako s objektami .(vďaka automatickému boxingu / unboxingu) má to svoj dôvod. Skúste napr: vytvoriť bitmapu v ktorej bude oložených niekoľko miliónov pixelov - objektov a skúste na ňu vytvoriť jednoduchý filter. Bude to pomalé a neefektívne, a zaberie to veľa pamate, v praxi je výrazný rozdiel v rýchlosti spracovania aj medzi primitívnymi dátovými typmi napr. integer a real. S objektom to musí byť ešte rádovo pomalšie.

    „V objektově-orientovaném programování jsou vlastnosti nazývány instanční proměnné a akce jsou známy jako metody.“

    neni náhodou rozdiel medzi vlastnosťou a inštnačnou premennou? Cez vlastnosti sa predsa k inčným premenným (bezpečne) pristupuje.

    1. Marek Hulán

      neni to zároveň aj dôvod pomalosti intrpretera? …

      Interpretované jazyky budou vždy pomalejší než kompilované, s tím nic moc nenaděláme. Primitivní datové typy zcela jistě urychlí běh výsledného programu, ale přicházíte o možnosti popsané v článku.

      Jen blázen by však algoritmus nad tak rozsáhlou datovou strukturou programoval v ruby a čekal by, že výsledný skript bude rychlejší než např. program v C. Můžete však použít některou z nativních knihoven nebo si samotnou kritickou část napsat v něčem jiném sám. Každé pohodlí (i syntaktické) něco stojí.

      Kéž by primitivní datové typy byla jediná věc, která nás v ruby ohledně rychlosti trápí 🙂 Mnohem závažnější problém v Matzově interpretu (větev 1.8.*) je to, že má vlastní implementaci vláken a skript tak běží vždy maximálně na jednom jádře. Dnes již naštěstí existuje několik alternativ… (jruby, rubinius, …)

      Pokud programujete webové portály, rozhodně se nemusíte bát výkonostních problému ze strany ruby.

      neni náhodou rozdiel medzi vlastnosťou a inštnačnou premennou? Cez vlastnosti sa predsa k inčným premenným (bezpečne) pristupuje.

      Slovíčkaření 🙂 Vlastnost (atribut) je dle mého názoru proměnná, která je uložená „přímo v instanci“. Dostáváme se k ní pomocí metod (v ruby se jim říka accessors) nebo pokud jsme v kontextu instance tak přímo přes @nazev.

      V článku je to možná trochu nešťastně řečeno, nicméně vlastnost zkrátka není metoda.

    1. Autor Martin Pešout

      Nebyl to přímo zdroj mého článku. Ale protože mám poslední sekci nazvanou jako „Zdroje a odkazy na podrobnější informace“, tak by se to do toho seznamu určitě hodilo přidat. Díky za připomínku

  2. srigi

    Pro nové vývojáře, kteří přešli k Ruby z některého imperativního programovacího jazyka jako je Visual Basic nebo PHP, je velice oblíbenou vlastností používání takzvaných bloků

    nemal nahodou autor na mysli anonymne funkcie? Z toho popisu som jelen, pripada mi to ako strojovy preklad.

    Okrem toho je uvedena ukazka kodu pod odstavcom pre mna ako PHPckara totalne necitatelna (ziadny popis). Mohol by sa niekto odhodlat a prelozit mi to do pochopitelnejsej (C like) syntaxe PLS?

    1. srigi

      nj, blok v C-like jazykoch znamena nieco trosku ine. Inak vdaka za pekny clanok (a odkaz), len tak dalej.


Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Odesláním formuláře souhlasíte se zpracováním osobních údajů.