Ich stoße in ein grundlegendes Argument über stark typisierte und statisch typisierte Sprachen. Der andere Debater ist ein reiner Javascript-Enthusiast. Während ich gerne mit C# und Javascript arbeiten. Das Gespräch entstand über die Diskussion über TypeScript und wie es besser ist als pure js, weil es stark typisiert ist. (schon subjektiv). Also lieferte ich ihm ein Argument, dass TypeScript bereits mit dem folgenden Beispiel fehlschlägt.Grundsätzlich kann das Schlüsselwort "this" in C# vs. Javascript gleich sein
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
var greeter = new Greeter("world");
var greetWorld = greeter.greet;
alert(greetWorld()); //undefined, unexpected for strongly typed languages
Ich habe bereits gesagt, dass dies in JS erwartet wird. In der Tat, ich liebe das. Aus diesem Grund ist eine dynamisch typisierte Sprache so mächtig. Aber das 'this' Schlüsselwort ist nichts anderes als eine Eigenschaft in JS und warum TypeScript nur eine zusätzliche Ebene ist, die Verwirrung stiftet und es nicht besser macht.
"Wenn eine Funktion erstellt wird, wird ein Schlüsselwort namens this (hinter den Kulissen) erstellt, das mit dem Objekt verknüpft ist, in dem die Funktion ausgeführt wird." (JS).
Nun, das ist wirklich nur eine Eigenschaft der Funktion/Objekt dann. Die Definition von stark typisiert: "Jede Art von Daten (wie Integer, Zeichen, Hexadezimal, gepackte Dezimal usw.) ist als Teil der Programmiersprache vordefiniert und alle Konstanten oder Variablen für ein bestimmtes Programm definiert werden müssen mit einem der Datentypen. " Die Datentyp-Funktion/Objekt ist also ein separates Schlüsselwort "ONE" der Datentypen.
Ich kann einfach nicht scheinen, den Streit nach Hause zu fahren. In der Tat könnte ich sogar falsch liegen. Für mich ist das obige Problem jedoch ein Laufzeittypfehler, dass es keine greeting
ist, obwohl es erwartet werden sollte, wenn das Schlüsselwort 'this' wirklich in der Programmiersprache gebunden wäre.
Fehle ich etwas?
Ich weiß nicht, ob Sie Ich vermisse etwas, aber ich fürchte, ich vermisse deinen Standpunkt. Was ist die Frage?Eine Sache kann ich Ihnen jedoch sagen: Wenn jemand beharrlich nicht begreifen kann, was Sie ihm sagen, ist mindestens einer von Ihnen entweder zurückgeblieben oder nicht bereit zuzuhören. Und das bedeutet, dass es Zeit ist, Ihre Verluste zu reduzieren, sich die Hände zu schütteln und ein paar Hausaufgaben zu machen, um sicherzustellen, dass Sie nicht der Zurückgebliebene sind. –
Ich finde es unfair zu sagen, dass TypeScript nicht jedes Verhalten einer stark typisierten Sprache replizieren kann, sondern "nicht besser" als JavaScript. – user1620220