gokayburuc.dev

Zig'de `void` ve `!void` Kavramları

Zig, düşük seviyeli sistem programlamasında hem güvenlik hem de performansı ön planda tutan bir dildir. Fonksiyonların dönüş türleri, Zig'in hata yönetimi sistemiyle doğrudan ilişkilidir. Bu bağlamda void ve !void türleri sıkça karşımıza çıkar.

Bu yazıda, void ve !void türlerinin ne anlama geldiğini ve hangi durumlarda nasıl kullanıldığını açıklıyoruz.


void Nedir?

Zig'de void, bir fonksiyonun herhangi bir değer döndürmediğini ifade eder. Başka bir deyişle, bu türdeki fonksiyonlar yalnızca çalışır, fakat geriye bir sonuç bırakmazlar.

Özellikleri:

  1. Fonksiyonun geriye bir değer döndürmesi gerekmez.
  2. Yan etki (örneğin ekrana yazdırma, dosya güncelleme) için kullanılabilir.
  3. Zig hata sisteminde aktif bir hata üretmez.

Örnek:

fn logMessage(msg: []const u8) void {
    std.debug.print("Message: {}\n", .{msg});
}

!void Nedir?

Zig'de !void, fonksiyonun bir hata verebileceğini fakat başarılı olduğunda değer döndürmeyeceğini belirtir.

Özellikleri:

  1. ! işareti, Zig'de hata birleştirme (error union) anlamına gelir.
  2. !void, ya hiçbir değer döndürmez ya da hata döndürür.
  3. Hata üretme potansiyeli olan ancak döndürecek bir değeri olmayan işlemler için idealdir.

Kullanım Senaryosu:

Örnek:

fn writeToFile(file: File, data: []const u8) !void {
    try file.write(data);
}

void ve !void Arasındaki Farklar

Özellik void !void
Değer döndürür mü? Hayır Hayır (başarılıysa)
Hata verebilir mi? Hayır Evet
Kullanım amacı Basit işlemler (loglama, print vs.) Hatalı olabilecek işlemler (IO, dosya, vb.)
Hata yönetimi Gerekli değil try, catch, `if (x) val ` ile yapılır

Sonuç

Zig dilinde void, fonksiyonun hiçbir şey döndürmemesini ifade ederken; !void, başarılı çalıştığında bir şey döndürmez ama hata durumunda hata verir. Bu yapı sayesinde Zig, düşük seviyeli sistemlere özgü işlemleri yazarken hataları açıkça kontrol etmenizi sağlar.

Hangi durumda ne kullanacağınız ise işlemin hata üretebilme potansiyeline göre belirlenmelidir.


Zig’in hata yönetimi hakkında daha fazla bilgi almak veya örneklerle derinleşmek isterseniz Errors - Zig Guide bağlantısına göz atabilirsiniz.


#zig