Pontosan 4 hónap 7 napja történt, amikoris levelet írtam egy barátomnak. És mielőtt még ténylegesen belevetném magam a cikkek írásába, azt a levelet még bepréselem ide:
azt hiszem most lettem végképp szerelmes a ruby-ba.
volt egy példa, aminél egy tömb elemeit egy adott feltétel szerint leválogatták, és utána a leválogatott elemek szummáját vették:
my_array.find_all{|item| item % 3 == 0 }.inject(0){|sum,item| sum + item }
nézegettem hogy milyen szép is ez aztán hogy haha, mennyivel bonyolultabb ezt megoldani php-ban. aztán filóztam és rájöttem hogy nem.
php-ban kb így nézne ki:
$sum=0;
foreach($my_array as $item) {
if ($item%3==0) {
$sum+=$item;
}
}
print $sum;
ami zavart az az, hogy rubynál kétszer megyünk végig a tömbön (egyszer az egészen, utána a leválogatotton)
elkezdtem filózni hogy hogyan lehetne szebben megoldani ruby-ban.
azt találtam ki hogy egy olyan szummázó metódust írok, ami egy adott feltétel teljesülésekor szummázza a többihez a tömb adott elemét.
és most jön a lényeg, hogy ez milyen szép ruby-ban. ugyanis az alap típusokat kezelő osztályok is nyitottak, így bármikor módosíthatod vagy bővítheted őket. nincs más hátra mint csinálni egy plusz metódust az Array class-ba ami egy kapott kód blokkot ( { és } határolt kód) használ fel a szummázó feltételben.
class Array
def sumexp
sum=0
each {|x| if (yield x) then sum+=x end}
sum
end
end
használata pedig: [1,2,3,4,5,6].sumexp {|x| x%3==0 }
hát nem gyönyörű?!
(azon filózok hogy kellene egy ruby-val foglalkozó blogot írnom, kezdő bejegyzés pedig lehetne ez )
Hát emígyen történt…