Come determinare se un linguaggio di programmazione è dettagliato o conciso?


17

I linguaggi di programmazione possono spesso essere descritti come dettagliati o concisi .

Secondo la mia comprensione, un linguaggio verboso è facile da leggere e capire, mentre un linguaggio conciso è conciso e ordinato, ma più difficile da leggere. Dovrebbero esserci altre cose da considerare nelle definizioni?

Sembra che molti dei linguaggi di programmazione popolari di oggi siano prolissi, e questi termini due termini sono usati solo per descrivere un linguaggio come più o meno, rispetto ad un altro linguaggio.

Come determinare se un linguaggio di programmazione è più dettagliato / conciso rispetto a un altro?

Esempio: C # è più dettagliato di Java?

Risposte:


30

Secondo la mia comprensione, un linguaggio verboso è facile da leggere e capire, mentre un linguaggio conciso è conciso e ordinato, ma più difficile da leggere.

Questo è falso Verbose significa molti simboli. Terse significa meno simboli.

Ciò non ha nulla a che fare con la facilità di lettura o la comprensione.

Alcune persone trovano COBOL prolisso facile da leggere, altre lo trovano confuso perché sono necessari così tanti simboli per fare così poco.

Alcune persone trovano che I / J / K e APL siano facili da leggere perché il programma è molto breve. Altri trovano difficile da leggere perché i simboli sono oscuri.

Terse / Verbose non ha alcuna relazione con facile da leggere o da capire.

Dovrebbero esserci altre cose da considerare nelle definizioni?

No. Le definizioni di terse e verbose vanno bene.

L'importante è che queste definizioni non abbiano nulla a che fare con "facile da leggere e comprendere"

Sembra che molti dei linguaggi di programmazione popolari di oggi siano prolissi.

Veramente?

Come determinare se un linguaggio di programmazione è più dettagliato / conciso rispetto a un altro?

Conta i token per fare qualcosa.

Add 2 TO A GIVING B.

7 token

b = a + 2;

6 token

http://dictionary.reference.com/browse/verbose

http://dictionary.reference.com/browse/terse


5
+1 per "Terse / Verbose non ha alcuna relazione con facile da leggere o da capire". Penso sempre alla notazione matematica che, se eseguita correttamente, è notevolmente densa ma ancora relativamente leggibile.
Frank Shearar,

5
@sunpech: ecco cosa significano le parole inglesi. "verbose" significa molte parole. "conciso" significa meno parole. Niente a che vedere con la leggibilità. Conta semplicemente le parole. Tutto quello che ho fatto è stato sostituire "parola" con "token". È solo inglese, niente di speciale.
S.Lott

1
Potremmo anche considerare la lunghezza dei token. Il Lisp comune sembra prolisso perché molte delle parole chiave sono lunghe e ciò aumenta anche la verbosità di COBOL.
David Thornley,

1
@Frank Shearar: assolutamente falso, pensa al tempo impiegato dagli studenti per imparare la matematica. È illeggibile il più possibile (matematica seria) e anche dopo 6 anni di istruzione secondaria la maggioranza non è ancora in grado di leggerlo seriamente. Non essere illeggibile non è male! Ma dire che la matematica è una notazione leggibile è un commento miope per non dire altro.
David Mulder,

2
@DavidMulder: la notazione matematica varia selvaggiamente, quindi sospetto che entrambi commettiamo peccati di iperbole. Sicuramente consideri trasparente la notazione per algebra, teoria degli insiemi, calcolo di base? D'altra parte, considero la notazione astratta dei tensori come una sciocchezza illeggibile. (Ma poi, anche io non mi sono preso il tempo per imparare correttamente la notazione.)
Frank Shearar,

6

Come determinare se un linguaggio di programmazione è più dettagliato / conciso rispetto a un altro?

Confrontando i costrutti di linguaggio equivalente o simile, in particolare come lo stesso compito o equivalente può essere risolto in una lingua rispetto all'altra.

C # è più dettagliato di Java?

Java è in generale più dettagliato di C #. Le differenze più ovvie includono i delegati e le espressioni lambda, in cui Java richiede la definizione, la sottoclasse e l'istanza di un'interfaccia distinta al fine di ottenere ciò che è possibile fare utilizzando un'unica espressione lambda in C #.


1
Java ora supporta le espressioni lambda con Java 8 ( docs.oracle.com/javase/tutorial/java/javaOO/… )
shanraisshan,

1
@shanraisshan: sì, è migliorato nel tempo, ma AFAIK Java è ancora un po 'più prolisso. Ad esempio, nei documenti a cui ti sei collegato, il codice contiene molte p.getAge()istruzioni. In C #, creerei una proprietà Age, che porta lo stesso grado di incapsulamento di una funzione membro getAge, ma consente invece di scrivere p.Age.
Doc Brown,

1
Inoltre, mentre Java è migliorato, C # non è stato esattamente un obiettivo statico ... Nuove funzionalità poiché questa risposta come le funzioni del generatore e asincrono / attendono servono anche a consentire al codice C # di essere più corto dell'equivalente Java.
Jules, il

3

Dai uno snippet di codice al non programmatore e chiedi a lui / lei di spiegare cosa sta cercando di fare lo snippet. Se ottieni la risposta più vicina, allora è dettagliata. se ottieni l'espressione WTF, allora è concisa.


2

La misura si chiama espressività della lingua. La metrica tipica per questo è misurare linee di codice standardizzate o istruzioni necessarie per implementare la stessa funzionalità.

Alcuni valori dal Wiki: quante istruzioni / righe di codice C sono necessarie per implementare una funzionalità di un'istruzione / riga in:

  • Dichiarazioni C: 1 righe: 1
  • C ++ - istruzioni: 2,5 righe: 1
  • Fortran - dichiarazioni: 2,5 righe: 0,8
  • Java - istruzioni: 2.5 righe: 1.5
  • Perl - dichiarazioni: 6 righe: 6
  • Smalltalk - dichiarazioni: 6 righe: 6.25
  • Python - istruzioni: 6 righe: 6.5

Penso che il fatto che una di queste misurazioni suggerisca che FORTRAN è più espressivo di C di un certo margine (!) Mentre l'altro afferma il contrario affermando che C ++ è ugualmente espressivo di C (!!) riassume l'utilità di tali "metriche ".
Jules, il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.