Zig erste Eindrücke von einem JS-Entwickler

PHPz
Freigeben: 2024-08-24 22:31:38
Original
745 Leute haben es durchsucht

Zig First Impressions from a JS Dev

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.

Fehlerbehandlung

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(); }
Nach dem Login kopieren

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;
Nach dem Login kopieren

Ich glaube, dieser Ansatz ist eine großartige Kombination und erspart uns das endlose Wenn (äh! = Null) im Go-Land.

Weitere Highlights:

  • Fehler sind explizit, alle Typen müssen deklariert und behandelt werden
  • Die Handhabung erfolgt direkt vor Ort, nicht auf Blockebene
  • Dank der Nutzlasterfassung werden Fehler korrekt eingegeben und automatisch vervollständigt, sodass es einfach ist, so etwas wie einen Switch-Ausdruck zu verwenden.

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.Sag mir einfach, was du zurückgeben wirst!
Ich sehe nur, dass es für die Funktion main() nützlich ist.

Nutzlasterfassung

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 einzugrenzen, was Sie benötigen, und TS zeigt den neuen Typ automatisch korrekt an.
Obwohl es einfach ist, gibt es bei diesem Ansatz Probleme:

  • Wenn sich Typen während einer Funktion ändern können, ist es schwieriger, ihnen zu folgen
  • In manchen Fällen muss noch ein Gipsverband gemacht werden

In Zig machst du das 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 }
Nach dem Login kopieren

Es ist ganz klar, was passiert! Darüber hinaus ist die Variable unveränderlich, aber wenn Sie siewirklichä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.

Comptime-Spielereien

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
Nach dem Login kopieren

Erfahrung als Redakteur

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
Nach dem Login kopieren

Ich verwende die Master-Branch-Version 0.14 (Dev). Wenn es funktionieren soll, lassen Sie 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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!