69 votes

Que signifie le terme "expressif" en référence aux langages de programmation ?

J'entends souvent ce mot dans des phrases comme "javascript est un langage très expressif". Est-ce que cela signifie simplement qu'il n'y a pas beaucoup de règles, ou est-ce que "expressif" a une signification plus spécifique ?

58voto

slim Points 12620

Le terme "expressif" signifie qu'il est facile d'écrire du code facile à comprendre, tant pour le compilateur que pour un lecteur humain.

Deux facteurs qui permettent l'expressivité :

  • des constructions lisibles intuitivement
  • l'absence de code passe-partout

Comparez cette version expressive de Groovy avec l'équivalent moins expressif de Java :

3.times {
   println 'Hip hip hooray'
}

vs

for(int i=0; i<3; i++) {
    System.out.println("Hip hip hooray");
}

Parfois, il faut échanger la précision contre l'expressivité. L'exemple de Groovy fonctionne parce qu'il suppose des choses que Java vous oblige à spécifier explicitement.

17voto

Jon Skeet Points 692016

Je suppose que ça veut dire qu'il est capable de exprimant les idées/algorithmes/tâches d'une manière facile à lire et succincte.

En général, j'associe l'expressivité d'un langage au sucre syntaxique, même si ce n'est pas toujours le cas. En C#, des exemples d'expressivité seraient :

  • foreach (au lieu d'écrire explicitement l'itération)
  • le site using (au lieu d'écrire explicitement l'instruction try/finally)
  • expressions de requête (syntaxe plus simple pour écrire des requêtes LINQ)
  • méthodes d'extension (permettant le chaînage d'appels de méthodes, là encore principalement pour LINQ)
  • méthodes anonymes et expressions lambda (permettant de construire plus facilement des délégués et des arbres d'expression)

Un autre exemple serait celui des génériques : avant que le C# ne dispose de génériques, vous ne pouviez pas exprimer l'idée d'"un ArrayList contenant uniquement des chaînes de caractères" en code. (Vous pourriez le documenter, bien sûr, ou écrire votre propre StringList mais ce n'est pas tout à fait la même chose).

10voto

TofuBeer Points 32441

Neal Grafter a un blog avec une bonne citation sur le sujet...

Dans mon esprit, une construction de langage est expressive si elle vous permet d'écrire (et d'utiliser) une API qui ne peut être écrite (et utilisée) sans l'aide d'un autre langage. (et d'utiliser) une API qui ne peut pas être écrite (et utilisée) sans cette construction.

Je dirais que cela signifie que vous pouvez exprimer plus naturellement vos pensées en code.

5voto

unwind Points 181987

C'est une question difficile.

Pour moi, il s'agit de la facilité avec laquelle vous pouvez exprimer votre intention. Cela varie d'une langue à l'autre et dépend aussi beaucoup de ce que vous voulez faire, c'est donc un domaine où les généralisations sont courantes. C'est aussi subjectif et personnel, bien sûr.

Il est facile de penser qu'un langage de plus haut niveau est toujours plus expressif, mais je ne pense pas que ce soit le cas. Cela dépend de ce que vous essayez d'exprimer, c'est-à-dire du domaine du problème.

Si vous voulez imprimer le nombre à virgule flottante qui a le modèle binaire 0xdeadbeef qui est beaucoup plus facile à faire en C qu'en Bash, par exemple. Pourtant, Bash est, comparé au C, un langage de très haut niveau. D'un autre côté, si vous voulez exécuter un programme et collecter sa sortie dans un fichier texte, c'est tellement simple que c'est presque invisible dans Bash, mais cela nécessiterait au moins une page de code en C (en supposant un environnement POSIX).

3voto

Yardena Points 1640

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X