Spotkanie 19.11.2009 - Łukasz Kuczera: Scala

14 views
Skip to first unread message

Jakub Neumann

unread,
Nov 9, 2009, 3:47:26 AM11/9/09
to Trójmiasto JUG
W imieniu JUG Trójmiasto, zapraszam na kolejne spotkanie, 19.11.2009,
godz. 17.30, zwyczajowe miejsce spotkań: aula 2 Wydziału MFI UG, ul.
Wita Stwosza 57, Gdańsk. O Scali opowiadał będzie Łukasz Kuczera.
Oto jego streszczenie:

"Na prezentacji chciałbym, krótko przedstawić historię języka,
opowiedzieć o ciekawych rzeczach w Scali, a następnie opisać je na
przykładach kodu.
Na koniec mam nadzieję zawiązać dyskusję na temat potencjału
wykorzystania Scali na tzw. "produkcji" i zagrożeniach z tym
związanych.

Lista tematów jakie będę starał się opisać:

1. Hierarchia dziedziczenia.
2. Inferencja typów.
3. Abstrakcyjne struktury kontrolne i przeciążanie operatorów.
4. Pattern matching
5. Obiekty mutowalne vs. niemutowalne.
6. Wyrażenia for (nie są to 'zwykłe' pętle).
7. Implicit conversions.
8. Generics
9. Listy
10. Współbieżność - biblioteka aktorów.

Jak starczy czasu to może coś z tych tematów:

* Natywne wsparcie dla XML
* Anotacje
* Funkcje wyższych rzędów i domknięcia
* Traits
* Klasy abstrakcyjne - nadpisywanie metod i pól."

Wstęp oczywiście wolny! Zapraszamy
Kuba

l.kuczera

unread,
Nov 18, 2009, 3:30:45 PM11/18/09
to Trójmiasto JUG
Jeżeli ktoś chciałby zakosztować programowania w Scali osobiście i ma
przenośny komputer to niech go zabierze ze sobą. Całe środowisko będę
miał dostępne na pendrive.

Damian Nowak

unread,
Nov 18, 2009, 3:55:26 PM11/18/09
to jug-tro...@googlegroups.com
Witam,


> Jeżeli ktoś chciałby zakosztować programowania w Scali osobiście i ma
> przenośny komputer to niech go zabierze ze sobą. Całe środowisko będę
> miał dostępne na pendrive.

Fajnie by było, gdybyś już teraz powiedział (tak w skrócie), co będzie
potrzebne. Dzięki temu można się już teraz przygotować, oswoić z
narzędziem, itp. - bo w trakcie spotkania może się okazać, że każdy ma
z czymś problem, coś nie działa i zamiast zająć się tym, co trzeba,
zajmujemy się ustawianiem środowiska. ;)

--
Pozdrawiam serdecznie.

Damian Nowak
os. Witosa 6c/4
83-140 Gniew
tel. 601 346 104

l.kuczera

unread,
Nov 19, 2009, 6:40:38 AM11/19/09
to Trójmiasto JUG
Ok jeżeli chcesz przygotować się wcześniej to:
1. Java (conajmniej 1.5)
2. Scala -> http://www.scala-lang.org/downloads - tutaj ściągasz scala-
installer i instalujesz lub odpowiednią wersję (win/lin) i ustawiasz
zmienne środowiskowe SCALA_HOME i PATH na odpowiednio katalog gdzie
rozpakowałeś scalę i katalog bin w SCALA_HOME
3. Eclipse for Java Developers ->
http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/SR1/eclipse-java-galileo-SR1-win32.zip&url=http://ftp.man.poznan.pl/eclipse/technology/epp/downloads/release/galileo/SR1/eclipse-java-galileo-SR1-win32.zip&mirror_id=488

4. Scala-IDE (wtyczka do eclipse) - http://www.scala-lang.org/node/94
po zainstalowaniu musisz jeszcze ustawić odpowiednio JVM'a w
eclipse.ini

Jeżeli preferujesz inne ide to masz do wyboru:
Netbeans lub IntelliJ IDEA - niestety nie próbowałem jeszcze, może
niebawem uda się coś w IDEI zrobić, a netbeans'a też bardzo dawno nie
używałem, może dam mu szansę ;)

l.kuczera

unread,
Nov 19, 2009, 3:35:42 PM11/19/09
to Trójmiasto JUG
Jacek Arent zadał pytanie o tworzenie nowych klas Rational w kodzie
bez użycia new. Początkowo myślałem że chodzi o coś takiego: "1/3" to
może być trudne, 1/3 też nie wyjdzie (jest już taka metoda dla Int)
ale np. val third = 1-/3; powinno się udać. Kod poniżej
(z głowy piszę więc może się nie kompilować)

Ratinonal.scala
class Rational(val: num, val: denom) {
// ... kod z przykładu wrzucę go później dla jasności
// konstruktor dodatkowy, który bierze jeden parametr
def this(num: Int) = new Rational(num,1);
def -/(x: Int) = new Rational(this.num, x)
}

// implicit conversion z Int do Rational
// musi być zdefiniowane bądź zaimportowane
// tam gdzie chcemy wykorzystywać nową składnię
implicit def intToRational(x: Int) = new Rational(x)


Po tych zabiegach powinno dać się tworzyć nowe instancje Rational w
taki oto sposób:

val third: Rational = 1-/3;

Co się dzieje za kulisami. Kompilator próbuje wywołać metodę -/ na Int
z argumentem typu Int.

(1).-/(3)

Nie odnajduje tej metody, więc szuka w konwersjach, odnajduje że ma
konwersję do Rational który definiuje metodę o takiej sygnaturze i
mamy coś takiego:

(intToRational(1)).-/(3)

czyli otrzymujemy coś ala:

(new Rational(1,1)).-/(3) które zwraca new Rational(1,3);

val third = 1-/3

Operator -/ jest mało intuicyjny moża zdefiniować sobie metodę o
nazwie np. przez:
def przez(x: Int) = {
require(x != 0); // zapomniałem o tym w poprzedniej metodzie
new Rational(this.nom, x)
}


I tworzyć nowe ułamki w ten sposób:

val jednaTrzecia = 1 przez 3;
val trzyPiąte = 3 przez 5;

Reply all
Reply to author
Forward
0 new messages