Kann mir jemand sagen, was Starkes Tippen und schwaches Tippen bedeutet und welches besser?Kann mir jemand sagen, was Starkes Tippen und schwaches Tippen bedeutet und welches besser?
Antwort
Schwache Typisierung bedeutet, dass Sie nicht den Typ einer Variablen angeben, und starke Typisierung bedeutet, dass Sie jeder Variablen einen strikten Typ zuweisen.
Jedes hat seine Vorteile, mit schwacher Typisierung (oder dynamischer Typisierung, wie es oft genannt wird), da es flexibler ist und weniger Code vom Programmierer benötigt. Starkes Tippen hingegen erfordert mehr Arbeit vom Entwickler, aber im Gegenzug kann es Sie vor dem Ausführen Ihres Codes auf viele Fehler beim Kompilieren Ihres Codes hinweisen. Dynamische Typisierung kann die Erkennung dieser einfachen Probleme verzögern, bis der Code ausgeführt wird.
Je nach Aufgabenstellung kann eine schwache Typisierung besser sein als eine starke Typisierung oder umgekehrt, aber es ist meistens Geschmackssache. Schwache Typisierung wird häufig in Skriptsprachen verwendet, während starke Typisierung in den meisten kompilierten Sprachen verwendet wird.
-1 für verwirrendes schwaches Tippen und dynamisches Tippen. –
"Strong Typisierung" und ihr Gegenteil "schwache Typisierung" sind ziemlich schwach in der Bedeutung, teilweise da die Vorstellung dessen, was als "stark" angesehen wird, je nach dem, wen Sie fragen, variieren kann. Z.B. C wurde von verschiedenen Autoren sowohl "stark typisiert" als auch "schwach typisiert" genannt, es kommt wirklich darauf an, mit was man es vergleicht.
Im Allgemeinen sollte ein Typsystem als stärker angesehen werden, wenn es dieselben Einschränkungen wie ein anderes und mehr ausdrücken kann. Ziemlich oft sind zwei Typsysteme nicht miteinander vergleichbar - man könnte Merkmale haben, die anderen fehlen und umgekehrt. Jede Diskussion der relativen Stärken ist dann dem persönlichen Geschmack überlassen.
Ein System mit einem stärkeren Typ bedeutet, dass entweder der Compiler oder die Laufzeit mehr Fehler melden, was normalerweise eine gute Sache ist, obwohl dies zu Lasten der manuellen Bereitstellung weiterer Typinformationen gehen könnte nicht wert. Ich würde behaupten, "starke Typisierung" ist im Allgemeinen besser, aber Sie müssen auf die Kosten schauen.
Es ist auch wichtig zu erkennen, dass "stark typisierte" oft falsch statt "statisch typisierte" oder sogar "manifested typed" verwendet wird. "Statisch typisiert" bedeutet, dass zur Kompilierungszeit Typprüfungen vorhanden sind, "manifest typed" bedeutet, dass die Typen explizit deklariert werden. Manifest-Typisierung ist wahrscheinlich die bekannteste Methode, um ein Typsystem stärker zu machen (denke Java), aber Sie können Stärke mit anderen Mitteln wie der Typinferenz hinzufügen.
Das wird die Theorie Antworten gesorgt, aber die Praxis Seite scheint zu vernachlässigt worden ...
Strong-Typisierung bedeutet, dass Sie nicht eine Art von Variable verwenden können, wo ein anderes zu erwarten ist (oder Einschränkungen haben, dies zu tun). Schwache Eingabe bedeutet, dass Sie verschiedene Arten mischen können. In PHP zum Beispiel können Sie Zahlen und Strings mischen und PHP wird sich nicht beschweren, weil es eine schwach typisierte Sprache ist.
$message = "You are visitor number ".$count;
Wenn es stark typisiert wurde, müßten Sie $ count aus einer ganzen Zahl in eine Zeichenfolge konvertieren, in der Regel mit entweder mit Casting:
$message = "you are visitor number ".(string)$count;
... oder eine Funktion:
$message = "you are visitor number ".strval($count);
Was ist besser, das ist subjektiv. Befürworter der starken Typisierung werden Ihnen sagen, dass es Ihnen helfen wird, einige Fehler und/oder Fehler zu vermeiden und den Zweck einer Variablen usw. mitzuteilen.Sie werden Ihnen auch sagen, dass Befürworter der schwachen Schreibweise "unnötigen Sprachflaum, der durch gesunden Menschenverstand sinnlos gemacht wird", oder "strong typing" nennen. Als ein Karten tragendes Mitglied der schwach schreibenden Gruppe müsste ich sagen, dass sie meine Nummer haben ... aber ich habe auch ihre, und I kann es in eine Zeichenfolge setzen :)
"und * I * kann es in eine Zeichenfolge" nett ". +1 für die schwache Seite der Kraft – annakata
"Strong-Typisierung bedeutet, dass Sie nicht einen Typ von Variablen verwenden können, wo ein anderer erwartet wird". Stark/schwach sind nicht über Variablen, sie sind über Werte. Ich denke, Sie sollten sagen: "Strong-Typisierung bedeutet, dass Sie nicht einen Typ von * Wert * verwenden können, wo ein anderer erwartet wird". –
Sie sind verwirrt * statische Eingabe * und * starke Eingabe *. "Den Zweck einer Variablen mitteilen" ist * statische Eingabe *. "Unnötiger Sprachfluff" ist * statische Eingabe *. Bugs zu vermeiden ist weitgehend * statische Eingabe *, aber auch starke Typisierung hilft hier, also Halbmarken. –
Ich möchte wiederholen, dass schwache Typisierung ist nicht das gleiche wie dynamische Typisierung.
Dies ist ein ziemlich gut geschriebener Artikel über das Thema und ich würde definitiv empfehlen, es zu lesen, wenn Sie sich unsicher sind über die Unterschiede zwischen starken, schwachen, statischen und dynamischen Systemen. Es beschreibt die Unterschiede viel besser, als in einer kurzen Antwort zu erwarten ist, und hat einige sehr aufschlussreiche Beispiele.
Dieser Artikel ein großer lesen ist: http://blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html eine Menge Dinge für mich aufklären, wenn man versucht die Erforschung eine ähnliche Frage zu beantworten, Hoffnung, andere finden es zu nützlich.
Starke Typisierung:
Wahrscheinlich ist die häufigste Art und Weise Art-Systeme eingestuft werden, ist „stark“ oder „schwach“. Dies ist bedauerlich, da diese Wörter überhaupt keine Bedeutung haben. Es ist in einem begrenzten Ausmaß möglich, zwei Sprachen mit Systemen sehr ähnlichen Typs zu vergleichen und eines mit dem stärkeren dieser beiden Systeme zu bezeichnen. Darüber hinaus bedeuten die Wörter nichts überhaupt.
Statische und dynamische Typen
Dies ist fast die einzige gemeinsame Klassifikation von Systemen des Typs , die echte Bedeutung hat. In der Tat ist seine Bedeutung häufig unterschätzt [...] Dynamische und statische Systeme sind zwei völlig verschiedene Dinge, deren Ziele passieren teilweise überlappen.
Ein statisches Typsystem ist ein Mechanismus, mit dem ein Compiler Quellcode und ordnet Etiketten (so genannte „Typen“), um Teile der Syntax, und dann nutzt sie zu schließen, etwas über das Programm des Verhalten untersucht. Ein dynamisches System ist ein Mechanismus, mit dem ein Compiler Code generiert, um die Art der Daten zu verfolgen (zufälligerweise auch genannt "Typ"), die vom Programm verwendet werden. Die Verwendung des gleichen Wortes "Typ" in jedem dieser beiden Systeme ist natürlich nicht wirklich vollständig zufällig; aber es ist am besten als eine Art von schwacher historischer Bedeutung zu verstehen. Große Verwirrung resultiert vom Versuchen, eine Weltsicht zu finden, in der "Art" in beiden Systemen wirklich dasselbe bedeutet. Es tut es nicht.
Explicit/Implizit Arten:
Wenn diese Begriffe verwendet werden, beziehen sie sich auf das Ausmaß, in dem ein Compiler über die statischen Typen von Teilen eines Programms Vernunft wird. Alle Programmiersprachen haben eine Art von Argumentation über Typen.Einige haben mehr als andere. ML und Haskell haben implizite Typen, in denen keine (oder sehr wenige, je nach Sprache und Erweiterungen) Typ Deklarationen benötigt werden. Java und Ada haben sehr explizite Typen und man erklärt ständig die Arten von Dingen. Alle oben genannten haben (relativ, im Vergleich zu C und C++ zum Beispiel) starke statische Systeme.
Starke Typisierung ist das häufigste Typmodell in modernen Programmiersprachen. Diese Sprachen verfügen über eine einfache Funktion: Sie wissen über Typwerte in der Laufzeit Bescheid. Wir können sagen, dass stark typisierte Sprachen Mischoperationen zwischen zwei oder mehr verschiedenen Arten von Typen verhindern. Hier ist ein Beispiel in Java:
String foo = "Hello, world!";
Object obj = foo;
String bar = (String) obj;
Date baz = (Date) obj; // This line will throw an error
Im vorherigen Beispiel wird sehr gut funktionieren, bis Programm die letzte Zeile des Codes treffen, wo die Classcast geworfen werden wird, weil Java starke Sprache getippt Programmierung ist.
Wenn wir über schwach typisierte Sprachen sprechen, ist Perl einer von ihnen. Das folgende Beispiel zeigt, dass Perl keine Probleme beim Mischen zweier verschiedener Typen hat.
$a = 10;
$b = "a";
$c = $a . $b;
print $c; # returns 10a
Ich hoffe, dass Sie diesen Kommentar hilfreich,
Dank.
stark/schwach Typisierung in einer Sprache ist ähnlich, wie Sie leicht Typkonvertierungen tun können:
Zum Beispiel in Python:
str = 5 + 'a'
# would throw an error since it does not want to cast one type to the other implicitly.
Wo, wie in der Programmiersprache C:
int a = 5;
a = 5 + 'c';
/* is fine, because C treats 'c' as an integer in this case */
Daher ist Python stärker typisiert als C (aus dieser Perspektive).
Kann dies können Sie Starke Typisierung .......
starke Typisierung helfen zu verstehen: Es überprüft den Typ der Variablen so schnell wie möglich, in der Regel bei der Kompilierung. Es verhindert Mischvorgänge zwischen nicht übereinstimmenden Typen.
Ein starker typisierte ist Programmiersprache, in dem:
- Alle Variablen (oder Datentypen) werden bei der Kompilierung bekannt
- Es gibt strikte Durchsetzung Regeln eingeben (a String nicht sein kann verwendet wo zu erwarten wäre ein Integer)
- Alle Ausnahmen Regeln führt zu einem Kompilierung Fehler
Weak Typ zu tippen ing: Während schwache Typisierung verzögert die Typen des Systems so spät wie möglich zu überprüfen, in der Regel zur Laufzeit. In diesem können Sie Typen ohne explizite Konvertierung mischen.
Eine "schwach typisierte" Programmiersprache ist einfach eine, die nicht stark typisiert ist.
was bevorzugt wird hängt davon ab, was Sie wollen. Für Skripte und gute Sachen werden Sie normalerweise eine schwache Schreibweise brauchen, weil Sie so viel Code wie möglich schreiben wollen. In großen Programmen kann eine starke Typisierung Fehler bei der Kompilierung reduzieren.
Siehe auch: http://stackoverflow.com/questions/2351190/static-dynamic-vs-strong-weak, http://stackoverflow.com/questions/2135066/is-my-understanding-of-type- system-correct – outis
Die meisten Antworten hier sind falsch. Siehe: http://stackoverflow.com/questions/2351190/static-dynamic-vs-strong-weak – darksky