web-dev-qa-db-fra.com

Que signifie "expressif" lorsque vous faisant référence à des langages de programmation?

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?

67
morgancodes

"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é:

  • constructions intuitivement lisibles
  • manque de code de la chaudron

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.

58
slim

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)
  • la déclaration using (au lieu d'écrire explicitement l'essai/enfin)
  • expressions de requête (syntaxe plus simple pour écrire des requêtes LINQ)
  • méthodes d'extension (permettant la chaîne des appels de méthode, à nouveau principalement pour LINQ)
  • méthodes anonymes et expressions Lambda (permettant la construction de délégués et d'expression plus faciles)

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.)

16
Jon Skeet

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.

10
TofuBeer

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).

5
unwind
3
Yardena

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

2
AA.

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.

1
TStamper