Co w scali sprawia największą trudność

65 views
Skip to first unread message

Artur Karazniewicz

unread,
Nov 27, 2010, 9:09:29 AM11/27/10
to Warsaw Area Scala Enthusiasts Group
Od jakiegoś czasu noszę się z zamiarem przygotowania (serii)
prezentacji n/t scali. Coś w rodzaju 'making sense of scala with...'.
Na razie mam pomysł na 'making scala with Haskell' ;). Mam wrażenie,
że pewne konstrukcje syntaktyczne w scali łatwiej zrozumieć znając ich
pochodzenie (jak np. case classes czy pattern matching, obecne od lat
w Haskellu albo OCamlu). Zastanawiam się jednak co dla innych sprawia
w scali najwięcej problemów przy pierwszym zetknięciu? Co wprowadza w
konsternację? Co najtrudniej jest zrozumieć?

Moje subiektywne typy:

1. Typy generyczne, a w szczególności type level programming/encoding

(np. class Foo[T[_]] czy np. class Foo[T] forSome ...

To generalnie jest dość złożony problem. W dodatku Scala ma bardzo
złożony system typów i mechanizm typów parametrycznych.)

2. case classess, binding i ekstraktory (http://programming-
scala.labs.oreilly.com/ch06.html#CaseClasses)
3. self types? (http://programming-scala.labs.oreilly.com/
ch12.html#SelfTypeAnnotations)
4. traits (http://programming-scala.labs.oreilly.com/ch04.html)
5. structural types (http://programming-scala.labs.oreilly.com/
ch12.html#StructuralTypes)
6. list comprehension vs. zwykła pętla for

Ciekaw jestem Waszego zdania i Waszych typów. Oraz tego co byście
chcieli na takiej prezentacji zobaczyć? A może jakie macie
doświadczenia z poznawania języka, co Wam sprawiało trudności i jak
sobie z nimi poradziliście, albo nie ;). Ciekawi mnie też jakie
wcześniejsze doświadczenia pomogły w zrozumieniu scali (jakie języki?)

Artur

Przemek Pokrywka

unread,
Nov 27, 2010, 12:21:23 PM11/27/10
to Warsaw Area Scala Enthusiasts Group
Hej. Kilku moich kolegów (programistów Javy) w osłupienie wprawił
pattern matching - zwłaszcza to, że we wzorcu pojawiała się nagle
niezadeklarowana wcześniej zmienna (~ wolna), z którą wiązana była w
wyniku dopasowania wzorca określona wartość.

Pozdrawiam
Przemek (WrASSE)

Zarejestrujcie się na http://www.scala-tribes.org/p/tribes.html

Artur Karazniewicz

unread,
Nov 27, 2010, 1:53:37 PM11/27/10
to Warsaw Area Scala Enthusiasts Group
Tak, faktycznie to jest dobry kandydat. Mam też wrażenie, że robi się
częsty błąd przedstawiają PM jako "case on steroids". To nie jest do
końca prawda.

np. coś co się wydaje 'zwykłym inicjowaniem zmiennych w scali:

val (a,b) = (1,2)

jest w rzeczywistości dopasowaniem wzorca i związaniem zmiennych z
wartościami typu Tuple2. I nie ma zupełnie nic wspólnego z case ;)

Można równie dobrze użyć tego do ekstrakcji i związania ze zmienną
jedynie pierwszej wartości.

val onetwo = (1,2)
val (fst,_) = onetwo
val (_,snd) = onetwo

działa tu po prostu unapply

Jeszcze lepszym przykładem jest scalowy regex:

np.

scala> val Date = """(\d{2})-(\d{2})-(\d{4})""".r
scala> val Date(day, month, year) = "27-11-2010"
day: String = 27
month: String = 11
year: String = 2010

Tak tu jest faktycznie sporo pole do popisu, jeśli chodzi o
wyjaśnianie zawiłości języka. Na szczęście bardzo dobrze można to
wyjaśnić na przykładzie Haskella, gdzie wszystko jest praktycznie
dopasowaniem wzorca :).

Dzięki za wskazówkę n/t scala-tribes.org!

pozdrawiam
A.

On 27 Lis, 18:21, Przemek Pokrywka <przemyslaw.pokry...@gmail.com>
wrote:
> Hej. Kilku moich kolegów (programistów Javy) w osłupienie wprawił
> pattern matching - zwłaszcza to, że we wzorcu pojawiała się nagle
> niezadeklarowana wcześniej zmienna (~ wolna), z którą wiązana była w
> wyniku dopasowania wzorca określona wartość.
>
> Pozdrawiam
> Przemek (WrASSE)
>
> Zarejestrujcie się nahttp://www.scala-tribes.org/p/tribes.html
Reply all
Reply to author
Forward
0 new messages