Zauważyłem, że obsługa IDE nie jest tak dobra, ale sam język obsługuje funkcjonalnie idiomy programowania o wiele bardziej czysto.
Zauważyłem, że obsługa IDE nie jest tak dobra, ale sam język obsługuje funkcjonalnie idiomy programowania o wiele bardziej czysto.
Odpowiedzi:
Programuję Scalę od ponad roku, więc postaram się cofnąć o rok, aby odpowiedzieć na to pytanie.
Punkty powyżej były mniej lub bardziej, co myślę o Scala zanim zacząłem się go uczyć.
W ciągu roku, oto co się dowiedziałem:
Cóż, myślę, Scala jest zbyt skomplikowane. Czuje się jak C ++, że ma mnóstwo różnych sposobów robienia rzeczy. Niektórzy nazywają to „bogactwem”, „ekspresją” lub „mocą”, ale przebieg może się różnić. W wielu rzeczywistych projektach musiałbyś sztucznie ograniczać, jakich funkcji językowych będziesz używać, a czego nie, aby wszyscy zaangażowani programiści mogli mówić tym samym podzbiorem języka.
Do programowania funkcjonalnego Wolę Clojure , który jest sposób prostszy niż Scala.
Niech święta wojna zacznie ;-)
Około rok temu, a ja coraz bardziej sfrustrowany o przyszłość mojego Startup produktów, jeśli ja nadal używać Java, postanowiłem dać Scala spróbować. Byłem już programowanie w JavaScript i Python w momencie, Ruby była również dobrą alternatywą, ale szukałem statycznie wpisywanych języka, najlepiej taki, który może uruchomić na JVM.
Naprawdę starał się jak Scala, naprawdę, ale uważam, że to kod zupełnie brzydkie i trudne do zrozumienia. I zastanawiał się dramatycznie, że jeśli Scala była nasza najlepsza odpowiedź na Java, to ja pewnie przykręcone i skazany na kontynuowanie pracy z językiem nie lubił mimo wszystko ...
Na szczęście, nie zbyt długo potem dowiedziałem się o Fantom . O rany, czy mi się podobało! Dla mnie to było jak Amerykanin Splendor odpowiedzi na niemiecką biurokracją! Jest dopasowana do wymagań byłem dużo bardziej szukają w Scala, ale elegancko . Miał integrację z Vimem , Eclipse i Netbeans , ładny framework internetowy , działające z nim dojrzałe produkty , małą, ale niezwykle pomocną społeczność ... Pisanie dynamiczne i statyczne! Ucieszyłem się!
(Mógłbym kontynuować, ale ten post ma być o Scala, nie Fantom, więc tutaj zatrzymać. Mój preferencji jest oczywiste , to jednak nie ma to po porównując dwa. Nigdy nie mogłem zrozumieć, dlaczego Fantom dostaje tak mało uwagi w porównaniu do Scala. ale widocznie nie jestem jedyną osobą, jeśli słuchać tego podcastu [ mp3 ], aż do końca).
Kiedy początkowo zajmował się Scala 2 lata temu, wyglądało to obcy i zastraszenia mnie. W pewnym momencie odkryłem, że język rdzeń jest znacznie prostsze niż Java, ale jego składnia i semantyka jest tak elastyczny, że można tworzyć nowe konstrukcje języka podoba, nawet bez funkcji makro. I od tego czasu całkowicie włączone do Scala dla wszystkich moich projektów Java, ponieważ pozwala mi pisać bez zbytniego standardowy kod.
I jak Clojure, ale zdarzają się sytuacje, w których platforma potrzebuje skompilować do kodu bajtowego statycznej (Android, aplety, ...) i jednocześnie można zrobić, w Scala, to tylko tam.
Choć Scala pozwala rozwiązać wiele problemów w sposób funkcjonalny, ja często problemy, gdzie za pomocą klas czuje się bardziej naturalne. To sprawia, że rzeczy nieco bardziej skomplikowane, ale nigdzie w pobliżu zawiłości i bóle C ++.
Największą nagrodą dla mnie, kiedy naprawdę zacząłem uczyć się języka, było to, że mogłem programować tak, jak to zrobiłem w Javie, po prostu bez hałasu (trochę jak po uruchomieniu Groovy), ale ostatecznie chcesz spróbować zanurzyć się głębiej w moc języka - rośnie z wami.
O pytaniu IDE: Po użyciu Emacsa do wszystkiego, wszystkie moje problemy IDE zniknęły :-)
Lubię Scalę z wielu powodów, ale jest jeden, który jest często pomijany: jego prostota.
Scala może nie być tak prosta jak, powiedzmy, Oberon, ale jest o wiele prostsza niż niektóre inne języki. Scala Language Specification jest ~ 160 stron, Java Language Specification jest ~ 600 (tylko język, nie JVM lub bibliotek!), ECMA-334 C # Language Specification (który AFAIK odpowiada podgrupie Visual C # 2.0) jest ~ 440 stron (bez takich elementów, jak wyrażenia zapytania LINQ, wyrażenia lambda, metody rozszerzenia, ogólna ko- i sprzeczność dynamic
, opcjonalne argumenty z wartościami domyślnymi, argumenty słów kluczowych var
). Nawet obecny projekt dla ECMAScript 5.1 jest większy przy ~ 210 stron. I oczywiście mój własny „domyślny” język, Ruby, którego aktualny ISO Draft waży około ~ 310 stron, które określają jedynie prawie niepotrzebnie mały podzbiór przecięcia Ruby 1.8.6, 1.9.1 i 1.9.2.
Oto co jest do bani o Scala:
Wskaźnik zerowy był bardzo zły pomysł, aby rozpocząć. Hoare nazwał go jego „miliardów dolarów pomyłka”, ale Scala jest jeszcze gorzej. Ma obiektów nazwanych null, null, None, i Nil. null jest do współdziałania z Java. Null jest wskaźnikiem zerowym ze specyfikacji DOM W3C, None jest tym, co null powinno być zastąpione, a Nil jest czymś pustym.
Kiedy konstrukcje językowe okazują się hackerskie, winę ponosi zwykle programista, a nie język. W Scala, jednak język rdzeń zawiera już lekcje biblioteczne, których zachowanie jest tylko udokumentowane „To jest hack”. Nie wierzysz w to? Przeszukiwanie scaladoc dla scala.xml.Group.
Ostatni not least, Scala jest źle udokumentowane. Prawie żadnej z klas Scala w oficjalnej dokumentacji pochodzi z przykładowym kodem. Scala jest znacznie trudniejsze do nauczenia niż Java i wymaga głębokiej wiedzy w dziedzinie informatyki.
Aby uniknąć pomylić z Scala-hater, tutaj jest to, co kocham o tym:
null
jest zerowym wskaźnikiem Java, Null
jest jego „typem”. None
jest jednym możliwym „stanem” Option[T]
kolekcji zawierającej jeden lub zero elementów. Nil
jest pusta lista. Chociaż chcesz, aby brzmiało to przerażająco, nie jest. Te typy nie są wymienne ani wymienne i zachowują się dokładnie tak, jak powinny.
Scala jest złożona. Nie sposób wokół niego! Jego składnia jest bardzo elastyczny i można dostosować na wiele sposobów (przede wszystkim operatorów / notacja infiksowa) - a system typ ma więcej różnych funkcji niż jakikolwiek inny język znam.
Więc rzeczy nie są tak proste, jak np. W Haskell: Klasy typowe, aby objąć je wszystkie.
Jak Scala próbuje umieścić razem programowanie funkcjonalne, OO, programowanie proceduralne i biblioteki Java, jak również własnych pomysłów, w końcu skończyć z dużą ilością pojęć , które w jakiś sposób wydaje się iść „w tym samym kierunku”:
Wybór między nimi wydaje się początkowo trudny i można łatwo zastanawiać się, czy udało się znaleźć właściwe rozwiązanie jakiegoś problemu. Nadużywanie hacków jest nawet bardzo łatweimplicit
s.
Ale ciekawe jest: Scala działa. To czasami trudno zrozumieć dlaczego (zwłaszcza na zastanawianie się przez to, co niejawne konwersje + spadkowego + ... jakiś przedmiot ma funkcjonalnośćX
), ale nie musisz się tym przejmować przez większość czasu.
Napisz Scala tak proste, jak to możliwe i będzie działać. Nie należy się martwić o wszystko, co jest możliwe, a po prostu wykorzystać to, czego potrzebujesz. A jeśli czegoś potrzebujesz, możesz być pewien, że jakoś Scala ma go;)
Im lepsze wyniki, tym bardziej będziesz mógł dostosować Scalę za pomocą operatorów, implikacji, monad, funky składni ... i wreszcie uzyskać coś zbliżonego do DSL, które idealnie rozwiąże Twój problem.
W końcu zawsze masz możliwość użycia Scali jako znacznie lepszej Java z czystszą, łatwiejszą składnią, wnioskowania o typie i niektórymi funkcjami.
To doskonały język, który jest prostszy niż Java na wiele sposobów.
Większość ludzi nie podoba, programista Java czy nie, z tych samych powodów, że większość ludzi, programistów czy też nie, nie jak uczyć się nowych języków programowania. Podejrzewam, że większość ludzi, którzy nauczyli się języka programowania, nawet nie jak dowiedział się, że.
Jeśli martwisz się, że język jest tak skomplikowany jak C ++, unikałbym Clojure jak zarazy. Narzekanie, że Scala jest bardziej skomplikowane niż Clojure, stało się argumentem zastępczym dla ludzi, którzy są całkowicie nieświadomi jednego lub obu języków.
Clojure zawiera makra, co oznacza, można zmienić składnię języku za tyle, ile chcesz, co daje nie tylko „mnóstwo różnych sposobów robienia rzeczy”, ale prawie nieskończoną liczbę sposobów robienia rzeczy. Żadna z tej nowej składni, którą programiści tworzą za pomocą makr, nie zostanie udokumentowana w żadnym miejscu specyfikacji języka.
„Ale możemy uniknąć używania makr lub regulować, które z nich są dozwolone w naszym kodzie”, mówisz. Gratulacje, jesteś teraz mieć „sztucznie limitu co język rysy masz zamiar używać, a co nie”, który jest dokładnie to, co babbling idioci, którzy używają Clojure Scala wykorzystywane jako powód unikania Scala na początku.
Naprawdę podoba mi się bardziej ziarnistych typu biblioteki Scala. Wydaje się, że nowe kolekcje biblioteka była dobrze przemyślana. Lubię też, jak to zmniejsza ilość kodu wymaganego do prostych klas i funkcjonalne koncepcje to dodaje. Wnioskowanie typu jest również bardzo pomocne. Czuje się jak Java bez kół treningowych. Po użyciu C # na chwilę, Scala rzeczywiście czuje się jak konkurenta, z Java nadal użyteczne, ale pozostają w tyle.
Jako programista Java, początkowo znaleźć Scala interesujące. Jednak po dabbling z nim na chwilę (i działa na prawie wszystkich pozytywy / negatywy już wymienionych przez innych), byłem wyjechaliśmy bardzo „meh” w stosunku do niego. Ulepszenia językowe są równoważone niższą dostępnością zestawów narzędzi. Ja po prostu nie mógł pochodzić z jakiegokolwiek powodu, aby przełączyć określającej koniec. To jest dobre, ale to nie jest „lepszy wystarczająco” zrobić sprawę do przełączania. Nie ma to czynnik subiektywny podniecenie albo (jak Clojure wydaje).