Scala
Koziołek
1 Podstawowe informacje
2 Cechy szczególne
2.1 Scala – język obiektowy
2.1.1 Traits
2.1.2 Object
2.2 Scala – język funkcyjny
2.2.3 Pattern matching
3 Powiązania
4 Zobacz też
Podstawowe informacje
Scala jest obiektowo-funkcyjnym językiem programowania, stworzonym pod kierownictwem Martina Odersky'ego na Politechnice w Lozannie w 2001 roku. Jego pierwsza stabilna wersja ukazała się w roku 2004, a wersja druga w 2006. Obecnie język jest dostępny w wersji 2.12.8; obsługiwane platformy: JVM, KVM CLDC oraz .NET (w tej ostatniej wersji może być nieaktualna).
Scala jest typowana statycznie, ale kompilator potrafi wnioskować typy, jeżeli nie są podane explicite.
Cechy szczególne
Scala wyróżnia się prostotą składni i jest stosunkowo łatwym do nauki językiem. Łączy w sobie cechy języków obiektowych oraz funkcyjnych. Programy w tym języku mogą być zarówno uruchamiane jako skrypty, jak i skompilowane do bytecodu JVM i uruchamiane jak zwykłe programy w Javie.
Scala – język obiektowy
Scala jako język obiektowy wyróżnia się brakiem typów prymitywnych, znanych z Javy. Ponadto wszystko jest traktowane jako obiekt (można zatem np. przeciążać operatory, które są traktowane jak metody). W języku tym dziedziczenie jest możliwe tylko z pojedynczej nadklasy (tak jak w Javie). Jednocześnie nie ma interfejsów; w ich miejsce wprowadzono tzn. Traits. Język udostępnia też specjalne klasy – object
, które są traktowane jak Singletony.
Traits
Trait jest charakterystyczną konstrukcją występującą w Scali. W najprostszym ujęciu jest to odpowiednik javowego interfejsu. Tak jak interfejs, definiuje tylko listę dostępnych metod i może być implementowany przez klasy; można też implementować wiele traitsów w ramach jednej klasy. Jednocześnie – w przeciwieństwie do interfejsu – trait może dostarczyć implementacji metod i zachowywać się jak mixin.
Przykładowy trait Ordered
dostarcza metod pozwalających na porównywanie obiektów:
trait Ordered[A]{
def compare(that: A): Int
def < (that: A): Boolean = (this compare that) < 0
def > (that: A): Boolean = (this compare that) > 0
def <= (that: A): Boolean = (this compare that) <= 0
def >= (that: A): Boolean = (this compare that) >= 0
def compareTo(that: A): Int = compare(that)
}
class Name(first:String, last:String) extends Ordered[Name] {
val firstName = first
val lastName=last
def compare(that: Name): Int = {
if (lastName.compareTo(that.lastName) == 0 ){
return firstName.compareTo(that.firstName)
}else{
return lastName.compareTo(that.lastName)
}
0
}
override def toString :String = {
return firstName+" " +lastName
}
}
Object
Jak już zostało wspomniane, object
jest to tak naprawdę Singleton, a cechę tę gwarantuje składnia języka oraz kompilator. Ponadto object
jest jedyną opcją na dostarczenie głównej metody programu (w Javie jest to metoda main
):
object Main {
def main(args: Array[String]): Unit = {
val a: Name = new Name("Adam", "Kowalski");
val b: Name = new Name("Bartek", "Kowalski");
val c: Name = new Name("Cezary", "Kowalski");
val names: List[Name] = List(a, c, b);
print( names.sort(_ < _)) ;
}
}
Scala – język funkcyjny
Scala pozwala też na wykorzystanie paradygmatu programowania funkcyjnego. W znacznym uproszczeniu oznacza to, że programista definiuje, co chce uzyskać – a sposób, w jaki zostanie wykonane polecenie, jest przeniesiony do biblioteki języka.
// sumowanie wszystkich elementów listy
List(1,3,4,2).foldLeft(0)(_ + _)
// iloczyn wszystkich elementów listy
List(1,3,4,2).foldLeft(1)(_ * _)
Pattern matching
Jest to cecha języka, która pozwala na wykonywanie kodu w zależności od określonych kryteriów. Cecha ta jest doskonale widoczna w przypadku bloków try
/catch
, które w Scali wyglądają następująco:
try {
// ...
} catch {
case ioe: IOException => ... // more specific cases first !
case e: Exception => ...
}
W ten sam sposób można uwarunkować kod:
names.foreach(_.firstName match {
case "Adam" => println("Moje imie jest biblijne")
case "Bartek" => println("Moje imie to zdrobnienie, ale od którego?")
case _ => println("Co ja tutaj robię?")
})
Powiązania
- W Scali powstał framework webowy Lift.
- W Scali tworzone są portale The Guardian oraz DSL Scalar służący do obsługi cloud coumputing
Zobacz też
- https://www.scala-lang.org/ – strona Scali
- https://liftweb.net/ – strona frameworka Lift
- https://www.infoq.com/articles/guardian_scala
- http://www.jroller.com/nivanov/entry/introducing_scalar_scala_based_dsl