Ce înseamnă „expresivă“ înseamnă atunci când se referă la limbaje de programare?

voturi
56

Am auzit acest cuvânt în multe fraze de genul „JavaScript este un limbaj foarte expresiv“. Are doar înseamnă că nu sunt o mulțime de reguli, sau nu „expresivă“ au un sens mai specific?

Întrebat 12/03/2009 la 13:32
sursa de către utilizator
În alte limbi...                            


7 răspunsuri

Publicat 12/03/2009 la 13:36
sursa de către utilizator

voturi
14

Să înțeleg să însemne că este capabil de a exprima idei / algoritmi / sarcini într - un mod ușor de citit și succinte.

De obicei, am asocia un limbaj expresiv fiind cu zahăr sintactic, deși nu este întotdeauna cazul. Exemple în C # de a fi expresiv ar fi:

  • foreach (În loc de scris, în mod explicit iterație)
  • usingdeclarația ( în loc de a scrie în mod explicit încercați / în cele din urmă)
  • expresii de interogare (sintaxă mai simplă pentru interogări de scriere LINQ)
  • metode de extensie (care să permită înlănțuire de apeluri de metode, din nou, în primul rând pentru LINQ)
  • metode anonime și expresii lambda (care permit mai ușor și delegat copac expresie construcții)

Un alt exemplu ar fi generice: înainte de C # a primit medicamente generice, nu ai putut exprima ideea de „o ArrayListconțin numai siruri de caractere“ în cod. (Ai putea documenta, desigur, sau scrie opinia ta StringListtip, dar asta nu e chiar la fel.)

Publicat 12/03/2009 la 13:36
sursa de către utilizator

voturi
10

Neal are un blog cuțit pentru altoit cu un citat bun de la ea pe acest subiect ...

În mintea mea, o construcție de limbaj este expresiv în cazul în care vă permite să scrie (și de a folosi) un API care nu poate fi scris (și utilizate), fără constructul.

Aș spune că aceasta înseamnă că puteți exprima mai mult naturaly gândurile în cod.

Publicat 12/03/2009 la 13:37
sursa de către utilizator

voturi
1

Poate ca acest site http://gafter.blogspot.com/2007/03/on-expressive-power-of-programming.html vă poate ajuta

Pe scurt , el spune : În mintea mea, o construcție de limbaj este expresiv în cazul în care vă permite să scrie (și de a folosi) un API care nu poate fi scris (și utilizate) , fără constructul. În contextul închiderile extensie a limbajului Java propuse, API - uri de control abstractizare sunt genul de lucru pe care nu par să fie susținute de propunerile concurente.

Publicat 12/03/2009 la 13:38
sursa de către utilizator

voturi
4

Asta e dur.

Pentru mine, ea are de a face cu ușurința la care vă puteți exprima intenția dumneavoastră. Acest lucru este diferit în diferite limbi, și, de asemenea, depinde foarte mult de ceea ce doriți să faceți, astfel încât acesta este un domeniu în care generalizări sunt comune. Este, de asemenea, subiective și personale, desigur.

Este ușor să ne gândim că un limbaj mai nivel înalt este întotdeauna mai expresiv, dar nu cred că este adevărat. Depinde de ceea ce încercați să-și exprime, și anume pe domeniul problemei.

Dacă ați fi dorit să imprimați numărul în virgulă mobilă care are modelul binar 0xdeadbeef, care este mult mai ușor de făcut în C decât în Bash, de exemplu. Cu toate acestea , Bash este, în comparație cu C, un limbaj de nivel înalt ultra-. Pe de altă parte, dacă doriți să rulați un program și se colectează ieșirea sa într - un fișier text, care este atât de simplu este aproape invizibil în Bash, dar ar avea nevoie de cel puțin o pagină de cod în C (presupunând un mediu POSIX).

Publicat 12/03/2009 la 13:39
sursa de către utilizator

voturi
50

„Expressive“ înseamnă că este ușor de a scrie cod care este ușor de înțeles, atât pentru compilator și pentru un cititor uman.

Doi factori care fac pentru expresivitate:

  • constructe intuitiv care pot fi citite
  • lipsa de cod boilerplate

Comparați acest expresiv Groovy, cu eqivalent Java mai puțin expresiv:

3.times {
   println 'Hip hip hooray'
}

vs

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

Uneori tranzactionati de precizie pentru expresivitate - exemplul Groovy funcționează pentru că se presupune lucruri pe care Java face să specificați în mod explicit.

Publicat 12/03/2009 la 13:41
sursa de către utilizator

voturi
2

Aici, o comparație foarte controversată:

http://redmonk.com/dberkholz/2013/03/25/programming-languages-ranked-by-expressiveness/

Deci, care sunt cele mai bune limbaje de către aceste valori?

Dacă alegeți top 10 bazat pe clasament în funcție de mediana și de IQR, apoi să ia intersecția dintre ei, aici e ceea ce a mai rămas. Mediana și IQR sunt enumerate imediat după nume:

Augeas (48, 28): Un limbi specifice domeniului pentru fișierele de configurare

Păpuși (52, 65): Un alt DSL pentru REBOL de configurare (57, 47): Un limbaj proiectat pentru calcul distribuit

eC (75, 75): Ecere C, un derivat C cu orientare obiect

CoffeeScript (100, 23): Un limbaj de nivel superior, care transcompiles JavaScript

Clojure (101,51): Un dialect Lisp pentru programare funcțională, concurentă

Vala (123, 61): Un limbaj de programare orientat-obiect utilizat de GNOME

Haskell (127, 71): A, limbaj pur funcțional compilat cu tastarea statică puternică

Publicat 21/10/2014 la 13:39
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more