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:
- Functions (Fonksiyonlar) → bağımsız olarak tanımlanabilir.
- Method benzeri yapılar →
selfparametresi alan ve genelliklestructiçinde tanımlanan fonksiyonlardı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;
}
self: *Point→Pointstruct’ına işaret eden değiştirilebilir pointer’dır.- Bu sayede struct üzerindeki alanlarda değişiklik yapılabilir.
movemethodu verilendxvedydeğerleri kadarxveykoordinatlarını değiştirir.
Immutable Referans (*const Point)
pub fn print(self: *const Point) void {
std.debug.print("Point({}, {})\n", .{ self.x, self.y });
}
self: *const Point→Pointstruct’ına sabit pointer referansıdır.- Struct üzerinde değişiklik yapmaya izin vermez, yalnızca okumaya izin verir.
- Bu örnekte struct’ın değerleri ekrana yazdırılır.
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:
self: *Tile struct üzerinde değişiklik yapabilen fonksiyonlar,self: *const Tile yalnızca okuma yapan fonksiyonlar, şeklinde tanımlanır.
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.