Wie kann man feststellen, ob eine Programmiersprache ausführlich oder knapp ist?

17

Programmiersprachen können oft als ausführlich oder knapp beschrieben werden .

Nach meinem Verständnis ist eine wörtliche Sprache leicht zu lesen und zu verstehen, während eine knappe Sprache knapp und ordentlich ist, aber schwieriger zu lesen. Sollten die Definitionen andere Aspekte enthalten?

Es scheint, dass viele der populären Programmiersprachen von heute wortreich sind, und diese Begriffe werden nur verwendet, um eine Sprache als mehr oder weniger relativ zu einer anderen Sprache zu beschreiben.

Wie stellen wir fest, ob eine Programmiersprache ausführlicher ist als eine andere?

Beispiel: Ist C # ausführlicher als Java?

Schwamm
quelle

Antworten:

30

Nach meinem Verständnis ist eine wörtliche Sprache leicht zu lesen und zu verstehen, während eine knappe Sprache knapp und ordentlich ist, aber schwieriger zu lesen.

Das ist falsch. Verbose bedeutet viele Symbole. Knapp bedeutet weniger Symbole.

Dies hat nichts mit dem einfachen Lesen oder Verstehen zu tun.

Einige Leute finden COBOL einfach zu lesen, andere finden es verwirrend, weil so viele Symbole erforderlich sind, um so wenig zu tun.

Einige Leute finden knappe I / J / K und APL einfach zu lesen, weil das Programm sehr kurz ist. Andere finden es schwer zu lesen, weil die Symbole undeutlich sind.

Terse / Verbose hat keine Beziehung zu leicht zu lesen oder leicht zu verstehen.

Sollten die Definitionen andere Aspekte enthalten?

Nein. Die Definitionen von knapp und wortreich sind in Ordnung.

Wichtig ist, dass diese Definitionen nichts mit "einfach zu lesen und zu verstehen" zu tun haben.

Es scheint, dass viele der populären Programmiersprachen von heute ausführlich sind.

"Ja wirklich?"

Wie stellen wir fest, ob eine Programmiersprache ausführlicher ist als eine andere?

Zähle die Token, um etwas zu erledigen.

Add 2 TO A GIVING B.

7 Spielmarken

b = a + 2;

6 Spielmarken

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

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

S.Lott
quelle
5
+1 für "Terse / Verbose hat keine Beziehung zu leicht zu lesen oder leicht zu verstehen." Ich denke immer an die mathematische Notation, die, wenn sie richtig gemacht wird, bemerkenswert dicht und dennoch relativ lesbar ist.
Frank Shearar
5
@sunpech: Das ist, was die englischen Wörter bedeuten. "wortreich" bedeutet viele Wörter. "knapp" bedeutet weniger Wörter. Mit Lesbarkeit nichts zu tun. Nur das Wort zählt. Ich habe nur "word" durch "token" ersetzt. Es ist nur Englisch, nichts Besonderes.
S.Lott
1
Wir könnten auch die Länge der Token berücksichtigen. Common Lisp sieht wortreich aus, weil so viele der Schlüsselwörter lang sind, und das trägt auch zur Ausführlichkeit von COBOL bei.
David Thornley
1
@Frank Shearar: Absolut unwahr, überlegen Sie, wie lange es dauert, bis die Schüler Mathematik lernen. Es ist so unlesbar wie es nur geht (ernsthafte Mathematik) und selbst nach 6 Jahren Sekundarschulbildung kann die Mehrheit es immer noch nicht ernsthaft lesen. Nicht, dass es schlecht ist, unlesbar zu sein! Aber zu sagen, dass Mathematik eine lesbare Notation ist, ist, gelinde gesagt, ein kurzsichtiger Kommentar.
David Mulder
2
@DavidMulder: Die mathematische Notation ist sehr unterschiedlich, daher vermute ich, dass wir beide Übertreibungen begehen. Sicherlich halten Sie die Notation für Algebra, Mengenlehre, Grundrechnung für transparent? Andererseits halte ich die abstrakte Notation von Tensoren für unlesbaren Unsinn. (Aber dann habe ich mir auch nicht die Zeit genommen, die Notation richtig zu lernen.)
Frank Shearar
6

Wie stellen wir fest, ob eine Programmiersprache ausführlicher ist als eine andere?

Durch Vergleichen der äquivalenten oder ähnlichen Sprachkonstrukte, insbesondere wie die gleiche oder äquivalente Aufgabe in einer Sprache gegen die andere gelöst werden kann.

Ist C # ausführlicher als Java?

Java ist im Allgemeinen ausführlicher als C #. Zu den offensichtlichsten Unterschieden zählen Delegates und Lambda-Ausdrücke, bei denen Java das Definieren, Unterklassen und Instanziieren einer bestimmten Schnittstelle erfordert, um das zu erreichen, was möglicherweise mit einem einzelnen Lambda-Ausdruck in C # erreicht wird.

Péter Török
quelle
1
Java unterstützt jetzt Lambda-Ausdrücke mit Java 8 ( docs.oracle.com/javase/tutorial/java/javaOO/… )
shanraisshan
1
@shanraisshan: Ja, es wurde mit der Zeit besser, aber AFAIK Java ist immer noch etwas ausführlicher. In den von Ihnen verknüpften Dokumenten enthält der Code beispielsweise viele p.getAge()Anweisungen. In C # würde ich eine Eigenschaft erstellen Age, die den gleichen Kapselungsgrad wie eine Memberfunktion getAgebietet, aber das Schreiben ermöglicht p.Age.
Doc Brown
1
Während sich Java verbessert hat, war C # auch nicht gerade ein statisches Ziel ... Neue Funktionen, da diese Antwort wie Generatorfunktionen und async / await auch dazu dient, dass C # -Code kürzer als Java-Äquivalent ist.
Jules
3

Geben Sie einem Nicht-Programmierer ein Code-Snippet und bitten Sie ihn, zu erklären, was dieser Snippet versucht zu tun. Wenn Sie die nächstbeste Antwort erhalten, ist sie ausführlich. Wenn Sie einen WTF-Ausdruck erhalten, ist dieser knapp.

QriousCat
quelle
2

Das Maß heißt Ausdruckskraft der Sprache. Die typische Metrik hierfür ist die Messung standardisierter Codezeilen oder Anweisungen, die zur Implementierung derselben Funktionalität erforderlich sind.

Einige Werte aus dem Wiki - wie viele Anweisungen / Zeilen von C-Code werden benötigt, um eine Funktionalität einer Anweisung / Zeile zu implementieren:

  • C - Aussagen: 1 Zeilen: 1
  • C ++ - Anweisungen: 2,5 Zeilen: 1
  • Fortran - Aussagen: 2,5 Zeilen: 0,8
  • Java - Anweisungen: 2.5 Zeilen: 1.5
  • Perl - Anweisungen: 6 Zeilen: 6
  • Smalltalk - Aussagen: 6 Zeilen: 6.25
  • Python - Anweisungen: 6 Zeilen: 6.5
vartec
quelle
Ich denke, die Tatsache, dass eine dieser Messungen nahe legt, dass FORTRAN um einiges aussagekräftiger ist als C (!), Während die andere das Gegenteil aussagt und C ++ für C (!!) gleichermaßen aussagekräftig ist, fasst den Nutzen solcher "Metriken" zusammen ".
Jules