Jestem całkowicie językiem Scala jako językiem ... i wciąż mam problem z tym, dlaczego każda firma powinna przejść z Javy na Scalę. Czy Scala jest tylko cukrem syntaktycznym na JVM, czy też istnieją fundamentalne ulepszenia Scali w stosunku do Javy, które poprawiłyby aplikacje w świecie rzeczywistym?
16
Odpowiedzi:
Oświadczenie: Nie jestem guru Scala.
Scala robi dwie rzeczy wyjątkowo dobrze, czego nie robi Java (obecnie).
Rozwiąż problemy funkcjonalne
Na najbardziej podstawowym poziomie Scala ma w pełni rozwinięte zamknięcia z obsługą kolekcji. Oznacza to, że nie musisz już pisać kodu płyty kotła, takiego jak (bezwstydnie zerwany post DZone)
Zamiast tego napisz coś takiego:
Rozwiązuj współbieżność w bezpieczniejszy sposób
Nie mogę szczerze myśleć o zbyt wielu innych rzeczach, które sprawiają, że Scala stoi na głowie ponad Javą. Tak, wiele drobnych korzyści i ulepszeń, ale także znacznie więcej lin do zawieszenia. YMMV
HTH trochę
źródło
To zależy od twojej definicji „po prostu cukru syntaktycznego”. Na przykład, w jaki sposób Java jest czymś więcej niż tylko cukrem syntaktycznym nad kodem maszynowym?
Każdy język może zrobić mniej niż kod maszynowy, ale żaden język nie może zrobić więcej.
Języki wysokiego poziomu wprowadzane do tabeli ułatwiają czytanie i zrozumienie kodu, łatwiejsze komponowanie i wykrywanie większej liczby błędów. I, moim zdaniem, jest to pierwszy z nich, który robi największą różnicę - właśnie „tylko cukier syntaktyczny”.
Ale biorąc pod uwagę tylko dwa pozostałe, Scala ma jeszcze przewagę nad Javą.
Nie wspominając o tym, ale posiadanie zamknięć sprawia, że kod jest znacznie łatwiejszy do skomponowania niż brak zamknięć. I chociaż Java 7 doda coś, co nazywa się zamknięciami, to nie będzie to - będą tylko anonimowymi funkcjami.
Jeśli chodzi o wychwytywanie większej liczby błędów, doskonała obsługa wariancji przez Scalę jest wystarczającym dowodem. Co więcej, jego nacisk na niezmienność również zapobiega wszelkiego rodzaju błędom - nie jest tak, że Java nie może zrobić niezmiennego, ale po prostu nie ma biblioteki.
źródło
Oprócz odpowiedzi Martijna chciałbym dodać, że Scala jest bardziej ekspresyjna niż Java, a korzyści są takie, że (1) sprawia, że jesteś bardziej produktywny (2) pisząc mniej kodu do rozwiązania tego samego problemu, oznacza to, że możesz zmniejszyć liczbę błędów w swoim kod (bezbłędny kod IMHO to mit).
źródło
Używam Scali od około 3 miesięcy i nadal nie mogę znaleźć niczego, czego nie byłbym w stanie zrobić w Javie. Dla mnie dosłownie każda literatura Scala wydaje wspomnieć samo boilerplate . Jeśli to, czego szukasz, to zmniejszenie płyty kotłowej, to Scala jest dla Ciebie, ale IMHO, na przykład powyższy przykład filtra można równie dobrze rozwiązać za pomocą kolekcji Apache
lub użyj takich zamknięć
Ale oczywiście więcej gadatliwy. Podoba mi się jednak wnioskowanie typu. Kiedy uczysz się Scali, zdajesz sobie sprawę, że to prawdopodobnie dzieje się pod maską. Moim zdaniem każdy język ma + ve i -ve.
źródło
zrozumienie listy, do zrozumienia.
na przykład w java piszesz:
W scala ten sam kod jest napisany o wiele bardziej elegancko (jak python) jak:
i zrobione.
Scala oferuje tyle możliwości, że Java nie. Po prostu w ogóle nie ma porównania. Jedynym problemem jest to, że ludzie są bardziej zaznajomieni z Javą (b / c tego uczą na lekcjach CS) i nie są jeszcze tak wykwalifikowani w paradygmacie Scali.
Scala ma rekurencję ogona, może zwracać krotki (myślę, że może to być w Javie 8).
To nie ma porównania. Scala została opracowana przez Martina Ordersky'ego, który pracował w głównym zespole Java Generics.
Scala jest po prostu o wiele lepszym językiem. To wszystko. Ludzie, którzy twierdzą inaczej, po prostu nie zbadali Scali na tyle, by wiedzieć lepiej.
Powyżej chciałem powiedzieć o optymalizacji rekurencji ogona (czego JVM nie może zrobić w sposób, w jaki może kompilator Scali).
Scala także kompiluje i działa szybciej niż aplikacje JVM (Tak, to prawda). Nie wspominając o ramach. Korzystamy z Tomcat na przykład i wdrażamy niektóre serwulety do obsługi REST.
Jedną rzeczą, której Tomcat nie może zrobić, są operacje asynchroniczne, które wymagają nieblokujących operacji we / wy. W tym celu programiści JAVA zwykle wymyślili obejście za pomocą kolejki komunikatów (wyślij wiadomość do kolejki, a inny proces lub wątek odbierze ją i zrobi wszystko, co chcesz w tle).
Niestety, ta metoda to cr * p i włamanie do ograniczeń we wdrażaniu serwletów Java na Tomcat.
Idź sprawdź akka + spray. Korzysta z aktorów scali (aktorzy są jak wątki, z wyjątkiem, że jedynym sposobem, w jaki mogą się komunikować, są wiadomości).
I gotowe, asynchroniczne wywołania REST są łatwe. Długotrwałe zadanie w tle? Nie ma problemu. Po prostu odpal i zapomnij i raz na jakiś czas wykonaj odpytywanie REST, aby sprawdzić jego status z interfejsu.
Jeśli nadal używasz Javy i uważasz, że jest lepsza niż Scala, równie dobrze możesz przestać używać komputera do pisania i wrócić do czasów długopisów i pisania przy świecach. Java jest w zasadzie przedpotopowym w porównaniu ze Scalą.
źródło
int myVar = condition ? someValue : otherValue
//some value
//other value
komentarze, aby/*some value*/
nadać im styl lub coś. Obecnie