7 poin oleh GN⁺ 2025-08-22 | Belum ada komentar. | Bagikan ke WhatsApp
  • Zig berbasis sintaks berbasis kurung kurawal yang mirip Rust, tetapi ditingkatkan dengan semantik bahasa yang lebih sederhana dan pilihan sintaks yang lebih rapi
  • Literal bilangan bulat semuanya dimulai sebagai comptime_int dan dikonversi secara eksplisit saat ditugaskan, sementara literal string menggunakan notasi string mentah ringkas berbasis \\
  • Literal record dalam bentuk .x = 1 memudahkan pencarian penulisan field, dan semua tipe direpresentasikan secara konsisten dengan notasi prefiks
  • and·or digunakan sebagai keyword alur kontrol, dan konstruksi if·loop dapat menghilangkan kurung kurawal secara opsional, dengan formatter yang menjamin keamanan
  • Tanpa namespace, semua hal diperlakukan sebagai ekspresi untuk menyatukan sintaks tipe·nilai·pola, serta memanfaatkan generic·literal record·fungsi bawaan (@import, @as, dll.) secara ringkas

Ikhtisar

  • Zig memiliki tampilan yang mirip Rust, tetapi mengadopsi struktur bahasa yang lebih sederhana
  • Desain sintaksnya berfokus pada ramah grep, konsistensi sintaks, dan mengurangi noise visual yang tidak perlu

Literal bilangan bulat

const an_integer = 92;  
assert(@TypeOf(an_integer) == comptime_int);  
  
const x: i32 = 92;  
const y = @as(i32, 92);  
  • Semua literal bilangan bulat bertipe comptime_int
  • Saat ditugaskan ke variabel, tipe harus ditentukan secara eksplisit atau dikonversi dengan @as
  • Bentuk var x = 92; tidak akan berfungsi dan memerlukan tipe eksplisit

Literal string

const raw =  
    \\Roses are red  
    \\  Violets are blue,  
    \\Sugar is sweet  
    \\  And so are you.  
    \\  
;  
  • Setiap baris adalah token terpisah sehingga tidak ada masalah indentasi
  • Tidak perlu melakukan escape pada \\ itu sendiri

Literal record

const p: Point = .{  
    .x = 1,  
    .y = 2,  
};  
  • Format .x = 1 menguntungkan untuk membedakan baca/tulis
  • Notasi .{} membedakannya dari blok sambil otomatis dikonversi ke tipe hasil

Notasi tipe

u32        // bilangan bulat  
[3]u32     // array panjang 3  
?[3]u32    // array yang bisa null  
*const ?[3]u32 // pointer konstan  
  • Semua tipe memakai notasi prefiks
  • Dereferensi memakai notasi sufiks (ptr.*)

Identifier

const @"a name with space" = 42;  
  • Dapat mencegah konflik keyword atau memberi nama khusus

Deklarasi fungsi

pub fn main() void {}  
fn add(x: i32, y: i32) i32 {  
    return x + y;  
}  
  • Keyword fn dan nama fungsi berdempetan sehingga mudah dicari
  • Tidak memakai -> untuk menuliskan tipe kembalian

Deklarasi variabel

const mid = lo + @divFloor(hi - lo, 2);  
var count: u32 = 0;  
  • Menggunakan const dan var
  • Penulisan tipe mengikuti urutan nama: tipe

Alur kontrol: and/or

while (count > 0 and ascii.isWhitespace(buffer[count - 1])) {  
    count -= 1;  
}  
  • and, or adalah keyword alur kontrol
  • Operasi bit menggunakan &, |

Pernyataan if

.direction = if (prng.boolean()) .ascending else .descending;  
  • Tanda kurung wajib, kurung kurawal opsional
  • zig fmt menjamin format yang aman

Perulangan

for (0..10) |i| {  
    print("{d}\n", .{i});  
} else @panic("loop safety counter exceeded");  
  • for dan while sama-sama mendukung klausa else
  • Iterator dan nama elemen ditempatkan secara intuitif

Namespace dan resolusi nama

const std = @import("std");  
const ArrayList = std.ArrayList;  
  • Shadowing variabel dilarang
  • Tidak ada namespace maupun glob import

Semua adalah ekspresi

const E = enum { a, b };  
const e: if (true) E else void = .a;  
  • Menyatukan sintaks tipe·nilai·pola
  • Ekspresi kondisional dapat ditempatkan di posisi tipe

Generic

fn ArrayListType(comptime T: type) type {  
    return struct {  
        fn init() void {}  
    };  
}  
  
var xs: ArrayListType(u32) = .init();  
  • Generic diekspresikan dengan sintaks pemanggilan fungsi (Type(T))
  • Argumen tipe selalu eksplisit

Fungsi bawaan

const foo = @import("./foo.zig");  
const num = @as(i32, 92);  
  • Memanggil fitur yang disediakan compiler dengan prefiks @
  • @import menampilkan jalur file dengan jelas
  • Argumennya harus berupa literal string

Kesimpulan

  • Sintaks Zig adalah contoh bagaimana sekumpulan pilihan kecil dapat membentuk bahasa yang enak dibaca
  • Jika jumlah fitur dikurangi, sintaks yang dibutuhkan juga berkurang, dan kemungkinan konflik antarsintaks pun menurun
  • Meminjam ide bagus dari bahasa yang sudah ada, tetapi berani memperkenalkan sintaks baru saat diperlukan

Belum ada komentar.

Belum ada komentar.