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 →
self
parametresi alan ve genelliklestruct
iç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
→Point
struct’ına işaret eden değiştirilebilir pointer’dır.- Bu sayede struct üzerindeki alanlarda değişiklik yapılabilir.
move
methodu verilendx
vedy
değerleri kadarx
vey
koordinatları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
→Point
struct’ı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: *T
ile struct üzerinde değişiklik yapabilen fonksiyonlar,self: *const T
ile 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.