Zig JS 開發人員的第一印象

PHPz
發布: 2024-08-24 22:31:38
原創
745 人瀏覽過

Zig First Impressions from a JS Dev

我一直在為我的遊戲開發專案學習 zig,在這裡閱讀更多相關資訊。這些是我對這門語言的最初(大部分是正面的)印象,來自最近主要是 JS/TS 的經驗。

錯誤處理

錯誤就是值- 目前很流行的觀點是異常並不是最好的。它們創建了一個隱藏的控制流,在 JavaScript 中它們甚至無法被聲明;這使您的應用程式更加不穩定。

Zig 使用錯誤枚舉和漂亮的語法糖來實現簡單有趣的錯誤處理。例如:

雷雷

在上面的程式碼中,我們聲明一個錯誤 MyError (這也可以單獨完成)並傳回它。
try 的意思是“如果返回錯誤,則在此處返回”,如下所示:

雷雷

我相信這種方法是一個很好的組合,可以讓我們避免 Go 語言中無窮無盡的 if (err != nil) 。

其他亮點

  • 錯誤是明確的,所有類型都必須聲明和處理
  • 處理是當場完成的,而不是在區塊層面上
  • 由於有效負載捕獲,錯誤可以正確輸入並自動完成,從而可以輕鬆使用諸如 switch 表達式之類的東西。

!void 語法- !用於建立返回類型和錯誤類型之間的聯合。 Zig 支援在 ! 之前不添加任何錯誤,這應該創建您實際從函數返回的所有錯誤的並集。

在實務中,我發現這種語法沒有幫助。至少以我的 IDE 經驗來看,在這種情況下我沒有得到任何智慧感知,這使得函數不太清晰。只要告訴我你要回什麼!
我只看到它在 main() 函數上有用。

有效載荷捕獲

你知道在 TS 中你可能會有像 number 這樣的型別 |不明確的?您可以使用 if 或某些邏輯將類型縮小到您需要的類型,TS 會自動正確顯示新類型。
雖然很簡單,但這種方法有問題:

  • 如果類型可以在整個函數中改變,那麼就更難遵循
  • 在某些情況下你仍然需要進行演員表

在 Zig 中,您可以透過「有效負載擷取」來完成此操作。您可以“捕獲”,即使用結果類型建立新的不可變變數。例如:

雷雷

很清楚發生了什麼事!此外,該變數是不可變的,但如果您真的需要更改它,您可以捕獲指向該值的指標。

也值得一提的是,這個機制可以在整個語言中使用,包括:for、switch、catch 等

Comptime惡作劇

不可否認,我還沒有掌握 comptime 的全部可能性。但簡而言之,您可以在編譯期間運行常規程式碼。您可以建立僅在這段時間內使用的整個函數,並且可以在必要時傳回編譯錯誤。

它非常適合 Zig,因為它是一種可塑性很強的語言。甚至類型也是值,這意味著您可以建立、更改和獲取有關類型的信息(特別是在 comptime 中)。

Zig 指南中的一個基本範例:

雷雷

編輯經歷

我將 VSCode 與官方 Zig 外掛程式(使用 zls)一起使用。我在編輯器中看到的智慧感知和錯誤還有很多不足之處。

「可偵測的非法行為」又稱會導致編譯錯誤的非法行為通常不會顯示在編輯器中。例如:

雷雷

我使用的是 0.14(dev)主分支版本,如果它應該可以工作,請在評論中告訴我!

以上是Zig JS 開發人員的第一印象的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!