Scala (langage)

Pour les articles homonymes, voir Scala.

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.

Cet article ne s'appuie pas, ou pas assez, sur des sources secondaires ou tertiaires (août 2020).

L'article peut contenir des analyses et interprétations inexactes ou inédites de sources primaires. Pour améliorer la vérifiabilité de l'article ainsi que son intérêt encyclopédique, il est nécessaire, quand des sources primaires sont citées, de les associer à des analyses faites par des sources secondaires.

Scala

* * *

Date de première version  | 20 janvier 2004
Paradigme | Objet, impératif, fonctionnel
Auteur  | Martin Odersky
Développeur  | Programming Methods Laboratory of EPFL
Dernière version | 3.7.1 (4 juin 2025)[1]
Typage  | Statique, fort, inféré, structurel
Influencé par  | Eiffel, Java, Pizza[2], Haskell, Erlang, Standard ML, OCaml, Smalltalk
Écrit en | Scala
Système d'exploitation | JVM, CLR
Licence | Licence Apache 2.0[3]
Site web | scala-lang.org
Extension de fichier | scala et sc
modifier

Scala est un langage de programmation multi-paradigme conçu à l'École polytechnique fédérale de Lausanne (EPFL) pour exprimer les modèles de programmation courants dans une forme concise et élégante. Son nom vient de l'anglais Scalable language qui signifie à peu près « langage adaptable » ou « langage qui peut être mis à l'échelle ». Il peut en effet être vu comme un métalangage.

Scala intègre les paradigmes de programmation orientée objet et de programmation fonctionnelle, avec un typage statique. Il concilie ainsi ces deux paradigmes habituellement opposés (à de rares exceptions près, telle que le langage OCaml) et offre au développeur la possibilité de choisir le paradigme le plus approprié à son problème.

Il est prévu pour être compilé en bytecode Java (exécutable sur la JVM), ou .NET. Seule la plateforme Java est supportée officiellement par l'EPFL.

Si on souhaite l'utiliser exclusivement avec la JVM, il est alors possible d'utiliser les bibliothèques écrites en Java de façon complètement transparente. Ainsi, Scala bénéficie de la maturité et de la diversité des bibliothèques qui ont fait la force de Java depuis une dizaine d'années. De plus, il est possible d'invoquer du code écrit en Scala à partir de programmes écrits en Java ce qui facilite la transition de Java à Scala.

Les développeurs habitués à un seul paradigme (par exemple ceux ayant utilisé principalement Java qui, lui, repose sur la programmation orientée objet) peuvent trouver ce langage déroutant et difficile car il nécessite l'apprentissage de concepts différents si on veut pouvoir exploiter tout son potentiel. Néanmoins, il est tout à fait possible de l'utiliser dans un premier temps comme remplaçant de Java, en profitant alors de sa syntaxe épurée, puis d'utiliser les différents « nouveaux » concepts au fur et à mesure de leur apprentissage.

## Histoire

[modifier | modifier le code]

Martin Odersky a commencé à développer Scala en 2001 à l'École Polytechnique Fédérale de Lausanne (EPFL). Après une diffusion interne fin 2003, Scala a été rendu public début 2004 sur la plateforme Java. Une seconde version a suivi en mars 2006.

En janvier 2011, Odersky et ses collaborateurs ont reçu un financement de recherche de 2,3 millions € provenant du Conseil européen de la recherche et ont lancé TypeSafe Inc. (renommé plus tard en Lightbend Inc. (en)), une compagnie de fourniture de support commercial et de services pour Scala.

## Fonctionnalités

[modifier | modifier le code]

Les caractéristiques techniques de Scala sont sensiblement les mêmes que celles de Java. La syntaxe de Scala est toutefois beaucoup plus flexible, ce qui facilite l'écriture et la relecture de code. Scala possède aussi un système de type unifié et des expressions de générateur (similaires à celles de Python) ainsi que de nombreuses fonctionnalités normalement utilisées en programmation fonctionnelle, comme l'évaluation paresseuse et le type algébrique de données.

## Exemple Hello World

[modifier | modifier le code]

Le programme Hello world écrit en Scala, à la manière de Java :

object HelloWorld {
def main(args: Array[String]) {
println("Hello, world!")

ou bien simplement sans déclaration de classe et de méthode statique, avec un simple objet singleton :

object HelloWorld extends App {
println("Hello, world!")

Un de ces deux exemples peut être enregistré dans un fichier `HelloWorld.scala` et compilé en ligne de commande :

`$ scalac HelloWorld.scala`

puis exécuté :

`$ scala -classpath . HelloWorld`

En utilisant Scala à la manière d'un langage de script :

println("Hello, world!")

et enregistré dans un fichier `HelloWorld2.scala`, puis exécuté directement en ligne de commande :

`$ scala HelloWorld2.scala`

Le code source peut aussi être fourni directement à l'interpréteur avec l'option -e :

`$ scala -e 'println("Hello, World!")'`

## Annexes

[modifier | modifier le code]

### Liens externes

[modifier | modifier le code]

* (en) Site officiel
*   *   * Notices d'autorité :
* BnF (données)
* IdRef
* LCCN
* GND
* Israël
* Tchéquie

* (en) Typesafe, la société fondée par Martin Odersky, le créateur de Scala, qui propose un support pour les utilisateurs professionnels et offre un ensemble officiel de logiciels (stack)), composé d'Akka et de Play (voir ci-dessous).

### Notes et références

[modifier | modifier le code]

1. ↑ a et b « Release 3.7.1 », 4 juin 2025
2. ↑ Martin Odersky et al., An Overview of the Scala Programming Language, 2nd Edition.
3. ↑ « https://www.scala-lang.org/news/2.12.8 » (consulté le 4 juillet 2019)

v · m

Paradigmes de programmation

Impérative |  | Structurée |

* Orientée composant
* Orientée objet
* Orientée aspects
* Orientée prototype
* Orientée classe

|

* Procédurale
* Événementielle

Déclarative |

* Fonctionnelle
* Logique
* Par contraintes
* Descriptive

Métaprogrammation |

* Réflexive
* Macros
* Patrons

Autres |

* Concurrente
* Par contrat
* Réactive
* Synchrone

Comparaison des langages de programmation multi-paradigmes

v · m

Langages de programmation

Concurrents |

* Ada
* Erlang
* Go
* Modula-2

Déclaratifs |

* Clips
* Prolog
* Mercury

Fonctionnels |

* Clojure
* Common Lisp
* Erlang
* F#
* Gallina
* Haskell
* Lisp
* ML
* OCaml
* Opa
* Scheme
* Standard ML

Impératifs |

* Algol
* APL
* Assembleur
* Basic
* BCPL
* C
* Cobol
* DOPE
* Forth
* Fortran
* Julia
* Limbo
* Lua
* Modula-2
* MUMPS
* Natural
* NQC
* NXC
* OPL
* Pascal
* Perl
* PL/I
* RPG
* PowerShell
* Rust
* Tcl
* WLangage

Orientés objet |

* ActionScript
* AppleScript
* C++
* C#
* CoffeeScript
* D
* Delphi
* Eiffel
* Groovy
* Haxe
* Java
* JavaScript
* Lisaac
* Logo
* Objective-C
* PHP
* Python
* Ruby
* Scala
* Scratch
* Simula
* Smalltalk
* Swift
* Kotlin
* Visual Basic

* Liste de langages de programmation

* Portail de la programmation informatique

*[(en)]: Langue : anglais
*[v]: Voir ce modèle.
*[m]: Modifier ce modèle. Merci de prévisualiser avant de sauvegarder.