Hiljuti ehk mõned kuud tagasi sai loetud Joel Spolsky poolt koostatud raamatut “The Best Software Writing I: Selected and Introduced by Joel Spolsky”. Seal oli päris huvitav kirjatükk Ruby õppimisest. Pärast paari lehekülge nõutsid koomiksikangelased, et Ruby koodi peab lugema kõva häälega:

5.times { print "Odelay!" }

exit unless "restaurant".include? "aura"

['toast', 'cheese', 'wine'].each { |food| print food.capitalize }


Lugedes kõlavad nad päris kenasti. Kuna olen peamiselt C# kirjutaja, siis tekkis mõte veidi eksperimenteerida ning vaadata, kas sellist tulemust saab C# järgi teha.

string plate = "cheese, potatoes, pasta";

5.Times( I.Say( "Hello!" ) );

I.Say( "Good bye!" ).Unless( "restaurant".Contains("aura") );
I.Say( "What a nice place!" ).When( "restaurant".Contains("aura") );
I.Say( "I'm hungry." ).Now();

new[] { "toast", "cheese", "wine" }
    .Each( food =>
        I.Yell( "Where is " + food ).Unless( plate.Contains(food) )
    );

I.Say( "This plate is empty." ).And( I.Ask( "When I'll get some food" ) )
    .When( plate.IsEmpty() );

//Output:
//Hello!
//Hello!
//Hello!
//Hello!
//Hello!
//What a nice place!
//I'm hungry
//WHERE IS TOAST
//WHERE IS WINE

Loetavus on päris kena ning koodi väga palju kirjutama ka ei pidanud selleks. Ainuke probleem, mis praegu pähe kerkib, on jõudlus. See kood arvatavsti ei toimi nii kiiresti, kuid räägitakse ka et Ruby väga nobe pole =D Samas DSL-i tegemiseks oleks need võtted ilmselt küllaltki arukad.

Lähiajal üritan lahti seletada, kuidas sellist tulemust C# 3.0 võimalustega saavutada saab.

Loe veel sarnastel teemadel:

  • Share/Bookmark

KATEGOORIAD » Arendus

SILDID » , , ,

Lisa kommentaar

  • * Kuvatakse kommentaari juures
  • * Ei publitseerita