我一直在為我的遊戲開發專案學習 Zig,請在此處閱讀更多相關資訊。這些是我對這門語言的最初(大部分是正面的)印象,來自最近的 JS/TS 經驗。
錯誤就是值 - 目前非常流行的觀點是異常並不是最好的。它們創建了一個隱藏的控制流,在 JavaScript 中它們甚至無法被聲明;這使您的應用程式更加不穩定。
Zig 使用錯誤枚舉和漂亮的語法糖來實現簡單有趣的錯誤處理。例如 :
fn failingFunction() error{MyError}!void { return error.MyError; } pub fn main() !void { try failingFunction(); }
在上面的程式碼中,我們聲明一個錯誤MyError(這也可以單獨完成)並傳回它。
try 的意思是“如果返回錯誤,則在此處返回”,如下所示:
failingFunction() catch |err| return err;
我相信這種方法是一個很好的組合,可以讓我們避免 Go 語言中無盡的 if (err != nil)。
其他亮點:
!void 語法 - !用於建立傳回型別與錯誤型別之間的聯合。 Zig 支援不在 ! 之前添加任何錯誤,這應該創建您實際從函數返回的所有錯誤的並集。
實際上,我發現這種文法沒有幫助。至少以我的 IDE 經驗來看,在這種情況下我沒有得到任何智慧感知,這使得函數不太清晰。 告訴我你要回什麼!
我只看到它對 main() 函數有用。
你知道在 TS 中你可能會有像 number 這樣的型別 |不明確的?您可以使用 if 或某些邏輯將類型縮小到您需要的類型,TS 會自動正確顯示新類型。
雖然很簡單,但這種方法有問題:
在 Zig 中,您可以透過「有效負載擷取」來完成此操作。您可以“捕獲”,即使用結果類型建立新的不可變變數。例如:
const maybe_num: ?usize = 10; // `?` Means it can be `null` if (maybe_num) |num| { // Use num }
很清楚發生了什麼事!此外,該變數是不可變的,但如果您確實需要更改它,您可以捕獲指向該值的指標。
也值得一提的是,這個機制可以在整個語言中使用,包括:for、switch、catch等Comptime惡作劇
它非常適合 Zig,因為它是一種可塑性很強的語言。即使類型也是值,這意味著您可以建立、變更和獲取有關類型的信息(特別是在 comptime 中)。
Zig 指南中的基本範例:
「可偵測的非法行為」 又稱會導致編譯錯誤的非法行為通常不會顯示在編輯器中。例如:
const a = 5; // When a number type isn't specified, it defaults to comptime_int const b: if (a 我使用的是 0.14 (dev) master 分支版本,如果它應該可以工作,請在評論中告訴我!
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3