Motivation für Scala unterstreicht die formale Sprachtheorie und den guten Stil?

8

Warum sagen viele Leute, dass die Verwendung von Unterstrichen gute Praxis in Scala ist und Ihren Code lesbarer macht ? Sie sagen, dass die Motivation von der formalen Sprachtheorie kommt. Dennoch bevorzugen viele Programmierer, insbesondere aus anderen Sprachen, insbesondere solche mit anonymen Funktionen, die Verwendung von Unterstrichen insbesondere für Platzhalter nicht.

Was ist der Sinn des Unterstrichs? Warum hat Scala (und einige andere funktionale Sprachen, auf die om-nom-nom verweist) den Unterstrich? Und was ist die formale Untermauerung in Bezug auf Komplexität und Sprachtheorie, warum es oft guter Stil ist, es zu benutzen?

    
samthebest 10.09.2014, 10:45
quelle

1 Antwort

21

Linguistik

Der Ursprung und die Motivation für die meisten Unterstriche in Scala ist, dass man Ausdrücke und Deklarationen konstruieren kann, ohne immer jede Variable der Variablen (ich meine "Variable" wie im Prädikaten-Kalkül, nicht in der Programmierung) zu geben ein Name. Wir benutzen das ständig in der Natürlichen Sprache, zum Beispiel habe ich in diesem Satz auf ein Konzept im vorhergehenden Satz Bezug genommen, indem ich "dieses" verwendet habe, und ich habe diesen Satz mit "diesem" verwendet, ohne dass es Verwirrung darüber gibt, was ich meine. In natürlicher Sprache werden diese Wörter normalerweise " Pronomen ", " Anaphern ", " kataphors ", die Referenten " antecedent "oder" postcedent "und der Prozess des Verstehens / Dereferenzierens von ihnen wird" anaphora "genannt.

Algorithmische Informationstheorie

Wenn wir jedes "Ding" in der natürlichen Sprache benennen müssten, bevor wir darauf Bezug nehmen können, ähnlich jeder Art von Ding, um darüber zu quantifizieren, wie im Prädikaten-Kalkül und in den meisten Programmiersprachen, dann würde das Sprechen extrem lang werden aufgewickelt. Es ist dem Kontext zu verdanken, dass wir daraus schließen können, was mit Worten wie "dies", "es", "das", usw. gemeint ist, wir machen das leicht.

Warum also schränken Sie diese einfachen, eleganten und effizienten Mittel zur Kommunikation mit Natural Language ein? So wurde es zu Scala hinzugefügt.

Wenn wir versuchen, jedes einzelne "Ding" oder "Ding" zu benennen, werden Sätze so lang und kompliziert, dass sie aufgrund ihrer Ausführlichkeit und Einführung redundanter Symbole . Je mehr Symbole du zu einem Satz hinzufügst, desto schwieriger wird es zu verstehen, daher ist es eine gute Übung, nicht nur in der natürlichen Sprache, sondern auch in Scala. Tatsächlich könnte man diese Aussage im Sinne der Kolmogorow-Komplexität formalisieren und beweisen, dass eine Folge von Sätzen, die Platzhalter annehmen, eine geringere Komplexität haben als solche, die unnötigerweise alles benennen (es sei denn, der Name ist in jedem Fall genau gleich, aber das macht normalerweise keinen Sinn ). Daher können wir im Gegensatz zu der Meinung einiger Programmierer abschließend sagen, dass die Platzhaltersyntax einfacher und einfacher zu lesen ist .

Der Grund, warum es einen gewissen Widerstand in sich hat, ist, dass wenn man bereits ein Programmierer ist, man sich anstrengen muss, das Gehirn neu zu trainieren, um nicht alles zu benennen, so wie sie sich vielleicht erinnern können Code zu programmieren, erforderte eine große Anstrengung.

Beispiele

Sehen wir uns nun einige spezifische Anwendungen genauer an:

Platzhaltersyntax

bedeutet "es", "sie", "das", "ihre" usw. (d. h. Pronomen), z.B. 1

%Vor%

kann als "map lines to ihre Länge" gelesen werden, ähnlich können wir lineOption.map(_.length) als "map the line to it's length" lesen. In Bezug auf die Komplexitätstheorie ist dieses einfacher als "für jede 'Zeile' in Zeilen die Länge von 'line'" - was lines.map(line => line.length) wäre.

Kann auch als "der" (bestimmte Artikel) gelesen werden, wenn er mit Typ-Annotation verwendet wird, z. B.

%Vor%

"Fügen Sie 1 zu der Ganzzahl"

hinzu

Existentielle Typen

Bedeutet "irgendeiner Art" ("etwas" das Pronomen), z.B.

%Vor%

bedeutet "foo ist eine Option eines Typs ".

Höherwertige Typenparameter

Bedeutet wiederum grundsätzlich "von irgendeiner Art" ("etwas" das Pronomen), z.B.

%Vor%

Kann gelesen werden "Klasse A nimmt einige K eines Typs ..."

Muster-Wildcards

Bedeutet "irgendetwas" oder "was auch immer" (Pronomen), z.B.

%Vor%

kann wie folgt gelesen werden: "Für ein Foo, das irgendetwas enthält, gebe 'hallo' zurück" oder "für ein Foo, das was enthält, gib 'hallo' zurück"

Wildcards importieren

bedeutet "alles" (Pronomen), z.B.

%Vor%

kann als "alles von foo importieren" gelesen werden.

Standardwerte

Nun lese ich das wie "a" (unbestimmter Artikel), z. B.

%Vor%

"Gib mir einen Rotwein", der Kellner sollte dir das Haus rot geben.

Andere Verwendungen von Unterstrichen

Die anderen Verwendungen von Unterstreichungen stehen nicht wirklich mit dem Sinn dieser Frage in Zusammenhang, dennoch diskutieren wir sie kurz

Ignorierte Werte / Parameter / Extraktionen

Erlauben Sie uns, die Dinge auf explizite, Muster-sichere Weise zu ignorieren. ZB

%Vor%

Sagt, wir werden nicht die zweite Koordinate verwenden, also brauchen wir nicht verrückt zu werden, wenn Sie keine Verwendung im Code finden können.

Hidding importieren

Nur eine Möglichkeit, "außer" (Präposition) zu sagen.

Funktion Anwendung

z. B.

%Vor%

Dies ist ein interessanter Fall, da er ein genaues Analogon in der Linguistik hat, nämlich Nominalisierung , die Verwendung eines Verbs, eines Adjektivs oder eines Adverbs als Kopf einer Nominalphrase mit oder ohne morphologische Transformation "- wikipedia.Einfacher ist es, Verben oder Adjektive in Substantive umzuwandeln.

In speziellen Methodennamen verwenden

Rein eine Syntaxsache und bezieht sich nicht wirklich auf Linguistik.

    
samthebest 10.09.2014, 10:45
quelle