sobota, 19. januar 2013

Ruby programiranje za pametne kretene (2): "Programiranje v Rubiju naj bo užitek"

2) Ruby jezik


Ruby je minimalističen jezik. Tudi pod razno se ne pusti zapletati pravilom C in C++. Ne jebe idiotskih pravil, katerih četrtine ne poznajo niti profesionalni programerji. Njegova filozofija je  naj bi bilo
Programiranje v Rubiju naj bo užitek!

Ruby je torej minimalistični jezik: ima bogate knjižnice, toda v samem jeziku je malo mehanizmov.
Za razumevanje idiomatske kode v Rubiju so potrebni zgolj 3 principi delovanja teh mehanizmov jezika:

1) VSE kar obstaja v Rubiju JE OBJEKT.
Ruby ni OOP zgolj v smislu kot je OOP C++. V C++ in Javi obstajajo primitivni tipi. Tega Ruby sploh ne pozna. Celo števila, kot npr. 1 so polni objekti.

2) Vsaka operacija je klic metode na nekem objektu in vrne vrednost.
V Javi in C++ je npr overloadanje operatorjev nekaj drugega kot overridanje metod. Prav tako so tam možne void funkcije, ki ne vračajo ničesar. Ne v Rubiju. + je npr. prav toliko metoda kot GetSize().

3) Vsako programiranje je metaprogramiranje
Razredi in metode so lahko dodani ali spremenjeni kadarkoli, celo med tekom programa!
V Javi morajo bit razredi deklarirani ob času prevajanja; baznih razredov se ne da spremeniti niti takrat.  Ne v Rubiju! Tu lahko 'odpremo' celo tako važne razrede kot je npr. String in ga spremenimo oz. mu dodamo metode. Kar slišim vrišč groze C++ programerja, ki se zgraža nad to omogočeno močjo Ruby programerju. "Toda s tem lahko nardiš en kup slabih zadev..."
Eh, GROW UP, MAN! With great power comes great responsibility! Ass hole  Go back to your C++ cave full of stupid bugs and people without hair (the pulled all of them out, while loosing nerves)

več najbrž prihodnjič, "but who the fuck knows..." :)

Ruby programiranje za kretene - 1: So, let's begin

1) So, let's begin...


1.1) Inštalacija


Za MacOS & Linux

Če nisi srečnež z Macom ali pa Linuxaš boš rabil ruby tudi namestiti. Če pa imaš Maca imaš ruby že predinstaliran in ti je za zagon interpreterja v REPL zanki treba naklofat samo:

irb

v ukazno lupino. Nekatere  Linux  distribucije prav tako uletijo z že nameščenim rubyjem, tist, ki ga še nimate pa to itak znate narediti sami (saj si linuxaš, al kaj?!). Glej le da namestiš vsaj Ruby 1.9.1

Za Win namestitev:

Windows nesrečniki smo Ruby interpreter prisiljeni poinštalirat sami.
Še do nedavnega je bilo na Win treba najprej poinštalirat Ruby, nato pa še DevKit da je bil mogoč tudi prevod C kode, ki je kdaj potrebna za posamezne dodatke (knjižnice itd). Če se odločiš za to pot je najbolje da obiščeš RubyInstaller stran in poinštaliraš oboje.
Danes ta pot (načeloma) ni več potrebna saj so skup spravli paket, ki poleg obeh zgornjih paketov vsebuje tudi vse potrebno za delo z Ruby on Rails. Zato, ker najbrž nameravaš na dolgi rok naštudirat tudi Rails predlagam to pot.
1) Pojdi torej najprej na: http://railsinstaller.org/
2) Potegn dol RailsInstaller kit
3) Poinštaliraj in
boš poleg omenjenega postal še veseli 'lastnik' programov kot so Git (sistem za kontrolo programske kode - zelo uporabna zadeva. Mogoče boš še kaj naklofal na to temo) in SQLite (baza podatkov v obliki enga samega fajla), kakor tudi vmesnika za dostop do baze SQL severja in drugih avtomatično nameščenih knjižnic, ki znajo priti prav že kmalu.
4) zadeva ima da dela.

1.2) Prvi preizkus

Po uspešni namestitvi naj bi bil Ruby dostopen od kjerkoli na compu, zato zavihaj rokave, piči na start gumb->RailsInstaller in klikni Interactive Ruby.

Ima da se ti odpre okno v Command Promptu in reče neki podobnga kot:

irb(main):001:0>

Do istega REPL loopa lahko pride tudi s preprostim 
irb
natipkanim v Win Command Prompt.
irb oz. Interactive Ruby je t.i. REPL zanka v Rubyju. REPL je kratica za: Read, Eval(uate), Print in nato Loop. Preprosto to pomeni da ob vsakem stisku tipke ENTER:
najprej PREBERE kar si natipkal,
ta text izvede,
nato IZPIŠE rezultat,
in ponovi - t.j. čaka na naslednji ENTER.

Simpl, ne? Ampak REPL je genialna zadeva. Včasih je blo to na Commodorju 64 ali ZX spectrumu v 80-ih, le da je to delal v jeziku BASIC. Izhaja pa še od prej in sicer iz jezika LISP (kokr jez vem zgodovino), iz katerega Ruby jemlje kar nekaj pametnih! Lisp je zakon, btw!

Skratka to ti je osnovno orodje za delo v rubiju. Kle lahko v realnem času testiraš rezultat, preverjaš napake itd.

Najbolj simpl ga je preprosto uporabit za kalkulator:

irb(main):001:0> 1 + 5
=> 6
irb(main):002:0>

Od tu dalje se lahko špilaš sam, moj tutorial bo sedaj poskočil za 500 stopenj in postal
Ruby za pametne kretene!


Ruby programiranje za kretene

0) Uvodnik

Ruby je res lep objekti jezik. Po mojem je najprimernejši za začetno učenje programiranja npr. na fakulteti. Predvsem ker je dosleden v pravilih. Ima jih zelo malo; tudi sam jezik je majhen a to nikakor ne pomeni da ni močan.
Še nekaj let nazaj je veljal za otročji jezik in resni programerji (ha!) se zanj -razen par izjem- nis(m)o menili.

Pa je prišel Rails.
In kot bi izstrelil iz topa je v letu dni popularnost poskočila na sam vrh. Razvoj v PHP je postal anarhičen v primerjavi z Rubi on Rails in vsi so skušali kopirati uspeh tega frameworka. PHP je imel svojo verzijo (verzije). Python je poskušal. Scala ni zamujala veliko...
Pa kljub temu da tile frameworki sploh niso slab samo po sebi nekako niso dosegli Railsovega buma.
Zakaj?

Hja... V grobem je sicer res, da so si OOP jeziki podobni in da kar lahko izvedeš na enemu boš podobno naredu na drugem... toda spoznali smo da si jeziki le niso tako podobni.
Rails je uspešen ne samo zaradi briljantne strukture njegovega avtorja, ki jo poseduje, temveč tudi zaradi samega jezika!

Meta-programiranje, ki ga s tako lahkoto podpira Ruby je namreč osnovni gradnik samega Frameworka  Ni torej dovolj le RESTfulnes, MVC, Agilni pristop in TDD; potreben je programski jezik, ki te stvari omogoča brez puljenja las.
In to je bil "the secret sauce of Ruby on Rails"!