Wczoraj przy pomocy (dostępnej legalnie za darmo) książki Programming Ruby próbowałem poznać podstawy tego języka. Chociaż niespójność i nieklarowność składni nadal mnie drażnią, całkiem ciekawa wydaje się koncepcja code blocks. Jest to twór któremu najbliżej chyba do funkcji lambda (anonimowych), ale który jednak nieco się różni. Można to uznać za funkcję lambda która nie jest uruchamiana przez wywołanie lecz przez przekazanie sterowania, i która nie ma notacji jak funkcja. Przekazując code block do funkcji, można go wywołać instrukcją
yieldMożna też przekazać takiemu blokowi parametr. Można to oczywiście wykorzystywać do różnych celów, ale najciekawsze są konstrukcje zastępujące klasyczne for.
Najlepiej chyba ilustruje to przykład z książki. Co do notacji, blok jest ograniczony przez {}, pomiędzy nawiasami zawiera się kod do wykonania oraz opcjonalnie lista parametrów ograniczona przez | |.
5.times { print "*" }daje wydruk: *****3456abcde.
3.upto(6) {|i| print i }
('a'..'e').each {|char| print char }
Prawda że ciekawa i zwięzła notacja? Wszystko dzięki code blocks oraz pełnej obiektowości (czyli liczby też są obiektami i mają swoje metody). Chyba czas zagłębić się w lekturze dalszej części książki. Swoją drogą, napisana jest przez autorów Pragmatic Programmer, bardzo fajnego tomu o inżynierii oprogramowania.