Siedząc dzisiaj na wykopie, natrafiłem na wątek, gdzie pewien Pan chciał wyrazić swoje niezadowolenie z racji tego, że ten link już był. Zrobił to tak:

#include <iostream>
using namespace std;
int main() {
int l;
for (l=1;l<1000;++l) {
cout <<"Było!! "<<endl;
}
return 0;
} 

Pomysł fajny, nie powiem. Ale można prościej!

1000.times { p "Było!" }

Można też tak (wersja w PHP – autor LostHighway):

function Go($i) { if($i) return Go($i-1).' Było!!'; }
echo Go(1000); 

Uważniejsi zauważą że powyższy kod, jest kodem bezpętlowym. 1000krotne wywołanie następuje dzięki rekurencji.

Nie byłbym sobą, gdybym nie postanowił napisać tego w jednej linijce w Rubym :)

lambda {|a, x| "Bylo! #{a.call(a, x-1)}" if x > 0}.tap{ |r| p r.call(r, 1000)}

Działanie tego kodu jest bardzo proste.

Najpierw tworzymy funkcję anonimową (to co w klamerkach po lambda). Funkcja ta jest funkcją rekurencyjną, która przyjmuje dwa parametry: kod do wykonania (w postaci obiektu typu Proc) oraz licznik.

Następnie korzystam z metody tap która wywołuje taką funkcję anonimową, dzięki czemu mogę ją odpalić :)

Przykład ten doskonale ilustruje zarówno to jak Ruby jest zwięzły, jak i możliwości korzystania z funkcji anonimowych.