This blog is no longer being maintained, please go to The missing link of Agile instead

Thursday, June 05, 2008

Scala Frenzy

W nocy z wtorku na środę miałem plan, aby wreszcie podgonić zaległości z projektu (Projektowanie Systemów Informatycznych). Niestety.. o 18 'na chwilkę' włączyłem projekt w Scali i na tym skończyły się moje ambitne plany :). W rezultacie tejże nocy powstała mała biblioteka do wypełniania danymi testowymi bazy danych, z której stworzeniem nosiłem się od pewnego czasu.

Jest to mój pierwszy projekt w Scali i muszę powiedzieć, że tkwi w tym języku niewiarygodny potencjał. Całość powstała bez ani jednej linijki kodu testowego - co samo w sobie nie jest powodem do dumy :P - ale dzięki temu udało mi się docenić łatwość z jaką można tworzyć w Scali bezbłędny (!) wysokiej jakości kod. Jest coś w tym języku (mój wykładowca dr Spławski twierdził, że to cecha funkcyjnych językow w ogóle), że jeśli już uda się program skompilować to z dużym prawdopodobieństwem będzie on działał poprawnie. Co jak co, ale trudno mi taką opinię wyrazić o Javie ;)

Poniżej zamieszczam bodaj najciekawszy fragment biblioteki, pokazujący piękno Scali.

def newTuple = { table.columns.transform { (k, v) => v.generateValue } }
var tuple = newTuple;

while (
constraintFunctions.
map ( f => f(list, tuple) ).
reduceLeft ( _ || _ ))
{ tuple = newTuple; }

Celem powyższego jest generowanie krotek tak długo, aż wszystkie podane przez użytkownika funkcje sprawdzające czy naruszono ograniczenie zwrócą 'fałsz'. Może być w tym jakieś szaleństwo (czy narcyzm ;] ), ale nie mogę się napatrzeć na powyższy fragment kodu, który niemalże zabija prostotą.

Po całej nocy kodowania udało mi się stworzyć stosunkowo spójną całość. Przerzuciłem istniejący kod generujący dane testowe z wyżej wspomnianego projektu do własnego rozwiązania, dodając kilka funkcjonalności których nie mogłem uzyskać we wcześniej używanym narzędziu. Efekt okazał się na tyle zadowolający, że postanowiłem udostępnić narzędzie jako Open Source i dalej rozbudowywać jego możliwości :)

Projekt jest dostępny na SourceForge:
http://sourceforge.net/projects/dage/.

No comments:

Post a Comment