Len nedávno vyšliel Netbeans 6.0 už onedlho je tu verzia 6.1. Hoci podľa čísla verzia by sa mohlo zdať že ide len o kozmetické úpravy opak je pravdou. Vylepšenia sa dočkal výkon editora, ktorý teraz štartuje omnoho rýchlejšie. Je to uvedené aj v novinkách 6.1-ky tak som to len tak so zvedavosti otestoval a je to naozaj tak - u mňa dokonca ešte viac ako sa uvádza (uvádzané zrýchlenie až 40% je u mňa viac ako 300%).
Kým verzia 6.0 mala priemerný štart zhruba 1 minútu pri verzii 6.1 je to už len 20 sekúnd.A to už je teda poriadne vylepšenie. Za toto vývojárom veľká pochvala. Ešte niekoľko takýchto počinov a presvedčíme každého, že tá Java vlastne vôbec nie je pomalá
Navyše bola zlepšená aj správa pamäte - teda Netbeans zaberá o niečo menej.
Z ďalších vynovení som si všimol hlavne lepšiu podporu pre písanie JavaDoc-ov, hoci podľa môjho názoru mohli ponechať starý JavaDoc editor z verzie 5.5. Bola pridaná podpora automatického dopĺňania @ tagov (@params, @return atď.)
Na stránke som si tiež všimol, že bola pridaná podpora pre JavaScript (vyznačovanie syntaxe, refaktoring, dopĺňanie kódu atď.). Pribudli tiež aj nové hinty pre Ruby respektíve Rails, teda postupne sa možno refaktoring bude dať jednoducho robiť aj v dynamicky typovaných jazykoch, čo je len skvelé!
Musím povedať, že vývojárom sa opäť podarilo zapracovať na tomto skvelom IDE a vylepšili časť, ktorá ma mrzela najviac - rýchlosť štartu a pamäťovú náročnosť, týmto sa Netbeans dostal o krôčik bližšie k dokonalému IDE.
Ak ste programátor a Netbeans ste ešte nevyskúšali, alebo ešte nemáte najnovšiu verziu môžete si ho stiahnuť tu. Netbeans 6.1 je zatiaľ vo fáze betaverzie, vydaný by mal byť 23. apríla 2008.
Minule sme si nainštalovali Ruby a Rails, v dnešnom diele sa pozrieme bližšie na jazyk ruby a jeho konštrukcie a syntax. Úvodom ešte musím pripomenúť že ma teší, že sa čoraz viac začína písať aj u nás (Čechy a Slovensko) o Ruby on Rails, predovšetkým musím spomenúť dva články na prievan.sk a tiež blog o RoR - na čo ma upozornil faster.
Trocha syntaxe
Keywords
V jazyku Ruby existuje niekoľko keywords - vyhradených slov. Sú to tieto:
BEGIN, END, alias, and, begin, break, case, class, def, defined?,
do, else, elsif, end, ensure, false, for, if, in, module, next,
il, not, or, redo, rescue, retry, return, self, super, then, true,
undef, unless, until, when, while, yield
Premenné, konštanty - identifikátory
V jazyku Ruby existuje niekoľko druhov premenných:
- lokálne - začínajú malým písmenom (príklad: id, word)
- globálne - začínajú ‘$’ (príklad: $counter)
- inštančné (platnosť vrámci objektu) - začínajú ‘@’ (príklad: @instance, @Nie_konstanta)
- class (platnosť vrámci triedy) - začínajú ‘@@’ (príklad: @@class, @@Ziadna_konstanta)
- konštanty - začínajú veľkým písmenom (príklad: Nejaka_konstanta)
Komentáre
Pre jednoriadkové komentáre sa používa ‘#’. Napríklad:
a=3*b #vynasobi b tromi!!
Pre viacriadkové komentáre sa používa =begin a =end, ktoré slúžia na vkladanie dokumentácie, použitie:
=begin
Je jedno co tu napisem
interpreter to aj tak nezaujima
a odignoruje to... :/
=end
Premenné, konštanty - typy
V jazyku Ruby premenné nemajú typy. Objekty na ktoré odkazujú však typ majú. Najzákladnejšie typy sú numeric (číselný dátový typ), character (znak) a string (reťazec).
Pri číslach a znakoch je to viacmenej jasné, reťazce sa môžu nachádzať buď v apostrofoch ‘reťazec v apostrofoch’ alebo v úvodzovkách “iný reťazec”. Kým apostrofy vyznačujú jednoduchý reťazec, v ktorom sa môžu maximálne nachádzať odescapované lomítka, v reťazci vyznačenom úvodzovkami je možná aj interpolácia medzi jednotlivými typmi. Napríklad takto:
a=2
puts "Premenná a má hodnotu #{a}"
Existuje ešte ďalší typ reťazcov, ktorý sa používa hlavne pri skriptoch. je ohraničený znakom ` (opačný dĺžeň?). Takéto reťazce obsahujú príkaz, ktorý sa odošle systému a obsah reťazca je nahradený výstupom daného príkazu. Dlhšie príkazy sa môžu vyznačovať tiež %x[]. Napríklad:
`ls -l`
%x[tail /etc/apt/sources.list && top]
V jazyku Ruby sú polia (arrays) veľmi silným typom. Polia môžu obsahovať ľubovoľné typy, dokonca aj zmiešané. Všetky polia sú inštanciou triedy Array a majú k dispozícii veľa metód. Príklady konštrukcie polí:
[1,2,3] #pole čísel
[1,2,"slovo"] #pole s číslami a reťazcom
{1,["jablko","hruška"], "niečo iné"]
# hovorí sa že jablká sa nemajú miešať s hruškami
Veľmi často sa používajú polia reťazcou, preto v jazyku Ruby existuje skratka pre vytváranie poľa reťazcov:
%w[toto je pole retazcov]
Polia samozrejme používajú indexy na prístup k prvkom poľa:
prvy=pole[0]
pole[0]=pole[1]
Ďalším silným konceptom v Ruby je hash - mapovanie. Je to vlastne vytvorenie dvojíc kľúč => hodnota (key => value). Kľúč predstavuje index na ktorom sa daná hodnota nachádza. Napríklad:
{"peter@gmail.com"=>"Peter",
"darth_vader@hotmail.com"=>"Darth",
"sample@domain.ext"=>"Sample"}
Potom v programe môžeme použiť na pristupovanie k položkám takéto indexy:
petrov_email=email["Peter"]
Podmienky, vetvenie, cykly
Okrem klasického if má Ruby aj menej tradičnú podmienku unless, čo je opak if. Korešpondujúce riadky tabuľky majú rovnaký význam:
|
if x < 5 then
statement1
end
|
unless x >= 5 then
statement1
end
|
|
if x < 5 then
statement1
else
statement2
end
|
unless x < 5 then
statement2
else
statement1
end
|
|
statement1 if y == 3
|
statement1 unless y != 3
|
|
x = if a>0 then b else c end
|
x = unless a<=0 then c else b end
|
Case je v Ruby oveľa silnejší ako v ostatných jazykoch. Dovoľuje totiž provnávať akúkoľvek hodnotu (aj reťazce). V Ruby vyzerá takto:
case "Tu je reťazec"
when "hodnota 1"
puts "A je spravne"
when "UPLNE INA HODNOTA"
puts "B je spravne"
when /char/
puts "C je spravne"
else
puts "Ziadna z moznosti A, B, C nie je spravne"
end
Pri číselných hodnotách môže byť vstupná hodnota testovaná aj na príslušnosť v určitom rozmedzí (napríklad od 0 do 100 - 0..100)
Pre slučky existuje množstvo spôsobov ako ich vytvoriť:
|
# Loop 1 (while)
i=0
while i < list.size do
print "#{list[i]} "
i += 1
end
|
# Loop 2 (until)
i=0
until i == list.size do
print "#{list[i]} "
i += 1
end
|
|
# Loop 3 (for)
for x in list do
print "#{x} "
end
|
# Loop 4 ('each' iterator)
list.each do |x|
print "#{x} "
end
|
|
# Loop 5 ('loop' method)
i=0
n=list.size-1
loop do
print "#{list[i]} "
i += 1
break if i > n
end
|
# Loop 6 ('loop' method)
i=0
n=list.size-1
loop do
print "#{list[i]} "
i += 1
break unless i <= n
end
|
|
# Loop 7 ('times' iterator)
n=list.size
n.times do |i|
print "#{list[i]} "
end
|
# Loop 8 ('upto' iterator)
n=list.size-1
0.upto(n) do |i|
print "#{list[i]} "
end
|
|
# Loop 9 (for)
n=list.size-1
for
i in 0..n do
print "#{list[i]} "
end
|
# Loop 10 ('each_index')
list.each_index do |xt
print "#{list[x]} "
end
|
Na kontrolu behu slučiek sa používa kľúčové slovo break, ktoré “vyskočí” so slučky. (rovnako ako napríklad v C-čku v prípade vnorených cyklov skončí len najvnútornejší)
Kľúčové slovo retry sa používa s iterátorom (slučka for), alebo v begin/end bloku pri výnimkách. Pri použití v cykle for sa iterátor reštartuje.
Pre cykly while a until sa namiesto retry používa kľúčové slovo redo. Kľúčové slovo next, sa používa na vyskočenie z najvnútornejšieho cyklu, pričom sa pokračuje ďalej.
Výnimky
Ruby rovnako ako ostatné jazyky (Java, C#) obsahuje koncept výnimiek. Na “vyhodenie” výnimky sa používa kľúčové slovo raise, na zotavenie sa používa blok begin/end, na odchytenie sa používa rescue. Príklady:
begin
# Nejaký kód
rescue Výnimka1
# ...
rescue Výnimka2
# ...
else
# Iné výnimky...
end
V mnohých prípadoch chceme vyskúšať opraviť čo sa pokazilo a skúsiť znova.. Práve tu nám príde vhod retry:
begin
# Chybový kód...
rescue
# Pokúsime sa o nápravu...
retry # Skúsime znova
end
Niekedy, napríklad pri práci so súbormi je potrebné vykonať určité akcie bez ohľadu na to či nastala výnimka alebo nie. V týchto prípadoch sa používa ensure:
begin
# Chybový kód...
rescue
# Vysporiadame sa s chybou
ensure
# Toto sa vykoná vždy
end
Existujú ešte zjednodušené zápisy odchytávania výnimiek:
x = a/b rescue puts("Delenie nulou!")
V metódach sa môže rescue blok umiestniť na koniec metódy, vtedy sa odchytávajú výnimky v celej metóde:
def vzorova_metoda
# telo...
rescue
# zotavime sa z vynimiek...
end
Na dnes je to všetko, nabudúce si povieme niečo o OOP, dynamickom prístupe a metaprogramovaní.
Ruby prichádza…
Možno ste už počuli o Ruby on Rails, skvelom a veľmi porduktívnom spôsobe vytvárania webových aplikácií. Ak nie tak vám to v skratke zhrniem. Ruby je programovací jazyk, ktorý vznikol v roku 1995 a medzi jeho hlavné črty patrí:
- je objektovo orientovaný
- 4 druhy “viditeľnosti” premenných (globálna, pre triedu, inštanciu a lokálna)
- garbage collector
- preťažovanie operátorov
- reflexia a metaprogramovanie
Ok to je Ruby. A čo Rails?
Rails je webový rámec pre jazyk Ruby. Ak vám niektoré zo slov “webový” alebo “rámec” nič nehovorí tak vám prezradím že web je napríklad aj to čo práve čítate (
) a rámec je nejaký znovupoužiteľný, všeobecný návrh softwarového systému, väčšinou pozostávajúci z abstraktných tried.
Práve znovupoužiteľnosť je pri Rails kľúčovým slovom. Všetky časti sú uložené na jednom konkrétnom mieste a nie je ich potrebné písať nanovo. Ďalšou dôležitou zásadou je “konvencia pred konfiguráciou”. To znamená že programátor musí špecifikovať a nakonfigurovať len nekonvenčné aspekty v programe, ostatné fungujú automagicky.
Inštalácia
Neviem či sa dá napísať jeden “správny” návod ako nainštalovať Ruby on Rails. Hlavne kôli tomu že výber servera je na vás. Takže je len otázkou chuti či nainštalujete apache, nginx, lighttpd alebo budete používať štandardne dodávaný webrick. Postup pri ľubovoľnom serveri sa zhoduje v týchto krokoch:
- Nainštalovať Ruby
- Nainštalovať Ruby Gems
- Nainštalovať Ruby on Rails pomocou Ruby Gems
Tak teda začneme. Presvedčíme sa, či máme aktuálene všetky balíky:
sudo aptitude update && sudo aptitude upgrade
Nainštalujeme Ruby:
sudo apt-get install ruby ri irb rdoc
Ak nemáme nainštalujeme aj balíčky súvisiace s databázou (opäť je výber na vás, ja som sa rozhodol pre klasickú MySQL) teda konkrétne balíčky: mysql-server libmysql-ruby ruby1.8-dev libdbd-mysql-perl libdbi-perl libmysql-ruby1.8 libmysqlclient15off libnet-daemon-perl libplrpc-perl libreadline-ruby1.8 libruby1.8 mysql-client-5.0 mysql-common mysql-server-5.0
Zo stránky Ruby Forge stiahneme najnovšiu verziu balíka rubygems (v čase písania článku 0.9.4), rozbalíme a spustíme setup.rb:
sudo wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz
cd rubygems-0.9.4
sudo ruby setup.rb
Teraz môžeme nainštalovať Rails:
sudo gem install rails --include-dependencies
Ak by náhodou inštalácia zlyhala treba skúsiť
sudo gem update
Teraz by sme mal mať naninštalované Ruby on Rails, kto chce môže doinštalovať nejaký server. To si ukážeme nabudúce. Nateraz si ešte môžeme overiť či sa nám inštalácia podarila. Vytvoríme si priečinok, (napríklad ~/rails) a tam spustíme:
rails test
cd test
./script/server
Týmto by sa nám mal spustiť server webrick, ktorý je štandardne umiestnený na 0.0.0.0:3000, teda do prehliadača zadáme túto adresu.
Na záver zopár užitočných odkazov:
- ruby-lang.org - oficiálna stránka jazyka Ruby, obsahuje porovnania ruby s ostatnými známymi jazykmi (php, java, C/C++), tutoriál, informácie a linky
- rubyonrails.org - oficiálna stránka frameworku Rails, nájdete tu screencasty, ďalšie odkazy na rôzne knihy, tutoriály, ukážky, kontakty na komunitu ľudí okolo RoR.
- RoR na bestechvideos.com - ďalšie screencasty
- Wiki stránka s tutoriálmi - viac tutoriálov
