Zig Tanggapan Pertama daripada JS Dev

PHPz
Lepaskan: 2024-08-24 22:31:38
asal
745 orang telah melayarinya

Zig First Impressions from a JS Dev

Saya telah belajar zig untuk projek pembangunan permainan saya, baca lebih lanjut mengenainya di sini. Itu adalah tanggapan awal saya (kebanyakannya positif) tentang bahasa itu, datang daripada pengalaman JS/TS baru-baru ini.

Ralat pengendalian

Ralat adalah nilai- Pada ketika ini pendapat yang agak popular bahawa pengecualian bukanlah yang terbaik. Mereka mencipta aliran kawalan tersembunyi, dan dalam JavaScript mereka tidak boleh diisytiharkan pun; yang menjadikan aplikasi anda lebih tidak stabil.

Zig menggunakan enum ralat dan gula sintaksis yang bagus untuk pengendalian ralat yang mudah dan menyeronokkan. Contohnya:

fn failingFunction() error{MyError}!void { return error.MyError; } pub fn main() !void { try failingFunction(); }
Salin selepas log masuk

Dalam kod di atas kami mengisytiharkan ralat MyError (Ini juga boleh dilakukan secara berasingan) dan mengembalikannya.
Percubaan bermaksud "jika ini mengembalikan ralat, kembalikan ke sini" seperti dalam:

failingFunction() catch |err| return err;
Salin selepas log masuk

Saya percaya pendekatan ini merupakan gabungan yang hebat dan menyelamatkan kita daripada perkara yang tidak berkesudahan jika (err != nil) di Go land.

Sorotan lain:

  • Ralat adalah jelas, semua jenis perlu diisytiharkan dan dikendalikan
  • Pengendalian dilakukan segera dan di sana, bukan pada tahap blok
  • Terima kasih kepada penangkapan muatan, ralat ditaip dengan betul dan autocompeleted, menjadikannya mudah untuk menggunakan sesuatu seperti ungkapan suis.

Sintaks !void- ! digunakan untuk mencipta kesatuan antara jenis pulangan dan jenis ralat. Zig menyokong tidak menambah sebarang ralat sebelum !, yang sepatutnya mewujudkan gabungan semua ralat yang sebenarnya anda kembalikan daripada fungsi tersebut.

Dalam amalan, saya mendapati sintaks ini tidak membantu. Sekurang-kurangnya dengan pengalaman IDE saya, saya tidak mendapat sebarang intellisense dalam kes ini, dan ia menjadikan fungsi kurang jelas.Cukup beritahu saya apa yang anda akan pulangkan!
Saya hanya nampak ia berguna pada fungsi main().

Tangkapan muatan

Anda tahu bagaimana dalam TS anda mungkin mempunyai jenis seperti nombor | tidak ditentukan? Anda mungkin menggunakan if atau beberapa logik untuk mengecilkan jenis kepada perkara yang anda perlukan dan TS secara automatik memaparkan jenis baharu dengan betul.
Walaupun ia mudah, terdapat masalah dengan pendekatan ini:

  • Jika jenis boleh berubah sepanjang fungsi, ia lebih sukar untuk diikuti
  • Dalam sesetengah kes anda masih perlu melakukan pelakon

Di Zig, anda melakukan ini dengan "Tangkapan Muatan". Anda boleh "menangkap" aka mencipta pembolehubah tidak berubah baharu dengan jenis yang terhasil. Contohnya:

const maybe_num: ?usize = 10; // `?` Means it can be `null` if (maybe_num) |num| { // Use num }
Salin selepas log masuk

Sangat jelas apa yang berlaku! Lebih-lebih lagi, pembolehubah itu tidak boleh diubah, tetapi jika andabenar-benarperlu mengubahnya, anda boleh menangkap penunjuk kepada nilai sebaliknya.

Perlu juga dinyatakan bahawa mekanisme ini boleh digunakan di seluruh bahasa, termasuk: untuk, suis, tangkap, dll.

Kejahilan kompem

Diakui saya masih belum memahami sepenuhnya kemungkinan comptime. Tetapi secara ringkasnya, anda boleh menjalankan kod biasa semasa penyusunan. Anda boleh mencipta keseluruhan fungsi yang hanya digunakan pada masa ini dan boleh mengembalikan ralat kompilasi jika perlu.

Ia sangat sesuai dengan Zig, kerana ia adalah bahasa yang sangat mudah dibentuk. Malah jenis adalah nilai, bermakna anda boleh membuat, menukar dan mendapatkan maklumat tentang jenis (Terutama dalam masa kompaun).

Contoh asas ini daripada Panduan Zig:

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
Salin selepas log masuk

Pengalaman editor

Saya menggunakan VSCode dengan pemalam Zig rasmi (yang menggunakan zls). Kecerdasan dan kesilapan yang saya lihat dalam editor meninggalkan banyak yang diingini.

"kelakuan haram yang boleh dikesan"aka perkara yang menyalahi undang-undang yang akan mengakibatkan ralat kompilasi biasanya tidak dipaparkan dalam editor. Contohnya:

const nums = [3]u8{ 2, 1, 3 }; _ = nums[4]; // Index out of bounds error
Salin selepas log masuk

Saya menggunakan versi cawangan induk 0.14 (dev), jika ia sepatutnya berfungsi, beritahu saya dalam ulasan!

Atas ialah kandungan terperinci Zig Tanggapan Pertama daripada JS Dev. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!