Ich frage mich, warum schwach typisierte Sprachen immer noch aktiv entwickelt werden. Welchen Nutzen kann man beispielsweise davon ziehen, schreiben zu können?
$someVar = 1;
(...) // Some piece of code
$someVar = 'SomeText';
anstatt die sehr unterschiedliche, stark typisierte Version zu verwenden
int someInt = 1;
(...)
string SomeString = 'SomeText';
Es ist richtig, dass Sie im zweiten Beispiel eine zusätzliche Variable deklarieren müssen, aber tut das wirklich weh? Sollten nicht alle Sprachen eine starke Typisierung anstreben, da dies die Typensicherheit zur Kompilierungszeit erzwingt und so einige Fallstricke bei der Typumwandlung vermeidet?
weak-typing
DotNetStudent
quelle
quelle
Antworten:
Starke / schwache Typisierung und statische / dynamische Typisierung sind orthogonal.
Bei Stark / Schwach geht es darum, ob die Art eines Wertes funktional von Bedeutung ist. In einer schwach typisierten Sprache können Sie zwei Zeichenfolgen verwenden, die zufällig mit Ziffern gefüllt sind, und diese ganzzahlig addieren. In einer stark typisierten Sprache ist dies ein Fehler (es sei denn, Sie wandeln oder konvertieren die Werte zuerst in die richtigen Typen). Starke / schwache Eingabe ist keine Schwarz-Weiß-Sache; Die meisten Sprachen sind weder 100% streng noch 100% schwach.
Bei der statischen / dynamischen Typisierung geht es darum, ob Typen an Werte oder an Bezeichner gebunden sind. In einer dynamisch typisierten Sprache können Sie jeder Variablen einen beliebigen Wert zuweisen, unabhängig vom Typ. Die statische Typisierung definiert einen Typ für jeden Bezeichner, und die Zuweisung von einem anderen Typ ist entweder ein Fehler oder führt zu einer impliziten Umwandlung. Einige Sprachen verfolgen einen hybriden Ansatz, der sowohl statisch deklarierte Typen als auch nicht typisierte Bezeichner ("Varianten") zulässt. Es gibt auch Typinferenz, einen Mechanismus, bei dem statische Typisierung möglich ist, ohne explizit den Typ von allem zu deklarieren, indem der Compiler die Typen herausfindet (Haskell verwendet dies ausgiebig, C # macht es über das
var
Schlüsselwort verfügbar).Eine schwache dynamische Programmierung ermöglicht einen pragmatischen Ansatz. Die Sprache stört die meiste Zeit nicht, aber sie greift auch nicht ein, wenn Sie sich in den Fuß schießen. Im Gegensatz dazu zwingt eine starke statische Typisierung den Programmierer, bestimmte Erwartungen an Werte explizit im Code auszudrücken, sodass der Compiler oder Interpreter eine Fehlerklasse erkennen kann. Mit einem guten Typensystem kann ein Programmierer genau definieren, was mit einem Wert getan werden kann und was nicht. Wenn jemand versehentlich etwas Unerwünschtes versucht, kann das Typensystem dies oft verhindern und genau zeigen, wo und warum etwas schief geht.
quelle
&
für die Verkettung vorausgesetzt) sind Operationen eindeutig"12"+3
oder45 & "6"
eindeutig (sie berechnen 15 bzw. "456"). In einer stärker typisierten Sprache kann der Operator "+" sowohl für die Verkettung von Zeichenfolgen als auch für die numerische Addition sicher überladen werden, ohne dass Mehrdeutigkeiten auftreten, da Operationen mit Zeichenfolgen und Zahlen verboten wären. Probleme treten auf, wenn die Sprache weder die Typen noch die auszuführenden Operationen angibt.Schwaches Tippen ist eher im Sinne von
1 == "TRUE"
. Dieser Abschnitt in der Wikipedia verdeutlicht den Unterschied.Bitte beachten Sie, dass kein Beispiel aus der Wikipedia statisch typisiert ist, worauf Sie in Ihrem zweiten Beispiel verweisen.
Wenn also die Frage lautet, warum Menschen dynamisch getippte Sprachen verwenden, lautet die Antwort: Statische Typsysteme schränken Sie ein. Viele Menschen haben einfach noch nie mit einem ausdrucksstarken statischen Typensystem gearbeitet, was sie zu dem Schluss führt, dass die Nachteile der statischen Typisierung die Vorteile überwiegen.
quelle
Schwache Sprachen werden immer noch entwickelt, weil die Leute sie benutzen und mögen. Wenn Sie schwaches Tippen nicht mögen, verwenden Sie keine schwach getippten Sprachen. Zu erklären, dass etwas der einzig wahre Weg ist und dass jeder es tun sollte, ignoriert die Kompliziertheit der Welt.
quelle
Nicht unbedingt. Lernziel C: Ein Primer behandelt diese Frage direkt im Kontext von Lernziel C:
quelle