Syftet med denna sida är att ge några konkreta kodexempel för svenska Java-utvecklare (och även för engelskspråkiga via de mer fullständiga kodexemplen som nedansammanfattas på svenska) som illustrerar på vilket sätt Scala kan vara bättre än Java.
Självklart finns det massor av potentiella exempel, men den som är seriöst intresserad kommer förstås att läsa en eller flera böcker om Scala.
Målgruppen för den här sidan är inte de som redan är frälsta, utan snarare vanliga Java-utvecklare som egentligen inte brukar vara tillräckligt intresserade för att fördjupa sig i
ett nytt programmeringsspråk (men som kanske kommer att bli det är förstås en förhoppning).
Målsättningen för exemplen nedan är alltså att främst jämföra med Java-kod som kan kännas onödigt omständlig och att visa hur man skulle kunna göra
på ett alternativt sätt om man i stället skulle implementera och kompilera sina JVM-class-filer med Scala-källkod i stället för med vanlig Java-källkod.
Genom att ha ett tydligt fokus på Java, med Java-klasser (t.ex. JUnit-klasser) och Java-interface i exemplen, som samarbetar med lite Scala-kod, så bör det också framgå att det är möjligt att
gradvis börja använda Scala, tack vare kompatibiliteten med Java. (se även FAQ angående kompatibilitet mellan Scala och Java)
Scala är kompatibelt med Java och dess tredjepartsbibliotek.
Interoperabiliteten illustreras med ett kodexempel som använder sig av två tredjepartskomponenter, bl.a. Spring framework,
för att implementera ett Java-interface med både en Java-implementation och en Scala-implementation.
Java-interfacet (och implementationen förstås) använder sig också av en entitetsklass som är implementerad med Scala.
Mer information
Scala är mer objektorienterat än Java.
Visserligen uppmuntras ofta en funktionell programmeringsstil av Scala-utvecklare, men det är också värt att notera att Scala har bättre stöd för objektorientering än i Java.
Mer information
Scala-kod är mindre redundant än motsvarande Java-kod. Det är bl.a. enklare/snabbare (dvs mer produktivt) och kräver färre dupliceringar att skapa en entitetsklass med Scala jämfört med att skapa motsvarande klass med Java.
Generellt används också typ-inferens för att undvika den duplicerade typningen som krävs i Java, men observera ändå att Scala är mycket statiskt typat, dvs man får hela tiden hjälp
med kompileringsfel om inte kompilatorn kan härleda typen och därför kräver explicit typning.
Mer information
Scala kan använda en funktion som parameter i stället för interface med en metod När man har en begränsad mängd med kodduplicering i Java kan det vara svårt att bli av med den, utan omständligt kodande som ger en totalt större kodmängd som slutresultat,
när man måste skapa och instansiera ett interface med duplicerade metodsignaturer
Mer information
Scala behöver inte hantera checked exceptions När du programmerar med Java kanske du tycker det är omständligt att antingen behöva deklarera checked exceptions i alla metodsignaturer i anropskedjan,
eller så brukar du kanske undvika det genom att fånga och wrappa det i ett unchecked exception. Om du programmerar med Scala så behöver du inte göra det, och inte ens
om du implementerar en Java-interface-metod som deklarerar ett checked exception så behöver du bry dig om det, utan Scala kan kasta vidare ett checked exception som om det vore unchecked.
Mer information
Scala kan undvika kod-duplicering bl.a. tack vare 'mixins' Java saknar multipelt arv, vilket medför viss duplicering även om man kan återanvända mycket kod via 'object composition'.
Med Scala's så kallade 'traits' så kan man använda 'mixin composition' för att reducera duplicerad kod.
Mer information
Scala-instanser kan implementera ett interface utan att dess klass behöver göra det Med Java så kan man inte lika enkelt utnyttja polymorfism på objekt från olika klasser
om inte båda klasserna är formellt definierade som subtyper till samma bastyp, utan då måste man
skapa nya egna klasser som implementerar det egna interfacet. Om man däremot använder Scala
så kan man vid instansieringen av ett objekt säga till kompilatorn att instansen skall
implementera ett Java interface (eller 'Scala trait').
Mer information
Scala erbjuder funktionalitet som delvis kan jämföras med LINQ Scala har, till skillnad från Java, kraftfulla möjligheter att filterera och transformera kollektioner (man kan t.ex. skriva 'for expressions' som liknar LINQ som används i C#.NET).
Mer information
Scala inkluderar direkt stöd för Xml som en egen datatyp Konkret betyder detta bl.a. att man kan skriva följande scala-kod:
val someXml = <a><b myattribute="foo">Hello</b></a>
println(someXml.getClass.getName) // resulterande output: "scala.xml.Elem"
println(someXml \ "b" \ "@myattribute") // resulterande output: "foo" Detta Xml-stöd är ganska betydelsefullt för t.ex. webb-ramverket Lift.
Mer information
På följande externa sidor kan du hitta fler länkar till information av typen "Scala for Java developers":