15 września 2013

Scala + "n" i "a" = Scalania _3 za nami

0 komentarzy
Kolejne spotkanie scalania przechodzi do archiwum. Gratulacje dla wszystkich uczestników!

Na plus odnotowuję udział firmy Javart jako sponsora wydarzenia, co pozwoliło zagwarantować sporą porcję strawy dla ducha (w postaci Scali) i ciała (w postaci kanapek z Subway'a).

Na plus jest fakt, że się spotkaliśmy już trzeci raz!


Na plus odnotowuję również udział dwóch całkowicie mi nowych w tej roli prelegentów Andrzeja Jóźwika oraz Jacka Kołodziejskiego. Andrzej wspierał nas swoim przygotowaniem podczas rozwiazywania zadań, podczas gdy Jacek przeprowadził nas przez zasieki scalowe i wyjaśnił nowe konstrukcje w języku Scala, które od tej pory traktujemy jako znane. Więcej na stronie domowej ściągawek scalania.

Na plus odnotowuję utrzymanie zasady, aby kontynuować rozwiązywanie kolejnych zadań z listy S-99: Ninety-Nine Scala Problems. W ten sposób dotarliśmy do zadania P10. Run-length encoding of a list.


Na minus oznaczam słabe trzymanie się ram czasowych, co wręcz mnie irytowało. Cóż było robić, kiedy dyskusja merytoryczna i udział rozmówców znaczny, a należało ciąć, kiedy wychodziła znacząco poza określony czas?! Po komentarzach na meetupie dotyczącym tego spotkania widać wyraźnie, aby być mniej liberalny i ciąć, kiedy ciąć należy. To trzeba poprawić.


Kolejne spotkanie niebawem i liczę na niemniejszą frekwencję! Dyskusje na meetupie i podczas spotkania pokazują, że ten rodzaj spotkań spotkał się z akceptacją społeczności.

Kto przyjdzie na następne? Kto zechciałby wystąpić w roli wprowadzającego?

13 września 2013

Obiekt scala.List w języku Scala

0 komentarzy
Dzisiejsza porcja wiedzy dot. języka Scala to przegląd dostępnych metod w obiekcie (towarzyszącym) List - Obiekt scala.List w języku Scala.

Wpis trafił do zestawu ściągawek w projekcie Scalania.

Zachęcam do przesyłania zmian jako pull request do pliku 2013-09-13-scala-obiekt-list.md w repo.

Kolejny wpis będzie dotyczył już klasy List.

10 września 2013

Jutro Scalania 3, a dzisiaj wpis na blogu scalania o typach w Scali

1 komentarzy
Kontynuując ideę opisywania konstrukcji scalowych, które wykorzystujemy podczas Scalania na blogu projektu pojawił się kolejny wpis O typach w def(inicjach funkcji) w języku Scala cz. 2.

Ciekawym Twoich uwag, a dobrą drogą na ich przesłanie jest po prostu pull request ze zmianami (uwagami) do pliku 2013-09-10-scala-def-typy-2.md w repo. Z pomocą platformy GitHub można skorzystać z edytora przez przeglądarkę i nie potrzebna jest znajomość git'a (!)

Blogowanie w projekcie scalania z GitHub Pages stało się sposobem na poznanie GitHub, git, markdown i...Scali. Bosko! Czekam na PR'y.

08 września 2013

O Scali i Scalania na GitHub Pages - Jekyll w akcji

2 komentarzy
Trochę trwało zanim przekonałem się wreszcie, aby zarzucić pisanie ściągawek do Scali na potrzeby Scalania na tym blogu. Po prostu Blogger się do tego nie nadaje i zajmowało mi to zawsze zdecydowanie za dużo czasu. Na samą myśl o umieszczaniu kodu tutaj, odrzucało mnie. Taki też był powód, aby swego czasu mój angielskojęzyczny blog posadowić (zdala od Bloggera) na WordPressie jako http://blog.japila.pl.

W piątek mnie naszło i w weekend zrobiłem kolejny krok w mojej karierze blogera - przeniosłem część wpisów dotyczących spotkań scalania na GitHub. Moje wysiłki wokół tego projektu skierowane są na uzupełnieniu potrzebnej wiedzy do rozwiązywania zadań jako statyczne strony generowane z użyciem Jekyll i GitHub Pages.

I tak oto powstała dokumentacja do projektu scalania, która ma w zamierzeniu być zestawem ściąg z języka Scala. Z nimi rozwiązywanie zadań będzie łatwiejsze. Zapraszam do odwiedzenia http://jaceklaskowski.github.io/scalania/ i lektury dwóch notatek.

Zainteresowanych udziałem w tym (pod)projekcie zachęcam do rozwijania gałęzi gh-pages w projekcie scalania.

W ten oto sposób mamy miejsce, w którym społeczność scalowa w Polsce może rozbudowywać zestaw zadań scalowych (gałąź master) lub pisać do nich dokumentację (gałąź gh-pages). Pull requesty mile widziane.

Może kiedyś powstanie kompletny zestaw ćwiczeniowy?

Jeśli jesteś zainteresowana uruchomieniem scalania w swoim mieście, firmie, czy innej społeczności, napisz do mnie. Pewnie bylibyśmy się w stanie porozumieć.

07 września 2013

O def(iniowaniu funkcji) w języku programowania Scala ciąg dalszy

0 komentarzy
W Definiowanie metod w języku Scala - def przedstawiłem znaczenie słowa kluczowego def w języku Scala.

W imię przygotowań do Scalania 3 kontynuuję temat.

Wpisujemy bezpośrednio do Scala REPL definicję funkcji sumowania sum, które akceptuje dwa parametry typu Int.
scala> def sum(x: Int, y: Int) = x + y
sum: (x: Int, y: Int)Int
W odpowiedzi dostajemy nazwę nowej wartości sum i jej typ po dwukropku (x: Int, y: Int)Int, czyli funkcję dwóch parametrów x i y, której wynikiem jest wartość typu Int. Pamiętaj, że sum jest wartością niezmienną i jej wartość zawsze będzie typu (x: Int, y: Int)Int.

Wywołaj funkcję sum z dowolnymi parametrami (jednak wciąż z zakresu typu Int), np. sum(2, 4).
scala> sum(2,4)
res0: Int = 6
Wywołanie funkcji to podanie jej nazwy z określeniem wartości parametrów wejściowych. W wyniku otrzymujesz nazwę wyniku - res0, jej typ po dwukropku - Int - oraz wartość po znaku równości - 6. Proste? Dokładnie! Zero magii (zakładając, że nie przespałaś kilku lekcji matematyki, na których było o funkcjach i sposobach ich wywołania).

Spróbuj wykonać funkcję z parametrem innego typu, np. String - ciągiem znaków między apostrofami.
scala> sum("b", "b")
<console>:9: error: type mismatch;
 found   : String("b")
 required: Int
              sum("b", "b")
                  ^
Otrzymałaś błąd niezgodności typów - <console>:9: error: type mismatch;. Oczywiście należało się tego spodziewać, bo jedynym typem wejściowym funkcji sum jest Int. Int nie jest String.

Zadanie: Napisz definicję funkcji sum(a: String, b: String) i wykonaj ją dla kilku wybranych par ciągów, np. sum("m", "n"). Co miałoby być wynikiem?

05 września 2013

Scalania 3 - spotkania z językiem Scala w najbliższą środę, 11 września

0 komentarzy
Zapraszam na trzecie spotkanie z językiem Scala - Scalania 3, które odbędzie się w najbliższą środę, 11 września. Szczegóły organizacyjne znajdziesz na stronie spotkania http://scalania.pl.

Zmianą w stosunku do poprzedniej edycji będzie 15-minutowy przegląd dotychczas wykonanych zadań, których celem jest przypomnienie konstrukcji języka Scala i ich użycie w zadaniach. Ten krok ma skrócić dystans między nowymi uczestnikami spotkania, osobami, które nie były na poprzednich i wykonywały zadania samodzielnie a stałymi bywalcami. Motywem przewodnim będzie praca z projektem scalania z GitHuba, co powinno dodatkowo zachęcić uczestników do jego aktywnego użycia na potrzeby własnego samorozwoju (już pierwszy pull request został zatwierdzony - WIELKIE dzięki Rafał!)

Nie mogę się doczekać, aby sprawdzić, jak wiele się nauczyliśmy w temacie wspólnych scalań przez ostatnie dwie edycje. Wydaje się, że już niewiele można poprawić, a po prostu brakuje nam jedynie obycia z tego typu imprezami. Nie może Cię zabraknąć.

Zapraszam!

01 września 2013

Definiowanie metod w języku Scala - def

0 komentarzy
Podczas ostatniego scalania #2 zgodnie określiliśmy potrzebę utrzymywania wiedzy o języku Scala, co powinno pozwolić nam utrzymać tempo (kontynuować rozwiązywanie kolejnych zadań wspólnie) bez obawy, że nowe osoby w temacie (spotkań czy samego języka) nie zostaną na bocznym torze. Większości osób, z którymi dyskutuję odnośnie scalań, leży na sercu angażowanie coraz większej liczby osób do naszych spotkań przy jednoczesnym "karczowaniu" kolejnych połaci wiedzy scalowej. Pojawiają się pomysły daleko sięgające poza znajomość języka, np. poznanie projektów scalatron lub Play Framework i do tego konieczne jest utrzymanie tempa naszej wspólnej nauki.

Zatem do dzieła!

Ten wpis jest kontynuacją pomysłu - w założeniu powinien pomóc w nauce języka programowania Scala, aby wizyta na kolejnym scalania nie wiązała się z koniecznością udziału w poprzednich. Pozostaje jedynie przeczytać materiał szkoleniowy i rozwiązać poprzednie zadania, aby z podniesioną głową móc podjąć się kolejnych.

Podsumowanie scalania 2 znajdziesz na moim blogu w Scalowanie na Scalaniach #2 = scalowych spotkaniach po godzinach. Strona z materiałem ze Scali, który omówiliśmy jest na wiki projektu scalania - Scalania 2.

Dzisiaj słówko kluczowe def, które służy do definiowania metod w Scali.

Specyfikacja The Scala Language Specification Version 2.8 omawia def w rozdziale 4.6 Function Declarations and Definitions. Poniżej wersja skrócona.

Aż do odwołania ten i kolejne wpisy zakładają, że funkcja i metoda są zamienne (co nie jest prawdą, ale wiedza wykracza poza materiał wprowadzający).

Definiowanie funkcji w Scali ma postać def nazwa-funkcji(parametry-funkcji): typ-wyniku = ciało-funkcji. Poniżej kilka definicji funkcji.
def sum(x: Int, y: Int) = x + y

def f(xs: List[Int]) = xs.size

def isPalindrome(ls: List[Int]): Boolean = ls == ls.reverse
Nazwa funkcji nazwa-funkcji jest ciągiem znaków, który (w jednej z trzech możliwych form) rozpoczyna się literą, po której występuje dowolny ciąg znaków - liter i cyfr. Na nasze potrzeby pozostaniemy przy tej definicji.

Parametry funkcji parametry-funkcji występują w nawiasach okrągłych i są listą elementów identyfikator: typ lub identyfikator: typ = wartość-domyślna oddzielonych przecinkiem.

Typ wyniku funkcji typ-wyniku nie jest koniecznym elementem sygnatury i najczęściej jest pomijany. Wyjątkiem jest funkcja rekurencyjna, czyli taka, która wywołuje samą siebie.

Ciałem funkcji ciało-funkcji jest wyrażenie, które opisuje wynik funkcji. Wyrażenie (ang. expression) zawsze zwraca wartość i jest jej opisem.

Tyle wystarczy na początkowe zadania. Gdybym się mylił, proszę o wskazanie braków i/lub zadawanie pytań uzupełniających.

Uczestników scalania 3 uprasza się o wykonanie zadań 1-6. Proszę odpalić Scala REPL i napisać ciała funkcji p1 do p6. Więcej w README projektu scalania.