Jak ustalić, czy język programowania jest pełny, czy zwięzły?

17

Języki programowania często można opisać jako pełne lub zwięzłe .

Z mojego zrozumienia, język pełny jest łatwy do odczytania i zrozumienia, podczas gdy zwięzły język jest zwięzły i schludny, ale trudniejszy do odczytania. Czy w definicjach powinny być inne rzeczy do rozważenia?

Wydaje się, że wiele popularnych obecnie języków programowania jest pełnych, a te dwa terminy są używane tylko do opisania języka jako mniej lub bardziej w stosunku do innego języka.

Jak ustalić, czy język programowania jest bardziej szczegółowy / zwięzły niż inny?

Przykład: Czy C # jest bardziej szczegółowy niż Java?

gąbka
źródło

Odpowiedzi:

30

Z mojego zrozumienia, język pełny jest łatwy do odczytania i zrozumienia, podczas gdy zwięzły język jest zwięzły i schludny, ale trudniejszy do odczytania.

To nieprawda. Pełne oznacza wiele symboli. Zwrotka oznacza mniej symboli.

Nie ma to nic wspólnego z łatwością czytania lub zrozumieniem.

Niektórzy ludzie uważają, że pełny COBOL jest łatwy do odczytania, inni uważają go za mylący, ponieważ tak wiele symboli jest wymaganych do zrobienia tak mało.

Niektórzy ludzie uważają, że krótkie I / J / K i APL są łatwe do odczytania, ponieważ program jest bardzo krótki. Inni mają trudności z odczytaniem, ponieważ symbole są niejasne.

Terse / Verbose nie ma związku z łatwym do odczytania lub łatwym do zrozumienia.

Czy w definicjach powinny być inne rzeczy do rozważenia?

Nie. Definicje zwięzłe i pełne są w porządku.

Ważne jest to, że te definicje nie mają nic wspólnego z „łatwym do odczytania i zrozumienia”

Wygląda na to, że większość popularnych języków programowania jest dziś pełna.

Naprawdę?

Jak ustalić, czy język programowania jest bardziej szczegółowy / zwięzły niż inny?

Policz tokeny, aby coś zrobić.

Add 2 TO A GIVING B.

7 żetonów

b = a + 2;

6 żetonów

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

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

S.Lott
źródło
5
+1 dla „Terse / Verbose nie ma związku z łatwym do odczytania lub łatwym do zrozumienia”. Zawsze myślę o notacji matematycznej, która, jeśli jest właściwie wykonana, jest niezwykle gęsta, ale wciąż względnie czytelna.
Frank Shearar
5
@sunpech: To właśnie oznaczają angielskie słowa. „gadatliwy” oznacza wiele słów. „zwięzły” oznacza mniej słów. Nie ma to nic wspólnego z czytelnością. Po prostu słowo się liczy. Wszystko, co zrobiłem, to zastąpiłem słowo „słowo” słowem „token”. To tylko angielski, nic specjalnego.
S.Lott
1
Możemy również wziąć pod uwagę długość tokenów. Common Lisp wygląda nieporadnie, ponieważ tak wiele słów kluczowych jest długich, a to także dodaje gadatliwości COBOL.
David Thornley,
1
@Frank Shearar: Absolutnie nieprawdziwe, zastanów się, ile czasu zajmuje uczniom nauka matematyki. Jest tak nieczytelny, jak to tylko możliwe (poważna matematyka), a nawet po 6 latach szkoły średniej większość nadal nie jest w stanie go poważnie przeczytać. Nie to, że nieczytelność jest złą rzeczą! Ale powiedzenie, że matematyka jest czytelnym zapisem, jest krótkowzrocznym komentarzem co najmniej.
David Mulder
2
@DavidMulder: Notacja matematyczna jest bardzo zróżnicowana, więc podejrzewam, że obaj popełniamy grzech hiperboli. Czy na pewno uważasz, że zapis algebry, teorii mnogości, rachunku podstawowego jest przejrzysty? Z drugiej strony uważam abstrakcyjny zapis tensorów za nieczytelny nonsens. (Ale potem nie poświęciłem czasu na prawidłowe nauczenie się notacji.)
Frank Shearar
6

Jak ustalić, czy język programowania jest bardziej szczegółowy / zwięzły niż inny?

Porównując konstrukcje równoważnego lub podobnego języka, w szczególności jak to samo lub równoważne zadanie można rozwiązać w jednym języku w porównaniu do drugiego.

Czy C # jest bardziej gadatliwy niż Java?

Java jest na ogół bardziej gadatliwa niż C #. Najbardziej oczywiste różnice obejmują delegacje i wyrażenia lambda, przy czym Java wymaga zdefiniowania, podklasowania i tworzenia instancji odrębnego interfejsu, aby osiągnąć to, co możliwe, przy użyciu pojedynczego wyrażenia lambda w języku C #.

Péter Török
źródło
1
Java obsługuje teraz wyrażenia lambda w Javie 8 ( docs.oracle.com/javase/tutorial/java/javaOO/… )
shanraisshan,
1
@shanraisshan: tak, z czasem stało się lepiej, ale Java AFAIK wciąż jest nieco bardziej gadatliwa. Na przykład w połączonych dokumentach kod zawiera wiele p.getAge()instrukcji. W języku C # stworzyłbym właściwość Age, która zapewnia taki sam stopień enkapsulacji jak funkcja członka getAge, ale umożliwia p.Agezamiast tego pisanie .
Doc Brown
1
Ponadto, mimo że Java uległa poprawie, język C # nie był też dokładnie statycznym celem ... Nowe funkcje, ponieważ ta odpowiedź, taka jak funkcje generatora i async / czekają, również pozwala na to, aby kod C # był krótszy niż odpowiednik Java.
Jules,
3

Podaj fragment kodu nie-programistowi i poproś go o wyjaśnienie, co ten fragment próbuje zrobić. Jeśli otrzymasz najbliższą odpowiedź, to jest pełna. jeśli otrzymasz wyrażenie WTF, to jest ono zwięzłe.

QriousCat
źródło
2

Miara nazywa się ekspresyjnością języka. Typową miarą tego jest pomiar standardowych linii kodu lub instrukcji potrzebnych do wdrożenia tej samej funkcjonalności.

Niektóre wartości z Wiki - ile instrukcji / linii kodu C zajmuje implementacja jednej funkcji jednej instrukcji / linii w:

  • Instrukcje C: 1 linie: 1
  • Instrukcje C ++: 2,5 wiersza: 1
  • Fortran - instrukcje: 2,5 wiersza: 0,8
  • Instrukcje Java: 2,5 wiersza: 1,5
  • Perl - instrukcje: 6 linii: 6
  • Smalltalk - instrukcje: 6 linii: 6.25
  • Python - instrukcje: 6 linii: 6.5
vartec
źródło
Myślę, że jeden z tych pomiarów sugeruje, że FORTRAN jest bardziej ekspresyjny niż C z pewnym marginesem (!), Podczas gdy drugi stwierdza coś przeciwnego, stwierdzając, że C ++ jest równie ekspresyjny dla C (!!), podsumowuje przydatność takich „wskaźników” „.
Jules,