17 lutego 2013

Listy w Scali

Nie, nie chodzi mi o pisanie listów, a ich używanie. I nie chodzi mi również o tradycyjne listy w kopercie, a tradycyjne listy jako struktury danych w Scali. Są one wszechobecne w Clojure i mają w tym języku specjalne traktowanie, co okazuje się być w sprzeczności do Scali, w której "lists now integrate more closely into the collections framework, and are less of a special case than before."

Początkowo sądziłem, że istnieje literał dla utworzenia listy, ale najwyraźniej się myliłem, bo…
scala> ()

scala> val a = ()
a: Unit = ()
...jest to oznaczenie dla typu scala.Unit, w którym "There is only one value of type Unit, (), and it is not represented by any object in the underlying runtime system. A method with return type Unit is analogous to a Java method which is declared void."

Myślałem sobie, że może () ma specjalne traktowanie w Scali, podobnie jak w Clojure, dla którego oznacza pustą listę. Spróbowałem więc…
scala> (1, 2, 3)
res1: (Int, Int, Int) = (1,2,3)

scala> res1.getClass
res2: Class[_ <: (Int, Int, Int)] = class scala.Tuple3
...co okazało się być tym razem jeszcze innym typem scala.Tuple3, a nie oczekiwaną listą. Cóż pozostaje przyzwyczaić się do zapisu...
scala> List(1, 2, 3)
res3: List[Int] = List(1, 2, 3)
lub
scala> 1 :: 2 :: 3 :: Nil
res4: List[Int] = List(1, 2, 3)
...i poczytać dokumentację dla scala.collection.immutable.List. Zacznę od Lists w Scala Documentation.

Nie za krótki wpis? Nie za trywialny? Kontynuować wspólne poznawanie Scali w serii takich wpisów czy może uzupełnić to i owo? Sugestie mile widziane.

17 komentarzy:

  1. Poczytałbym o builderach. Temat nie taki trywialny, a wielu początkujących ma z tym problem.

    OdpowiedzUsuń
    Odpowiedzi
    1. Nawet nie wiem, o czym piszesz, więc temat odłożony na za kilka dni/tygodni, kiedy dotrę do nich. Masz może jakiegoś linka, gdzie znalazłeś to?

      Usuń
  2. Robisz totalny bajzel w głowie ludziom, którzy nie mają pojęcia o scali a chcieliby sie czegoś dowiedzieć...

    OdpowiedzUsuń
    Odpowiedzi
    1. Zaproponuj zmianę, a ustosunkuję się do niej. Ludzie różnie uczą się i nie wszystkim spasujesz. Co jest nie tak w tym wpisie? Jest inny?! I dobrze!

      Usuń
    2. Jest bezsensu, kompletnie nic nie wyjasnia, skupia sie na literałach dla list które kompletnie nie maja zadnego znaczenia, obija sie o Unit i Tuple i zostawia czytelnika z jednym wielkim WTF

      Usuń
    3. Tam zaraz bezsensu. Po prostu Ty go nie dostrzegasz, bo wiesz, co w trawie piszczy. Inni, mniej doświadczeni (ja), widzą w tym samo dobro, szczególnie po klimatach z Clojure. Dla mnie tak zaczyna się przygoda ze Scalą, bo przychodzę z Clojure. Właśnie z myślą o Clojure'ians głównie myślałem.

      Usuń
  3. Napiszę odpowiednik Twojego artykułu w jednym zdaniu:

    "Artykuł o listach"
    W Języku X jest struktura danych zwana listą. Możesz je stworzyć poprzez "tak i siak". Ale Tupla i Unit też są.

    I tyle jest treści w Twoim arcie.
    Jeśli piszesz na temat List, a Twój post zawiera brak informacji na temat list.. To o czym to świadczy?

    teamon ma całkowitą rację, wprowadzasz ewentualnych czytelników w zakłopotanie, i to nie tylko brakiem uczących treści..

    Jeśli nie masz dość wiedzy by napisać cokolwiek sensownego, proponuję nie pisać nic i nie robić artykułu o Listach gdzie nie ma niczego sensownego o listach. Niezależnie od tego jak bardzo nie znasz clojure czy scali, powinno Ci być wstyd pisać takie rzeczy i jeszcze bronić się swoim brakiem wiedzy.

    Poza tym, jeśli jesteś faktycznie taki dobry w Javie, to przejście na Scalę powinno być znacznie prostsze niż przejście z Clojure na Scalę. To że oba języki dzielą się sugerowanym paradygmatem programowania, nie znaczy, że mają podobną składnię. Scala ma w zasadzie zachowaną składnię Javy.. więc takie coś jak tu napisałeś nie powinno w Twoim przypadku w ogóle mieć miejsca.

    Chyba najwyższy czas zacząć jechać ciętą ripostą na ten bełkot, który promujesz na blogu..

    OdpowiedzUsuń
    Odpowiedzi
    1. Jak komuś nie pasuje, to proponuję nie czytać.
      Ale jak czytać to może ze zrozumieniem?
      Jacek napisał m.in.:

      "Początkowo sądziłem, że (...), ale najwyraźniej się myliłem, bo…"

      "Myślałem sobie, że (...). Spróbowałem więc…"

      Skąd wniosek że wpis jest o listach? Ja bym raczej stwierdził że Jacek napisał o swoich zmaganiach ze Scalą, albo że po prostu napisał na swoim blogu o sobie. Co w tym złego?

      Usuń
    2. Ja wszystko rozumiem. Tylko jak robię "Zupę ogórkową" to nie mam na myśli robienia "Żeberek w sosie". Jeśli to o przemyślenia i wywody egzystencjonalne chodzi, to co one mają wspólnego z tematem wpisu? Co mają wspólnego ze Scalą? I jaką mają wartość dla czytelnika?

      IMHO lepiej prowadzić pamiętnik.

      "Skąd wniosek że wpis jest o listach?"
      Nie no wiesz.. tytuł wpisu sugeruje faktycznie, że rozmowa będzie o bólu brzucha księdza proboszcza...

      Usuń
    3. Myślę że przesadziłem pisząc o "zrozumieniu" (co mogło sugerować brak zrozumienia) więc przepraszam.
      No faktycznie na podstawie tytułu wniosek może być uprawniony.
      Ale czy mamy przypadek artykułu-nie-o-listach z nieadekwatnym tytułem czy też artykułu-o-listach w którym jest brak informacji o listach (coś tam jednak o listach się znalazło, prawda?), czy może artykułu-o-różnych-sprawach-w-tym-trochę-o-listach to pewnie kwestia interpretacji. Ale to jest blog (czy blog to nie rodzaj pamiętnika?) a nie pismo naukowe i ja nie mam pretensji o tytuł (ani o treść) do autora.
      A w sprawie wartości dla czytelnika to zależy od czytelnika, ale dla mnie (i może dla osób które zajmują się/chcą się zajmować nauczaniem Scali i/lub programowania funkcyjnego) mają wartość opowieści o trudach poznawania Scali, o tym co jest trudne, niezrozumiałe, niejasne, co sprawia kłopoty itp. Więc jak dla mnie to chętnie poczytam więcej wpisów tego typu.

      Usuń
    4. Grzesiek dobrze wyczuł moje podejście do sprawy - pisząc o poznawaniu Scali, utrwalam wiedzę, bo tłumacząc coś komuś zawsze pozwala mi na zwizualizowanie treści. Podoba mi się najbardziej to zdanie, bo oddaje ducha tego bloga: "Jak komuś nie pasuje, to proponuję nie czytać." Dzięki Grzesiek!

      Usuń
  4. Jacku,

    Jeśli można prosić: Grzesiek przyszedł Ci w sukurs, miłe byłoby zrewanżowanie się. Jeśli mógłbyś wyciąć pierwszą linijkę i nieco zmienić temat, myślę, że będzie ok. ;-)

    Oczywiście, jest też opcja rozszerzenia treści. Jak preferujesz, obie pewnie zadziałają. :-)

    OdpowiedzUsuń
    Odpowiedzi
    1. Można prosić, ale rozumiem, że pozostawiasz mi prawo odmowy, albo przyjęcia częściowego rozwiązania ;-) Tym razem skorzystam z prawa odmowy zastosowania się do zaleceń jako nieadekwatne do mojego postrzegania otaczającego mnie świata. Szczęśliwie świat mamy jeden, ale jego rozumienie odmienne. I to nas czyni debeściakami jedynymi w swoim rodzaju! :-)

      Usuń
  5. Myślę, że takie wspólne poznawanie scali jest raczej bez sensu (choć na pewno niektórym jest raźniej czytać coś po polsku), skoro istnieją wspaniałe książki online. Lepiej pisać takie luźne notki o tym co Cię zaintrygowało, przykuło uwagę albo o tym jak kiedyś robiłeś to w javie a teraz w scali wygląda to tak i tak. Coś w ten deseń.

    OdpowiedzUsuń
    Odpowiedzi
    1. Eeee tam, zaraz bez sensu. Kilka osób zgodziłoby się z Tobą, ale znam kilka, które piszą, że im pasuje (niestety jedynie poza blogiem). Tyle opinii, ile ludzi i bez tej różnorodności pewnie pisalibyśmy wciąż w Cobolu. A tak mamy i Scalę, i Clojure, i Javę i wiele innych ciekawych języków (choćby ostatnio wspominany przez Grześka Elm). Dla każdego coś miłego.

      Usuń
  6. Wspólna praca nad konkretnym tematem, daje możliwość powstania zjawiska zwanego synergią - to raz. O ile wypowiedź jest adekwatna do tematu i zawiera treści uczące, wspólnie można dojsć do satysfakcjonujących rezultatów, mniejszym nakładem sił.

    Można też pomóc początkującym w samorozwoju, pobudzić ciekawość, nakierować.
    I wtedy będzie to miało prawdziwą wartość.

    OdpowiedzUsuń
    Odpowiedzi
    1. Mądrala. Zaraz mi wyjeżdża za synergią. Może pokierujesz kolegę Jacka do ostoi wiedzy scalowej Twojego autorstwa, w którym pojawia się **Twoje** spojrzenie na świat? Moje nie należy do najdoskonalszych, ale chociaż można wczuć się w moje położenie i to jest główna idea tego bloga. Chcę jedynie wciągnąć kilka innych osób do dyskusji, którą inicjuję pisząc o swoich przemyśleniach publicznie. Nie zawsze mi się udaje, jak można zauważyć po tej dyskusji, ale z drugiej strony, czy nie osiągnąłem zamierzonego celu i wciągnąłem kilka osób do mojego świata (choćby na chwilę)?!

      Usuń