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 ?
Réponses
Trop de publicités?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.
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).
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.
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).