FAQ om Scala för Java-utvecklare

Fråga:
Min organisation har väldigt mycket befintlig källkod skriven i Java, som vi förstås inte vill skriva om till ett nytt programmeringsspråk. Finns det något enkelt sätt att konvertera till Scala ?
Svar:
Det behövs inte någon konvertering av befintlig Java-kod eftersom den kan användas från Scala. Båda språken kan användas för att skriva kod som kompileras till class-filer som exekverar på JVM:en, och språken kan använda varandra. Det går alltså i princip bra åt andra hållet också, dvs att använda Scala från Java, men det finns mer information bl.a. på websidan nedan om t.ex. 'traits' som inte har någon riktig motsvarighet i Java.
Frequently Asked Questions - Java Interoperability.
I boken 'Programming in Scala' handlar kapitel 29 om kompatibiliteten mellan Java och Scala.
Fråga:
Jag vet att det finns många olika språk som kan köras på JVM:en, så vad finns det egentligen för anledning att tro att Scala skulle vara bättre än något annat?
Svar:
Det stämmmer att det finns många JVM-språk, såsom Java, Groovy, JRuby m.m. men de personer som är eller har varit inblandad i skapandet av ett nytt språk brukar vanligen vilja framhäva det egna språket. När det gäller Scala's 'konkurrerande' språk så finns det faktiskt flera personer som har uttalat sig positivt om Scala, vilket är en indikation på att det faktiskt är väldigt bra.

På sidan som heter "Scala as the long term replacement for Java" så kan du läsa om uttalanden från skaparna av Java (dvs James Gosling) och Groovy samt en lead developer för JRuby. Exempelvis Groovy's skapare skulle antagligen aldrig ha skapat Groovy om Scala då hade funnits, och JRuby's lead developer tycker att inget annat språk är kapabelt att vara en ersättare för Java. James Gosling svarade Scala, utan att tveka, på en fråga om vilket annat JVM-språk än Java som han skulle välja att använda. Det sistnämnda är f.ö. ett citat som används på baksidan av boken Programming in Scala som är skriven av bl.a. Scala's upphovsman Martin Odersky.

Det kan också nämnas att det redan idag finns ett antal stora aktörer som har satsat på Scala. Exempelvis Twitter använder Scala och det gör även LinkedIn, Sony Pictures, SAP/Siemens och EDF (Europas största energiföretag) enligt en intervju med professor Martin Odersky (som är skaparen av Scala).

Angående skaparen av ett språk och vem som sannolikt kommer att vidareutveckla det, så kan det faktiskt också vara en intressant faktor att beakta när man bestämmer sig för vilket nytt JVM-språk man kan vilja satsa på. På en blog-sida som jämför med ett annat JVM-språk så framförs t.ex. följande åsikter om Scala: "Scala is designed by people who have proper academic background, experience and talent in the area of language design... ...is developed and maintained in Academia (i.e. endless supply of post-docs and plenty of free time to research) ..."

Fråga:
Jag har sett lite Scala-kod och det ser ut att vara dynamiskt typat. Stämmer det ? Jag vill nämligen inte använda dynamiskt typade språk med obegränsad potential för RuntimeException. Det kan visserligen låta väldigt fint att säga att det inte spelar någon roll eftersom man ändå skall ha regressionstester som fångar upp alla fel, men jag är övertygad om att ytterst få projekt i verkligheten blir utvecklade med strikt disciplinerad TDD, och efter några år kommer det därför att bli jobbigare och jobbigare att försöka förvalta en dynamiskt typad kodbas utan någon som helst hjälp av kompilatorn ?
Svar:
Då har du tur :-) eftersom Scala är ett statiskt typat språk ! Det kan visserligen se ut som om det inte är det eftersom typdeklarationerna är färre jämfört med Java-kod, men det beror bl.a. på att typ-inferens används i stället för att duplicera typerna.
Java-exempel:
HashMap<String, List<Integer>> map = new HashMap<String, List<Integer>>();
Motsvarande HashMap kan instansieras på följande sätt i Scala:
val map = new HashMap[String, List[Integer]]
Fråga:
Jag (som är en java-utvecklare) orkar helt enkelt inte läsa en tjock teori-bok om Scala bara för att sätta min in i detaljerna om språket för att sedan kunna bedöma om det verkligen är något som är värt att satsa på. Finns det inga kod-exempel som en vanlig Java-programmerare kan titta på för att försöka bilda sig en uppfattning om på vilket sätt Scala skulle kunna vara bättre än Java ?
Svar:
På denna webbplats finns just en sådan sida ("Scala för java-utvecklare") dvs en startsida som länkar vidare till några olika kodexempel som utgår från Java-kod och visar vad du skulle kunna vinna genom att i stället använda Scala.
Fråga:
Finns det några diskussionsgrupper där en nybörjare kan ställa frågor?
Svar:
Ja, det finns bl.a. ett forum som heter Scala User.
Det finns f.ö. också ett svenskt forum som heter Scala Sverige.
Fråga:
Vilken är den bästa utvecklingsmiljön för Scala ?
Svar:
Svaret på en sådan fråga brukar dels vara subjektivt och dels variera över tiden, men de vanligaste alternativen är f.n. (2010-02-02) antagligen de som länkas från Scala-sajtens sida "IDE and Editor plugins" d.v.s följande tre: Angående IntelliJ IDEA, så kan det vara värt att notera att den numera finns i en gratis "Community edition" (som inkluderar stöd för Scala via en plugin). Eclipse lär vara den s.k. "officiella" utvecklingsmiljön för Scala (dvs "Scala IDE for Eclipse" som länkas ovan) med en plugin-hemsida som alltså ligger under domänen scala-lang.org

Länkarna nedan innehåller lite mer information/åsikter om vilken IDE som är bäst för Scala-utveckling.
http://stackoverflow.com/questions/2127381/what-are-the-good-scala-ides-at-the-start-of-2010/2129936
http://theyougen.blogspot.com/2010/01/best-scala-ide-intellij-idea.html

/ Tomas Johansson, 2010