Wprowadzenie

Scala jest nowoczesnym, wieloparadygmatowym językiem programowania zaprojektowanym do wyrażania powszechnych wzorców programistycznych w zwięzłym, eleganckim i bezpiecznie typowanym stylu. Scala płynnie integruje ze sobą cechy języków funkcyjnych i zorientowanych obiektowo.

Scala jest zorientowana obiektowo

Scala jest czysto obiektowym językiem w tym sensie, że każda wartość jest obiektem. Typy oraz zachowania obiektów są opisane przez klasy oraz cechy. Klasy są rozszerzane przez podtypowanie i elastyczny mechanizm kompozycji domieszek jako zastępnik dla wielodziedziczenia.

Scala jest funkcyjna

Scala jest też funkcyjnym językiem w tym sensie, że każda funkcja jest wartością. Scala dostarcza lekką składnię do definiowana funkcji anonimowych, wspiera funkcje wyższego rzędu, pozwala funkcjom, by były zagnieżdżone, a także umożliwia rozwijanie funkcji. Klasy przypadków oraz wbudowane wsparcie dla dopasowania wzorców wprowadzają do Scali mechanizm typów algebraicznych stosowany w wielu funkcyjnych językach programowania. Obiekty singleton są wygodną metodą grupowania funkcji, które nie należą do żadnej klasy.

Ponadto mechanizm dopasowania wzorca w naturalny sposób rozszerza się do obsługi przetwarzania danych w formacie XML z pomocą wzorców sekwencji ignorujących prawą stronę, z wykorzystaniem rozszerzeń obiektów ekstraktorów. W tym kontekście instrukcje for są użyteczne w formułowaniu zapytań. Ta funkcjonalność sprawia, że Scala jest idealnym językiem do tworzenia aplikacji takich jak usługi sieciowe.

Scala jest statycznie typowana

Scala posiada ekspresywny system typów zapewniający, że abstrakcje są używane w sposób zgodny oraz bezpieczny. W szczególności system typów wspiera:

Mechanizm lokalnej inferencji typów sprawia, że nie jest konieczne podawanie nadmiarowych informacji o typach w programie. W połączeniu te funkcje języka pozwalają na bezpiecznie typowane ponowne wykorzystanie programistycznych abstrakcji.

Scala jest rozszerzalna

W praktyce rozwiązania specyficzne dla domeny wymagają odpowiednich rozszerzeń języka. Scala dostarcza unikalne mechanizmy, dzięki którym można łatwo dodawać nowe konstrukcje do języka w postaci bibliotek:

Powyższe mechanizmy pozwalają na definicję nowych rodzajów wyrażeń bez potrzeby rozszerzania składni języka czy też wykorzystywania meta-programowania w postaci makr.

Scala jest zaprojektowana tak, aby współpracować dobrze ze środowiskiem uruchomieniowym JRE oraz językiem Java. Funkcje Javy takie jak adnotacje oraz typy generyczne posiadają swoje bezpośrednie odwzorowanie w Scali. Unikalne funkcje Scali, jak na przykład domyślne wartości parametrów oraz nazwane parametry, są kompilowane tak, aby zachować jak największą zgodność z Javą. Scala ma także taki sam model kompilacji (oddzielna kompilacja, dynamiczne ładowanie klas), dzięki czemu umożliwia korzystanie z całego ekosystemu Javy.