Portál AbcLinuxu, 30. dubna 2025 15:26
Tak jsem si řekl, že zkusím programování v nějakém tom „skriptovacím“, opravdu vysokoúrovňovém jazyce, což mi přinese obrovskou produktivitu a pravděpodobně i sex-appeal. Už nějaký čas jsem chtěl prozkoušet Python ale řekl jsem si, že půjdu se současným hype a zkusím Ruby.
Na první pohled se mi Ruby moc líbí. Syntaxe je hezká, opravdu všechno je objekt. Nikdy jsem nepochopil, proč se délka seznamu v Pythonu získá jako len(s)
a nikoliv s.len()
. V Ruby jsou všechno objekty, kterým se posílají zprávy. Takže s.size
. Je to konzistentní a elegantní.
Velmi pěkná je konvence s otazníky a vykřičníky v názvech metod. Metody často mají dvě verze, jednu s vykřičníkem na konci a druhou bez (například downcase
a downcase!
pro String
). Vykřičníková verze změní vnitřní stav objektu. Verze bez vykřičníku vrátí modifikovaný objekt, ale původní objekt zůstane nezměněn. Metody končící otazníkem vracejí booleovskou hodnotu. Tyto konvence zlepšují čitelnost kódu.
Asi nejzásadnější vlastností jsou uzávěry (closures). Je to takové posílání bloků kódu jako parametr. Moc se mi to líbí a skoro jsem se na tom stal závislý. Dají se s tím dělat roztodivná kouzla ale praktický důsledek je ten, že zapomenete psát for-cykly. Výpis prvků seznamu vypadá následovně:
["ahoj", "nazdar", "blekota"].each {|s| puts s}
Mixování modulů do tříd se mi taky líbí. I když vícenásobná dědičnost z Pythonu je asi taky v pohodě (na rozdíl od C++).
Naprosto úchvatná je pružnost jazyka. Například aspektově orientované programování. Dolepit AOP například do Javy znamená buď nějaký preprocesing zdrojáku nebo postprocesing bajtkódu. V Ruby, kde můžete za běhu přejmenovávat metody (a na jejich místo vkládat svoje AOP interceptory), tohle problém není.
Přestože Ruby je z Japonska, jazyk nemá nějakou pořádnou podporu unicode. V podstatě jediná podpora je ta, že stringy můžou být kódované UTF-8 a nehrozí jim poškození. To vlastně není ani není problém, protože jazyky s podporou Unicode jako Java/C# používají kódování UTF-16 a tak funkce pro vrácení délky řetězce obecně nemusí vrátit počet znaků (viz muj starší post o unicode). IMHO lepší takhle mizerná leč konzistentní podpora v Ruby než dva typy řetězců (obyč a unicode) v Pythonu.
Díky přizpůsobivosti jazyka není problém dodat třídě String příslušnou funkcionalitu. Je několik projektů, které navážejí do jazyka Unicode z knihovny ICU, ale bohužel není žádné hotové, standardní a obecně používané řešení.
Vlákna jsou asi největší (a pro mě osobně nepřekonatelná) slabina Ruby. Ruby nepoužívá vlákna operačního systému (jako posix threads), ale má svoji vlastní implementaci. I když interpret vlákna pravidelně střídá a vytváří tak jakous takous preempci, vše běží v jednom systémovém vlákně. V době nástupu vícejádrových procesorů je to nešťastné. Ve webových aplikacích se to dá obejít puštěním více procesů přes (fast)CGI, jenže já chci psát i výkonné desktopové aplikace.
Musím říct, že to byla moc příjemná zkušenost. Programuje se v tom opravdu hezky a zdá se, že opravdu rychleji než třeba v Javě. Samozřejmě jsem v tom nepsal nic velkého (a díky těm zpropadeným vláknům ani nebudu) takže těžko říct, jestli se v tom něco opravdu velkého napsat dá.
Jdu vyzkoušet Groovy
Tiskni
Sdílej:
„Přestože Ruby je z Japonska, jazyk nemá nějakou pořádnou podporu unicode.“Ne „přestože“, ale „protože“. Japonci mají s Unicode docela problémy. Sice nejsou tak velcí, aby s tím trendem něco, zmohli, ale koušou, potvůrky...
["a", "b", "c"].each {|s| puts s}
“, o kterých se zmiňuješ, se mi moc nelíbí, a dělá mi problém to vůbec přečíst a zorientovat se v tom. I když je pravda, že až donedávna jsem nevěděl, co ta konstrukce vlastně dělá. Raději si tam dám for
a rozhodím to na dva řádky, než luštit hromadu závorek a |kolejniček|.
Jak píšeš v druhém odstavci o občas menší objektovosti Pythonu (len(s)
), také mě to zezačátku překvapilo. Osobně a skromně si myslím, že je to možná kvůli rychlosti. Jinak fajnovej blogpost, tento typ článků bych na netu viděl rád častěji.
>>> s = 'abc'
>>> s.__len__()
3
chmod 111
root /devel/sh # chmod 111 ie6 root /devel/sh # ./ie6a IE6 nastartoval
* dev-php5/php-qt Available versions: !0.0.2 Installed: none Homepage: http://php-qt.berlios.de Description: PHP 5 bindings for the Qt4 framework.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.