J'entends beaucoup ce mot dans des phrases comme "JavaScript est un langage très expressif". Cela signifie-t-il juste qu'il n'y a pas beaucoup de règles ou "expressif" a-t-il une signification plus précise?
"Expressive" signifie qu'il est facile d'écrire du code facile à comprendre, tant pour le compilateur que pour un lecteur humain.
Deux facteurs qui font l'expressivité:
Comparez cette groovy expressif, avec moins expressif Java équivalent:
3.times {
println 'Hip hip hooray'
}
vs
for(int i=0; i<3; i++) {
System.out.println("Hip hip hooray");
}
Parfois, vous négociez la précision pour l'expressivité - l'exemple groovy fonctionne car il suppose des choses que Java vous permet de spécifier explicitement.
Je suppose que cela signifie que c'est capable de exprimer idées/algorithmes/tâches de manière facile à lire et succincte.
Habituellement, j'associe une langue expressive avec le sucre syntaxique, bien que ce n'est pas toujours le cas. Des exemples en C # de celui-ci étant expressif seraient:
foreach
(au lieu d'écrire explicitement l'itération)using
(au lieu d'écrire explicitement l'essai/enfin)Un exemple différent serait des génériques: avant C # obtenu des génériques, vous ne pouviez pas exprimer l'idée de "An ArrayList
contenant uniquement des chaînes" dans le code. (Vous pouvez le documenter, bien sûr, ou écrire votre propre type StringList
Type, mais ce n'est pas tout à fait pareil.)
NEAL GRAFTER a un blog avec une bonne citation de celle-ci sur le sujet ...
Dans mon esprit, une construction de langue est expressive si elle vous permet d'écrire (et d'utiliser) une API qui ne peut pas être écrite (et utilisée) sans la construction.
Je dirais que cela signifie que vous pouvez plus que Naturaly exprime vos pensées dans le code.
C'est difficile.
Pour moi, cela a à voir avec la facilité pour laquelle vous pouvez exprimer votre intention. Ceci est différent dans différentes langues et dépend aussi beaucoup de ce que vous voulez faire, il s'agit donc d'une zone où les généralisations sont courantes. Il est également subjectif et personnel, bien sûr.
Il est facile de penser qu'un langage plus élevé est toujours plus expressif, mais je ne pense pas que ce soit vrai. Cela dépend de ce que vous essayez d'exprimer, c'est-à-dire sur le domaine problématique.
Si vous vouliez imprimer le numéro de point flottant qui a le motif binaire 0xdeadbeef
, c'est beaucoup plus facile à faire en C que dans Bash, par exemple. Pourtant, Bash est, comparé à C, une langue ultra-élevée. D'autre part, si vous souhaitez exécuter un programme et collecter sa sortie dans un fichier texte, c'est si simple qu'il est presque invisible dans BASH, mais nécessiterait au moins une page de code en C (en supposant un environnement POSIX).
Ici, une comparaison très controversée:
http://redmonk.com/dberkholz/2013/03/25/programmation-Languages-Ranked-By-Expressivité/
Alors, quelles sont les meilleures langues de ces métriques?
Si vous choisissez le top 10 basé sur le classement par médiane et par IQR, alors prenez l'intersection d'eux, voici ce qui reste. La médiane et l'IQR sont énumérées immédiatement après les noms:
Augeas (48, 28): langues spécifiques à un domaine pour les fichiers de configuration
Puppet (52, 65): une autre DSL pour la configuration Rebol (57, 47): une langue conçue pour l'informatique distribuée
cE (75, 75): ECEER C, un dérivé C avec orientation de l'objet
Coffeescript (100, 23): une langue de niveau supérieur qui transcompose à JavaScript
Clojure (101,51): Un dialecte LISP pour la programmation fonctionnelle et simultanée
Vala (123, 61): une langue orientée objet utilisée par Gnome
Haskell (127, 71): une langue purement fonctionnelle et compilée avec une typographie solide
Peut-être que ce site http://gafter.blogspot.com/2007/03/on-expresive-power-of-programming.html peut vous aider
en bref, il dit : dans mon esprit, un la construction de langue est expressif Si cela vous permet d'écrire (et d'utiliser) une API qui ne peut pas être écrite (et utilisée) sans la construction. Dans le contexte des fermetures de Java Extension de langue proposée, les API d'abstraction de contrôle sont le genre de chose qui ne semble pas être soutenue par les propositions concurrentes.