Heim >Web-Frontend >js-Tutorial >Zig erste Eindrücke von einem JS-Entwickler

Zig erste Eindrücke von einem JS-Entwickler

PHPz
PHPzOriginal
2024-08-24 22:31:38978Durchsuche

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();
}

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:

  • 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 so etwas wie ein Switch-Ausdruck einfach verwendet werden kann.

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.

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 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:

  • 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 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.

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

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

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!

Stellungnahme:
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