我一直在為我的遊戲開發專案學習 zig,在這裡閱讀更多相關資訊。這些是我對這門語言的最初(大部分是正面的)印象,來自最近主要是 JS/TS 的經驗。
錯誤就是值- 目前很流行的觀點是異常並不是最好的。它們創建了一個隱藏的控制流,在 JavaScript 中它們甚至無法被聲明;這使您的應用程式更加不穩定。
Zig 使用錯誤枚舉和漂亮的語法糖來實現簡單有趣的錯誤處理。例如:
在上面的程式碼中,我們聲明一個錯誤 MyError (這也可以單獨完成)並傳回它。
try 的意思是“如果返回錯誤,則在此處返回”,如下所示:
我相信這種方法是一個很好的組合,可以讓我們避免 Go 語言中無窮無盡的 if (err != nil) 。
其他亮點:
!void 語法- !用於建立返回類型和錯誤類型之間的聯合。 Zig 支援在 ! 之前不添加任何錯誤,這應該創建您實際從函數返回的所有錯誤的並集。
在實務中,我發現這種語法沒有幫助。至少以我的 IDE 經驗來看,在這種情況下我沒有得到任何智慧感知,這使得函數不太清晰。只要告訴我你要回什麼!
我只看到它在 main() 函數上有用。
你知道在 TS 中你可能會有像 number 這樣的型別 |不明確的?您可以使用 if 或某些邏輯將類型縮小到您需要的類型,TS 會自動正確顯示新類型。
雖然很簡單,但這種方法有問題:
在 Zig 中,您可以透過「有效負載擷取」來完成此操作。您可以“捕獲”,即使用結果類型建立新的不可變變數。例如:
很清楚發生了什麼事!此外,該變數是不可變的,但如果您真的需要更改它,您可以捕獲指向該值的指標。
也值得一提的是,這個機制可以在整個語言中使用,包括:for、switch、catch 等
不可否認,我還沒有掌握 comptime 的全部可能性。但簡而言之,您可以在編譯期間運行常規程式碼。您可以建立僅在這段時間內使用的整個函數,並且可以在必要時傳回編譯錯誤。
它非常適合 Zig,因為它是一種可塑性很強的語言。甚至類型也是值,這意味著您可以建立、更改和獲取有關類型的信息(特別是在 comptime 中)。
Zig 指南中的一個基本範例:
我將 VSCode 與官方 Zig 外掛程式(使用 zls)一起使用。我在編輯器中看到的智慧感知和錯誤還有很多不足之處。
「可偵測的非法行為」又稱會導致編譯錯誤的非法行為通常不會顯示在編輯器中。例如:
我使用的是 0.14(dev)主分支版本,如果它應該可以工作,請在評論中告訴我!
以上是Zig JS 開發人員的第一印象的詳細內容。更多資訊請關注PHP中文網其他相關文章!