Ruby je programovací jazyk. Ruby on Rails je framework, neboli sada několika knihoven. Je to nadstavba nad Ruby.
Téměř každý, kdo někdy začínal s programováním si někdy položil tuto
otázku či její obměnu. Svět moderních technologií je natolik rozsáhlý,
že všechny tyto pojmy můžou být pro začátečníka velice matoucí. Přidejme
ještě věci jako SQLite, git, příkazová řádka, terminál, bundler,
sublime text, server, localhost, comit, migrace .. a už to začíná být
spíše jeden velký cirkus. V tomto článku se blíže podíváme na základní
rozdělení ze všech, na alfu a omegu vašeho programování v Rails - v čem
se Rails liší od samotného Ruby? A kdy použiji co?
Vezmeme to pěkně popořádku. Ruby je programovací jazyk.
Je jedním z mnoha a mnoha programovacích jazyků, které si dnes můžete
zvolit. Určitě jste už alespoň slyšeli některé další jako Javascript,
Java, C nebo třeba méně známe jako Lisp, Haskell či Prolog. Programovací
jazyk si můžeme představit jako cizí jazyk, jaký se učíme ve škole.
Stejně jako španělština je pro nás nejprve nečitelná, tak může vypadat i
Ruby. Oba dva mají nějaká gramatická pravidla, syntax kterým se musíme
řídit, chceme-li být korektní. Rozdíl je, že lidské jazyky jsou dělané
pro komunikaci s lidmi, programovací jazyky pro komunikaci s počítačem.
Proto musíme být do detailu přesní, když se snažíme vyjádřit naše úmysly
třeba v Ruby (počítač se nás nedoptá, jak jsme to mysleli).
S programovacím jazykem můžem udělat ledacos. Můžeme si zvolit Ruby
nebo třeba Javu, mají své odlišnosti, své silné stránky i ty slabší, ale
ve výsledku bychom měli být schopni v obou případech dojít k cíli.
Můžeme napsat kód, který vyůstí třeba v desktopovou hru, jako je hledání
min. Nebo můžeme napsat program, který bude automaticky nahrávat naše
data třeba na Facebook :) Můžeme také napsat webovou aplikaci, třeba
jako ten samotný Facebook nebo Twitter.
Ruby má plno využití. Rozdíl, oproti hře z prvního příkladu a webové
aplikaci z posledního je ten, že desktopová aplikace se dá samostatně
spustit. Asi jako když babičce pustíte na počítači Solitaire, nebo
otevřete Microsof Excel. Webová aplikace oproti tomu běží jen uvnitř vašeho prohlížeče.
Potřebujete k ní tedy přístup k internetu. Webová aplikace také
většiunou stojí na vašem účtu - který určuje kdo jste, jak se přihlásite
a zkrátka o vás ukládá všelijaká data. Když takovou webovou aplikaci
navštívíte druhý den, bude si toho hodně pamatovat.
Jistě jste si všimli, že webové aplikace získáváji na popularitě.
Jsou všude a lidé je také rádi tvoří. Není to totiž zase natolik
obtížné. Někteří chytří lidé (konkrétně 37signals) si všimli, že během
každého vytváření nové webové aplikace existují určité kroky, které se
vždy opakují. Ačkoliv byl námět jiný, jednou se dělala sociální síť, po
té blog, obecné schéma postupu bylo velice podobné. V praxi to pak
znamenalo psaní Ruby kodu, který se opakoval či byl opravdu dlouhý. A
tak vzniklo Ruby on Rails.
Ruby on Rails je framework, neboli sada několika knihoven. Je to
nadstavba nad Ruby, to znamená, že je to v tomto jazyce napsané. A teď
co to vlastně znamená. Knihovna je balíček již napsaného kódu, který můžeme znovupoužít.
Je to jako by někdo jiný za nás udělal část práce a nám dal jen návod,
jak se na ni odkazovat a jak pokračovat. Reálně to jsou připravené
metody a třídy které jsou někde popsány (třeba v oficiální Ruby on Rails
dokumemntaci) a my je můžeme používat, spoléhat se na ně aniž bychom
věděli, jak vnitřne fungují. Není to ale žádná magie, je to zas jen
Ruby, které bychom si stejně tak mohli napsat sami. Knihovna nám šetří
čas a energii a dává nám určitou abstrakci.
Ruby on Rails je tedy taková pomůcka pro tvorbu webových aplikací v Ruby. Není to ale jen o kôdu.
Když si otevřeme jakokouliv Rails aplikaci v editoru, vidíme stále stejnou strukturu složek - víme, že máme nějaké app
a v něm najdeme například naše views
.
To je příklad toho, co nám přináši Rails. Strukturu, řád. Nejsou to jen
připravené metody ale i určité konvence a principy, které nám značně
usnadní život. Dalším příkladem může být princip “convention over configuration”
neboli konvence nad nastavováním. Tento princip říká, že v Railsech je
téměř vše téměř vždy hned připraveno k použití. Není potřeba nic
nastavovat a ani specifikovat, všechno dopředu předpokládá, že chceme to
samé, co chce většina developerů. Pouze v případě, že máme nějaké
specifické požadavky, musíme sáhnout ke konfigurování souborů. Tento
princip potvrzuje i scaffold
. Když chceme nový model pro Article
, napíšeme jen
rails generate scaffold article title:string content:text
A je to, Rails udělají zbytek za nás, protože předpokládájí, že
chceme standartní řešení. Mohli bychom si to také napsat ručně, vytvořit
soubory, pojmenovat class, udělat migraci pro tabulku v databázi a její
atributy, připravit v HTML šablony pro listování všech článků či
přidávání nového, a tak dále. Proč se ale obtěžovat, zvlášť když za
chvíli budeme dělat to samé pro uživatele, komentáře, …
Na závěr ještě jedna malá poznámka. Začátečníci se často ptají, kde v
Rails aplikaci najdou to Ruby. Zkrátka ho tam nevidí. Je ale všude.
Tedy, všude tam, kde máme u souboru koncovku .rb a nebo
tam, kde se vkládá dynamicky přes ERB. (Rails přidávájí třeba i to, že
nám do naší aplikace pěkně spojují ostatní soubory, potřebné pro vývoj,
jako HTML, kaskádové styly či javascript). Všechno, co má onu magickou
koncovku je ale Ruby. Podívejme se na tento jednoduchý model:
class Question < ActiveRecord::Base attr_accessible :text validates_presence_of :text has_many :answers end
Jestli jste se někdy učili Ruby, rozhodně jste se učili deklarovat
třídy či jejich dědičnost, není to tedy nic nového. To, co je uvnitř, je
jen volání různých metod. Jak jsem říkala v úvodu, my zde nevidíme a
ani nechceme vidět implementaci. Spoléháme se a věříme, že například validates_presence_of
jako metoda, která bere jeden parametr (my ji zde voláme s naším
textem) udělá to, co se od ní čeká. Tedy neuloží novou instanci Question
s prázdným atributem text
.
A kde se ta implementace bere? Přeci jsme ji nainstalovali na náš počítač když jsme psali gem install rails
.
Stáhli jsme si do počítače všechno, co Rails přináší a začali čerpat
jeho výhody. Snad je tedy již jasnější, jaký rozdíl je mezi jazykem,
který hovoří s počítačem a překládá mu naše úmysly a mezi knihovnou či
celou sadou knihoven, která tento jazyk využívá aby nám ušetřila práci.
Úvaha na závěr: gemy jsou vlastně také knihovny!