20 kwietnia 2012

Scala w 49. dzień do Euro 2012


Wczoraj na forum Warszawa JUG zaproponowałem pewną zabawę skojarzoną z upływającym czasem do Euro 2012 - 50 dni do Euro 2012 - idealnie, aby zaczać naukę.... Celem zabawy jest "nauki technologii, którą zwykle mianował TODO."

Mamy 50 dni (wczoraj) i ciekawie będzie móc zasiąść przed ekranem telewizora wiedząc, że przygotowania do tej pozycji były związane z nauką czegoś nowego. Możnaby wtedy świętować nie tylko rozpoczęcie mistrzostw, ale ukończenie rozpoznania czegoś, co warte było 50 dni.

Ja postawiłem na funkcyjne oblicze języka programowania Scala. Niech to będzie mój udział w ogólnopolskim wyścigu ku Euro 2012. Piłka mnie nie kręci, ale Scala już tak. Mam nieodparte wrażenie, że zrozumienie programowania funkcyjnego w Scali pomoże mi znacznie podnieść swój warsztat i w Clojure.

Dzisiaj zacząłem skromnie od pobrania dystrybucji języka Scala 2.10.0-M2 i po przejrzeniu Chapter 2 of Programming in Scala, First Edition "First Steps in Scala" uruchomieniu środowiska scala.
$ scala
Welcome to Scala version 2.10.0-M2 (OpenJDK 64-Bit Server VM, Java 1.7.0-jdk7u4-b19).
Type in expressions to have them evaluated.
Type :help for more information.

scala> println("Hello")
Hello
Obejrzałem prezentację Guerrilla Guide to Pure Functional Programming i popróbowałem się z kilkoma wyrażeniami ze slajdów. Można żyć z tym systemem typów.

Teraz nie pozostaje mi nic innego jak rozpocząć projekt. Chciałbym stworzyć coś w czystej Scali, bez konieczności poznawania dodatkowych bibliotek, czy szkieletów aplikacyjnych i mam nieodparte wrażenie, że najbardziej odpowiednia byłaby jakaś aplikacja desktopowa. Boję się Lifta jako sposobu na wejście w Scalę i stąd te poszukiwania.

3 komentarze:

  1. Jacek,
    Co do systemu typów to pytanie, czy można żyć bez niego? (np. w takim Clojure…)
    Czy dobrze rozumiem że szukasz tematu na aplikację? Proponuję program do grania z komputerem w jakąś grę logiczną. Warcaby? Reversi? Tryk trak (backgammon)? Taka gra stawia parę funkcyjnych zagadnień do rozwiązania, na przykład, czy w danym stanie gry dany ruch jest prawidłowy, czy gra się skończyła albo jaki zrobić następny ruch? A przy okazji możesz zrobić interfejs użytkownika, zapis stanu gry (IO) i może jakieś inne dodatki. A w mojej książce możesz podejrzeć program do szachów. Grzegorz Balcerek

    OdpowiedzUsuń
    Odpowiedzi
    1. Nie mam zdania na temat typów - jeśli miałby być, to wolałbym, aby w znacznej części następowała inferencja typów i tylko tam, gdzie niezbędne było konieczne określenie ich. Podoba mi się podejście Clojure i F#. W Scali jest zbyt nahalne, np. definicji funkcji sumującej, np.

      def fplus(x:Int, y:Int): Int = x+y

      mogłoby założyć, że mam do czynienia z dodawaniem intów, jeśli nie podałem tego jawnie (jak w F# czy Clojure 1.4).

      Usuń
    2. Czy chciałbyś pisać def fplus(x,y)=x+y i wymagać od kompilatora odgadnięcia, że chodzi o typ Int?
      A czemu nie Long albo String na przykład?
      Czy Int miałby być traktowany specjalnie jakoś przez język?

      Usuń