gokayburuc.dev

Zig dilinde Method Yapıları

Zig programlama dilinde Nesne Yönelimli Programlama (OOP) dillerinde olduğu gibi (Java, C#, Python vb.) doğrudan bir method kavramı yoktur. Zig bir OOP dili değildir. Bunun yerine şu yapılar kullanılır:

Zig’de bu tür fonksiyonlar, aslında yalnızca isimlendirilmiş ve struct içerisine yerleştirilmiş fonksiyonlardır. Yani gerçek anlamda “method” değillerdir; namespaced functions olarak çalışırlar.


Struct İçinde Method Tanımı

const Foo = struct {
    pub fn hello() void {
        std.debug.print("Foo says hello!\n", .{});
    }
};

Burada hello() fonksiyonu bir struct içine yazılmıştır. Çağrılırken nokta (.) operatörü kullanılır:

Foo.hello();

Eğer method bir struct örneği (instance) üzerinde çalışacaksa, self parametresi tanımlanır.


Örnek: Point Struct ile Method Kullanımı

const std = @import("std");

const Point = struct {
    x: i32,
    y: i32,

    // Method -> Struct içinde fonksiyon
    pub fn move(self: *Point, dx: i32, dy: i32) void {
        self.x += dx;
        self.y += dy;
    }

    // Ekrana değerleri yazdıran method
    pub fn print(self: *const Point) void {
        std.debug.print("Point({}, {})\n", .{ self.x, self.y });
    }
};

pub fn main() void {
    var p = Point{ .x = 0, .y = 0 };

    p.move(3, 4);
    p.print();
}

Methodların Yapıtaşları

Mutable Referans (*Point)

pub fn move(self: *Point, dx: i32, dy: i32) void {
    self.x += dx;
    self.y += dy;
}

Immutable Referans (*const Point)

pub fn print(self: *const Point) void {
    std.debug.print("Point({}, {})\n", .{ self.x, self.y });
}

Zig’de self Parametresi

Zig dilinde, diğer OOP dillerinde olduğu gibi gizli bir this parametresi yoktur. Bunun yerine method fonksiyonlarında self parametresi açıkça yazılır. Bu tasarım, kodu daha şeffaf ve öngörülebilir hale getirir.


Zig’de Inheritance

Zig’de OOP dillerindeki gibi inheritance (kalıtım) yoktur. Dolayısıyla bir method’un başka bir struct’tan devralınması mümkün değildir. Zig yalnızca kompozisyonu destekler. Yani struct’lar içinde başka struct’lar alan olarak kullanılabilir ve methodlar bu yapılar üzerinden çalıştırılabilir.


Sonuç ve Değerlendirme

Zig’de “method” kavramı, aslında struct içindeki fonksiyonlar ile gerçekleştirilir. Bunlar:

Zig’in yaklaşımı, methodları sadeleştirir ve gereksiz OOP soyutlamalarını ortadan kaldırır. Böylece daha öngörülebilir ve düşük seviyeli kontrol sunar.

#zig