15 lutego 2013

Chcesz zasmakować Scali? Może Venkat pomoże?

Na forum Warszawa JUG Bartek Zdanowski wrzucił namiary na nagrania z JavaOne, na które zareagował Marcin Matuszak i zaproponował Scala Tricks Venkata Subramaniama.

Podchwyciłem pomysł i uruchomiłem nagranie. I tak się zrodziła mini-recenzja wystąpienia Venkata.

Kiedy włączyłem od razu poznałem głos Venkata. Przyjemny gość, którego miałem możliwość poznać osobiście podczas GeeCON, a może 33rd Degree i jakkolwiek może zmęczyć jego ciągły poziom zachwytu na wysokim poziomie, zostawiłem tę prezentację i...tak przeleciała mi godzina.

Nie trwało długo, kiedy zorientowałem się, że już widziałem tę prezentację, ale wtedy niewiele rozumiałem o Scali. Po pierwszej części warsztatów Grześka Balcerka i kilku artykułach i książce Functional Programming in Scala, było znacznie łatwiej, żeby nie napisać trywialnie. To może świadczyć, że prezentacja nie jest dla osób, które ze Scalą spędziły już kilka tygodni (chyba, że chcą nauczyć się, jak o niej mówić).

Czego nie znałem, to Venkat pokazał klasy anonimowe z new {} (około 20 minuty), więc pojawiło się natychmiast dobre uzasadnienie oglądania.

Na co zwróciłbym uwagę w kodzie Venkata, to użycie f zamiast acc przy 30 minucie, kiedy wprowadził pojęcie rekurencji ogonowej. acc jest
akumulatorem, który zbiera wynik częściowego obliczenia silni i sprawia, że rekurencja nie rozwali stosu. f to skrót dla funkcji i znajomość tego zapisu trochę mną wstrząsnęła, kiedy zobaczyłem f w sygnaturze, a bez wskazania, że to funkcja. Tutaj Venkat popełnił niewybaczalny błąd nazewniczy :-)

Również na uwagę zasługuje minuta 41, w której Venkat korzysta z przypisania element do krotki zamiast zrobić to już w momencie przypisania elementu mapy jako parametr do funkcji w map (przed =>). Po Clojure, zauważenie tzw. "destructuring assignment" (polecam Clojure: Destructuring) jest jakoś naturalne i doskonale wpasowuje się w jeszcze bardziej precyzyjne opisanie publicznego interfejsu z zachowaniem struktury danych, ale ze wskazaniem na jej wnętrze (zamiast rozbicia na pojedyncze elementy w sygnaturze funkcji).

"That's all I have. Thank you" :-)

Moja lista scalowa warta obejrzenia została właśnie zaktualizowana na YouTube. Dzięki Marcin za wskazanie!