Temas pri... Ĉi tiu artikolo temas pri la programlingvo *Scala*. Por aliaj signifoj vidu la artikolon Scala.

**Scala** reprezentas kunigon de vaste aplikataj objektemaj konceptoj kun la ĝis 2002 ĉefe akademie uzataj konceptoj de funkcia programado en statike tipsekura formo.

Ĝi heredis sian sintaksan aspekton pere de Java el C. La stirstrukturoj parte tre similas al Java (if, while, try-catch); la for-ripeto kaj la match-disbranĉiĝo havas multe pli grandan uzeblecon ol siaj respondaĵoj en Java. Ĝi heredis la objektorientitajn konceptojn ĉefe de Java, sed ankaŭ plifleksebligis ilin per kapablo enmiksi trajtojn (parte realigitajn interfacojn). Ĝi heredis la tipsistemon de ML kaj la funkcian programadon kun prokrastita elkalkulado de Haskell.

Scala (prononcu *skala*) estas mallongigo de *"scalable language"* (pligrandigebla lingvo).

Ĝi ruliĝas sur Java-virtualmaŝinoj kaj povas komforte voki tradukitajn Java-programojn kaj esti vokitaj de ili. Tial ĝi povas uzi la grandegan kvanton de ekzistantaj Java-bibliotekoj.

Varianto por uzado sur la .NET platformo de Microsoft ekzistas, sed ne havas tiom da adeptoj kiel la JVM-varianto.

Objektema Programado
--------------------

Scala estas pura objektema programlingvo, ĉar ĉiu valoro en ĝi estas objekto. Datumtipoj kaj kondutoj de objektoj estas difinitaj en klasoj kaj trajtoj. Klasoj estas etendataj per subklasado kaj per fleksebla kombinado de trajtoj, kiu helpas eviti problemojn de pluropa heredado.

Funkcia programado
------------------

Aldone al objektema programado, Scala subtenas funkcian programadon. La lingvo provizas malpezan sintakson por difinado de sennomaj funkcioj, subtenas funkcioj de pli alta ordo, permesas ingitaj funkcioj, kaj karadon. Per ŝlosilvorto **lazy** eblas malfruigi pravalorizon de valoro ĝis ĝi estos uzata. Disigitaj daŭrigadoj estas subtenataj de versio 2.8.

Ekzemplo
--------

Jen tradicia Saluton, mondo! programo en Scala:

```
object SalutonMondo extends App {
 println("Saluton, mondo!")
}

```

Se la programo estos konservita kiel `SalutonMondo.scala`, la sekva komando kompilos la dosieron:

`> scalac SalutonMondo.scala`

Por startigi:

`> scala -classpath. SalutonMondo`

Scala programoj ankaŭ povas esti startigitaj kiel skriptoj. Ekzemple, la sekva unulinia skripto donos la saman rezulton, kiel antaŭa ekzemplo:

```
println("Saluton, mondo!")

```

Por startigi la skripton (konservitan en `SalutonMondo2.scala`):

`> scala SalutonMondo2.scala`

Versioj
-------

* **Scala 1** (2001): la baza lingvo
* **Scala 2** ĝis **Scala 2.7**
* **Scala 2.8** (2010): granda reformo kaj plibonigo de la lingvo, meritus nomiĝi Scala 3.
	+ biblioteko kun multaj malgrandaj hokoj por aliri la Scala-tradukilon por uzado ene de IDE-oj
	+ nomitaj parametroj
* **Scala 2.9** (2011): kelkaj novaj eblecoj aldonitaj al bibliotekoj kaj ilaro, sed la bazo de la lingvo ne ŝanĝas kompare al versio 2.8.1.
	+ paralelaj kolektoj
	+ trajto App - pli sekura kaj pli potenca alternativo al trajto Application, kiu estos forigita
	+ trajto DelayedInit
	+ plibonigita interaga interpretilo (REPL)
	+ plifaciligita startigago de programoj skribitaj en Scala
	+ plibonigita intertrakteblo kun Java
	+ multaj aliaj plibonigoj kaj cimoriparoj
* **Scala 2.9.1** (2011): multaj plibonigoj kaj cimoriparoj.

Fontoj
------

1. ↑  angle Scala's Prehistory
2. ↑  angle Aktuala versio de Scala
3. ↑  angle Scala 2.9.0 final
4. ↑  angle Scala 2.9.1 final

Eksteraj ligiloj
----------------

* angle Oficiala retejo