Ich habe Zig für mein Spieleentwicklungsprojekt gelernt, mehr darüber lesen Sie hier. Das sind meine ersten (größtenteils positiven) Eindrücke von der Sprache, die ich aus einer kürzlichen, überwiegend JS/TS-Erfahrung stamme.
Fehler sind Werte – Derzeit ist die Meinung weit verbreitet, dass Ausnahmen nicht die besten sind. Sie erzeugen einen versteckten Kontrollfluss und können in JavaScript nicht einmal deklariert werden; was Ihre Anwendungen viel instabiler macht.
Zig verwendet Fehleraufzählungen und schönen syntaktischen Zucker für eine einfache und unterhaltsame Fehlerbehandlung. Zum Beispiel:
fn failingFunction() error{MyError}!void { return error.MyError; } pub fn main() !void { try failingFunction(); }
Im obigen Code deklarieren wir einen Fehler MyError (Dies kann auch separat erfolgen) und geben ihn zurück.
Der Versuch bedeutet „Wenn dies einen Fehler zurückgibt, geben Sie ihn hier zurück“ wie in:
failingFunction() catch |err| return err;
Ich glaube, dieser Ansatz ist eine großartige Kombination und erspart uns das endlose Wenn (äh! = Null) im Go-Land.
Weitere Highlights:
Die !void-Syntax - ! wird verwendet, um eine Union zwischen dem Rückgabetyp und den Fehlertypen zu erstellen. Zig unterstützt, keine Fehler vor dem ! hinzuzufügen, was eine Vereinigung aller Fehler erzeugen soll, die Sie tatsächlich von der Funktion zurückgeben.
In der Praxis finde ich diese Syntax nicht hilfreich. Zumindest mit meiner IDE-Erfahrung bekomme ich in diesem Fall keinen Intellisense und die Funktion wird dadurch weniger klar. Sagen Sie mir einfach, was Sie zurückgeben werden!
Ich sehe nur, dass es für die Funktion main() nützlich ist.
Sie wissen, dass Sie in TS einen Typ wie Zahl | haben könnten undefiniert? Sie können ein Wenn oder eine Logik verwenden, um den Typ auf das einzuschränken, was Sie benötigen, und TS zeigt den neuen Typ automatisch korrekt an.
Obwohl es einfach ist, gibt es bei diesem Ansatz Probleme:
In Zig tun Sie dies mit „Payload Capturing“. Sie können den resultierenden Typ „erfassen“, also eine neue unveränderliche Variable erstellen. Zum Beispiel:
const maybe_num: ?usize = 10; // `?` Means it can be `null` if (maybe_num) |num| { // Use num }
Es ist ganz klar, was passiert! Darüber hinaus ist die Variable unveränderlich, aber wenn Sie sie wirklich ändern müssen, können Sie stattdessen einen Zeiger auf den Wert erfassen.
Es ist auch erwähnenswert, dass dieser Mechanismus in der gesamten Sprache verwendet werden kann, einschließlich: für, wechseln, fangen usw.
Zugegebenermaßen habe ich noch nicht alle Möglichkeiten von Comptime erfasst. Kurz gesagt: Sie können während der Kompilierung regulären Code ausführen. Sie können ganze Funktionen erstellen, die nur während dieser Zeit verwendet werden, und bei Bedarf Kompilierungsfehler zurückgeben.
Es passt ganz gut zu Zig, weil es eine sehr formbare Sprache ist. Sogar Typen sind Werte, was bedeutet, dass Sie Typen erstellen, ändern und Informationen darüber abrufen können (insbesondere in Comptime).
Ein einfaches Beispiel hierfür aus dem Zig Guide:
const a = 5; // When a number type isn't specified, it defaults to comptime_int const b: if (a < 10) f32 else i32 = 5; // b: f32 after compilation
Ich verwende VSCode mit dem offiziellen Zig-Plugin (das zls verwendet). Die Intelligenz und die Fehler, die ich im Editor sehe, lassen zu wünschen übrig.
„erkennbares illegales Verhalten“, also illegale Dinge, die zu einem Kompilierungsfehler führen, werden normalerweise nicht im Editor angezeigt. Zum Beispiel:
const nums = [3]u8{ 2, 1, 3 }; _ = nums[4]; // Index out of bounds error
Ich verwende die Master-Branch-Version 0.14 (dev), wenn es funktionieren soll, lass es mich in den Kommentaren wissen!
Das obige ist der detaillierte Inhalt vonZig erste Eindrücke von einem JS-Entwickler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!