Tomáš Belan

Kvinta B

28. 2. 2007

http://www.smnd.sk/tomi/files/slohy/


A Programmer's Best Friend”

(recenzia)


Ruby je moderný objektovo orientovaný programovací jazyk, ktorý v posledných pár rokoch získava na popularite. Ide o multiparadigmatický dynamický interpretovaný jazyk, inšpirovaný hlavne Perlom a Smalltalkom. Prvá verzia vyšla už v r. 1995, ale známy začal byť až okolo roku 2004.

Podobne ako aj niektoré iné jazyky (napr. Python, Java), Ruby si podľa slov autora Yurikira Matsumota za cieľ kladie, aby veci neboli jednoduchšie pre počítač, ale hlavne pre programátora.

Ruby má jednoduchú gramatiku. Nemám na mysli, že je jednoduché sa Ruby naučiť (aj keď to môže byť tak), ale to, že keď už Ruby poznám, programujem rýchlo a efektívne. Programovať v Ruby pôsobí príjemným a prirodzeným dojmom. Neprítomnosť bodkočiarok, čo by boli za každým príkazom, som najprv považoval skôr za nevýhodu1 (voľnejšie pravidlá syntaxe umožňujú ľahšiu tvorbu škaredého kódu), ale keď som si na Ruby zvykol a urobil v ňom niekoľko programov, teraz to považujem za neoceniteľné. Keď človek pozná základné pravidlá, programy v Ruby sú jednoducho čitateľné a väčšinou treba (oproti programom vo viac nízkoúrovňových jazykoch) písať len minimum kódu.

Ruby sa napríklad pokúsi uhádnuť, čo slovo znamená, podľa toho, akej veľkosti sú písmená. Keď je slovo celé veľkými, asi ide o konštantu. Keď začína na veľké písmeno, bude to názov triedy a keď začína na malé, je to čosi iné.

Premenné, lokálne ani globálne, netreba nijako deklarovať. Ruby (podobne ako väčšina interpretovaných jazykov) nepotrebuje poznať vopred typ premennej, ale nie len to: napríklad pochopí, či je premenná lokálna alebo globálna podľa toho, ako sa volá. Globálne premenné vždy začínajú na znak '$'. Privátne objektové atribúty zase začínajú na '@'. Zo začiatku som s touto znakovou notáciou trochu nesúhlasil, ale ušetrí to prekvapivo veľa písania.

To, že Ruby je interpretovaný, prakticky umožňuje dynamické upravovanie samotného programu, a to nehovorím len o „eval” funkcii (ktorá je tam samozrejme tiež). Definície tried nemusia byť na jednom mieste, ale môžu byť rozložené na viac častí, čo znamená, že je možné veľmi jednoducho triedy (a to aj tie vstavané do systému samotného!) z akéhokoľvek miesta programu rozširovať o ďalšie funkcie. Ruby tiež má pokročilý systém blokov, ktoré sa využívajú hlavne ako iterátory, s ktorými pracuje sada univerzálnych funkcí, ktoré sú dostupné v triedach ako Array, Hash, Range apod.

Ruby má rozsiahlu štandardnú knižnicu a väčšina najrozšírenejších knižníc (OpenGL, SDL, Qt, …) majú aj svoju verziu (presnejšie, binding) pre Ruby. V Ruby je tiež naprogramovaný populárny framework na internetové aplikácie, Ruby on Rails.

Mal by som samozrejme popísať aj nevýhody Ruby. Prvá a najväčšia je, že je oproti väčšine ostatných jazykov dosť pomalý. To by sa ale síce malo zlepšiť vo verzii 1.9 (resp. 2.0), ale na tú bude asi treba čakať veľa mesiacov, možno dokonca aj viac než rok. Ďalšia nevýhoda je, že syntax Ruby v niektorých prípadoch môže byť až príliš voľná a môže viesť k chybám. Ide napríklad o použitie neexistujúcej premennej, aj keď to je asi vo všetkých jazykoch, kde ich netreba deklarovať. Závažnejší príklad je skôr to, že keďže Ruby nevyžaduje, aby pri volaní metód boli argumenty napísané v zátvorkách, môžu nastať pri metódach, čo vyžadujú viacero argumentov, problémy s prioritami gramatiky. Autori sa vyjadrili, že v nejakej ďalšej verzii možno bude nutné takéto metódy používať so zátvorkami. Napriek týmto nevýhodám považujem Ruby za výnimočne dobrý, pekný a jednoduchý programovací jazyk.

1Toto neplatí všade. Zatiaľ poznám tri jazyky, kde netreba ukončovať príkazy (s výnimkou ML jazykov): Ruby, JavaScript a Lua. V JavaScripte to bolo vyložene zlé – to, že pôsobil amatérskym a ľahko naučiteľným dojmom, znamenalo, že seriózni programátori ho nechali na pokoji a používali ho iba neskúsení. (www.crockford.com/javascript/javascript.html) Lua ku príkazom pristupovala iným, omnoho krajším, spôsobom ako zvyšné dva: miesto toho, aby občas koniec riadku znamenal aj koniec príkazu, gramatika v Lue bola postavená tak, aby umožňovala, nech je začiatok a koniec každého príkazu jednoznačne identifikovateľný. Je to síce škaredé, ale nie je problém napísať na jeden riadok aj viacero nijako neoddelených príkazov (napr. „a = 1 b = 2 c = 3” sú tri samostatné priradenia).