Ruby is heet, Rails loopt als een trein

De webontwikkelaars onder ons zal het waarschijnlijk niet ontgaan zijn: de taal Ruby is erg hip en Ruby on Rails, het meest populaire Ruby web framework, krijgt extreem veel aandacht in de web wereld. En dit is, vind ik, niet ten onrechte.

Er is al zoveel geschreven over Ruby on Rails dat ik dit alles hier niet nog een keer ga herhalen. Wel wil ik mensen die niet (zo) bekend zijn met deze technologiën hier wat pointers bieden en mogelijk een tikje nieuwsgierig maken.

Mijn zomergriepje van afgelopen week had dan wel als voordeel dat ik eens toe kwam aan het inlezen in deze materie. Programming Ruby (the PickAxe) en Agile Web Development with Rails zijn erg leuke en goed geschreven boeken waarvan met name de laatste de exemplaren als warme broodjes van Amazon’s virtuele toonbank rollen.

Ruby is een object georiënteerde scripting taal die het beste van Perl en Python in zich heeft (volgens de maker (Matz) more powerful than Perl and more object-oriented than Python) en daarnaast nog vele handige snufjes biedt. Het is vooral ook een erg leuke taal om in te programmeren. Een paar kenmerken van Ruby zijn:

  • Het is erg object georiënteerd. Ook zaken als primitieve types en reguliere expressies zijn objecten. Elke functie (ook ‘+’, ‘==’ etc) is een methode (die je kunt overschrijven als je wil).
  • Het heeft erg krachtige ingebouwde ondersteuning voor reguliere expressies.
  • Code blocks kunnen meegegeven worden als parameters aan functies. Deze blocks kunnen closures zijn. En dit is heel mooi.
  • In Ruby gebruik je relatief weinig traditionele loop constructies. Daarentegen gebruik je veel meer containers, blocks en iterators. Een traditionele “for” loop heb je vrijwel niet nodig in Ruby. (Sterker nog, de traditionele C-style “for” loop bestaat niet eens in Ruby.)
  • Code voelt bijzonder natuurlijk aan en je hebt weinig code nodig om complexe zaken te doen. The principle of least surprise indeed.

Zoals vrijwel alle script talen gebruikt Ruby dynamic typing; in tegenstelling tot talen met een static type system zoals Java en C#. Een variabele of argument definieer je zonder het type aan te geven. Pas als je je programma draait kom je (de interpreter) achter eventuele typing problemen. In de PickAxe wordt een sterke case gemaakt dat dit in de praktijk helemaal geen probleem is. Ten eerste heeft ook een taal als Java nog steeds type uncertainty. Anders had Java ook geen ClassCastException nodig gehad. Static typing levert niet per se meer betrouwbare code op. In de praktijk blijkt dat een Ruby programma minstens zo betrouwbaar kan zijn als bijvoorbeeld een Java programma. Type mismatches komen in de praktijk gewoon erg zelden voor. Dit komt o.a. door de beperkte scope van de meeste variabelen en door het feit dat de stijl van codereren in Ruby type mismatches tegen gaat. In plaats van een object te checken op een bepaalde class, subclass of interface zoals je in Java veelal doet wordt in Ruby zogenaamd Duck Typing gebruikt. In Ruby ga je niet uit van wat een object is (het “type”), maar van wat het kan.

Ruby on Rails is een bijzonder populair Ruby web framework, ontwikkeld door David Heinemeier Hansson tijdens zijn werk aan de producten Basecamp, Backpack, and Ta-da List van het bedrijf 37 signals. Tijdens de Reboot7 conferentie in Kopenhagen waar wij van open.info.nl goed vertegenwoordigd waren hield David een aanstekelijk praatje over Rails.

Rails is een web framework waarin het Model-View-Controller pattern ingebakken zit. Ook bevat het een object-relational mapping mechanisme wat het uitermate geschikt maakt voor database-backed web applicaties. Rails bevat ingebakken ondersteuning voor AJAX en je ziet ook dat de meeste Rails applicaties hier dankbaar gebruik van maken. Een aantal van de belangrijkste uitgangspunten van Rails zijn:

  • Don’t repeat yourself. Het framework haalt je zoveel uit handen dat je al je tijd kunt stoppen in het oplossen van het echte probleem, zonder dat je daarvoor zaken dubbel hoeft te doen.
  • Convention over configuration. 90% van de applicaties lossen bepaalde problemen op dezelfde manier op. Deze 90% is ingebakken in Rails als een set aan conventies waardoor configuratie alleen voor de overige 10% nodig is.
  • Works out of the box. Na installatie van Rails heb je al een draaiende (kale) applicatie. Je werkt altijd aan een live werkend systeem. Compilatie is niet nodig; een verandering zie je direct in je applicatie terug.

De grootste belofte van Rails is dat het de productiviteit drastisch verhoogt in vergelijking tot “zwaardere” technologiën als J2EE en .NET. Van wat ik tot dusver gezien heb lijkt het deze “agile” belofte zeker waar te kunnen maken. Het web is ook vol van Rails succcesverhalen zoals Don’t look at Rails if you have to do .NET. Zoals ook al eerder door Tom genoemd in zijn post “A List Apart leeft weer” is de vernieuwde A List Apart nu ook gebouwd in Rails.

Vergelijkingen met andere server-side web technologiën, zoals “Ruby on Rails and J2EE technical comparison“, zijn vaak moeilijk te maken en niet altijd even zinvol maar het is nu al duidelijk dat Rails een behoorlijke plek zal veroveren in deze wereld. Deze technologiën maken zich dan ook nu al zorgen hierover. In het artikel van Jason Hunter getiteld “The Innovator’s Dilemma: It’s Happening to Java” valt te lezen:

Ruby on Rails today looks poised to eat Java’s mindshare on the web tier.

Een heel aardig tutorial over Rails kun je vinden op O’Reilly’s OnLamp site: Rolling with Ruby on Rails.

Tags: , , ,

7 Reacties op “Ruby is heet, Rails loopt als een trein”

  1. Sander zegt:

    Cool.

    Waarom zou je “+” willen overschrijven? :)

  2. Edgar zegt:

    Met name om je eigen class optelbaar te maken. Dit valt samen met Duck Typing. Er wordt over het algemeen behoorlijk algemene code geschreven in Ruby die geen rekening houdt met een type (‘class’) van een object maar in plaats daarvan met wat het object kan (opgeteld worden bijvoorbeeld). Voor statically styped talen geldt dit natuurlijk ook voor een groot deel. In Java overschrijf je in je eigen class bijvoorbeeld behoorlijk vaak de .equals methode zodat jij en met name anderen (collections enzo) instanties (objecten) van je class kunnen vergelijken.

  3. Edgar zegt:

    De oude versie van het Programming Ruby boek (de Pick Axe) staat trouwens online: Programming Ruby, The Pragmatic Programmer’s Guide.

  4. Edgar zegt:

    Ik vind net een erg leuk artikel getiteld “Freedom languages” over hippe scripting talen (met name Ruby) en dan met name over het weakly- versus strongly-typed debat.

    De schrijver noemt talen als Ruby “freedom languages” in tegenstelling tot de “safety languages” zoals Java, C en C# omdat het volgens hem het verschil tussen deze twee stromingen voornamelijk een philosofische is. En ik denk dat hij een goed punt heeft.

    In ieder geval voelt Ruby bijzonder vrij aan. :-)

  5. Tom zegt:

    Interessant artikel!

  6. Chris zegt:

    Sander: + overschrijven is erg handig. Je kan bijvoorbeeld een class Expression maken, waarbij je bijvoorbeeld zoiets kan dan

    foo = Expression.new(“x”)
    bar = Expression.new(“2y”)

    result = foo * bar

    En je kan er voor zorgen dat er dan als result “2xy” uitkomt. Het mooie is dus dat je, door dat soort methoden te overschrijven heel makkelijk mooie code kan schrijven. Als je die methoden een keer af hebt kan je dus heel leesbare code maken.

    Ook kan je bijvoorbeeld [] overschrijven. Dit kan in sommige gevallen erg handig zijn.

  7. Edgar zegt:

    Nog eentje dan: een aardige review van het Ruby PickAxe boek, en een reactie daar weer op waarin met name het nut van closures wordt uitgelegd.

Laat een reactie achter

Je moet ingelogd zijn om een reactie te plaatsen.