Uznávám, že dnes není těch důvodů pro Scalu tolik, jako v době, kdy jsem přecházel já (2010). Tehdy byla Java 6 a pokusy programovat v Javě funkcionálně byly trochu krkolomné. Dnes je tu Java 8 a je to o poznání méně krkolomné, byť zdaleka ne ideální.
Kdyby tehdy tu byla Java 8, nevím, jestli bych na Scalu přecházel. Ale z dnešního pohledu by mi to přišlo škoda, Scala má stále co nabídnout.
Actor model – to je mnohem obecnější záležitost, jednotlivé actory mohou být i na úplně jiném stroji. A jinak toto bylo ve Scale deprecated a doporučuje se používat actory z Akka.
Funkcionální programování – zkoušel jsem Javu 8 a nedá se to srovnávat.
* Třeba udělat z kolekce Stringů kolekci java.net.URL jde ve Scale snadno, v Javě musím řešit checked exceptions. Ne, že bych vyloženě neměl checked exceptions rád, ale dokud tu nebude pro ně dobrá podpora v lambda funkcích, budou komplikovat funkcionální programování.
* Myslím, že pro Scalu je – aspoň dnes – lepší funkcionální ekosystém.
Immutable typy – ano, dá se to dělat i v Javě a já to tak dělal. Místo case classes se dá použít Lombok, který sice neumí úplně všechno, co case classes (např. pattern matching by v Javě neměl smysl), ale to základní ano. Na druhou stranu je tu trošku problém s ekosystémem – například když buu v Javě chtít (de)serializovat JSON do objektů, tuto konstrukci mi snad žádná knihovna podporovat nebude. Ve Scale použiju upickle nebo Play-JSON. V Javě ani jeden z nich tak snadno nepoužiju, protože to chce makra. Stručně: V Javě s tímto přístupem spíše narazím.
Klíčové slovo val, kdy pak není možné měnit proměnnou - Java má final – ano. Varianta s final je ukecanější, ale v zásadě ano.
Akademická syntaxe – nevím, jestli je akademická, ale vyhovuje mi celkem. Je svým způsobem jednodušší: například v syntaxi není níc jako typecast či instanceof – místo nich máme metody asInstanceOf a isInstanceOf. Nemáme operátor pro sčítání, třída Int má metodu „+“. (Kompilátor to pak zkompiluje vhodným způsobem, takže se to přeloží na checkcast, iadd apod. a žádné volání metody v takovémto bytecode nebude.)
XML syntaxe – pokud si dobře vzpomínám, tak ta se má z core jazyka oddělit do samostatného modulu. Snad má být implementována pomocí maker a string interpolation.
Databáze – je tu například knihovna Slick, za kterou dnes stojí Typesafe.
K „neklidnému vývoji“ – nemám pocit, že by tato výtka byla dnes na místě. Před pěti rokama ano. Dnes, když vyjde mová minor (setinková) verze, ověřuje se, že je 100% kompatibilní. Když vyšla nějaká desetiknová verze, slibovali kompatibilitu zdrojáků, s výjimkou zavržených a experiemntálních fíčur. A Dotty? To je dnes samostatný jazyk. Co je dnes v Dotty, to se může – pokud se to osvědčí – dostat časem do Scaly. Ale tím pískovištěm dnes není Scala, ale právě Dotty. Není to naopak dobře?
Mám pocit, že ke klidnějšímu vývoji přispělo i založení Typesafe.