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