Zig Programlama Dilinde Diziler (Arrays)
Zig, sistem programlama dili olarak güçlü bir bellek kontrolü ve yüksek performans sunar. Bu yazıda, Zig dilinde dizilerin nasıl tanımlandığını, nasıl işlendiğini ve çeşitli dizi işlemlerini örnek kodlarla birlikte öğreneceğiz.
1. Dizi Tanımlama (Declared Arrays)
Zig'de diziler belirli bir uzunluğa ve sabit türlere sahiptir.
// Dört elemanlı u32 tipi bir dizi
var myarray: [4]u32 = [4]u32{32, 106, 700, 1205};
// Üç elemanlı u32 tipi bir dizi
var foo: [3]u32 = [3]u32{42, 108, 542};
myarray
: 32-bit unsigned integer (u32
) tipinde 4 eleman içerir.foo
: 3 elemanlı biru32
dizisidir. Elemanlar doğrudan aynı türden verildiği için uyumludur.
2. Uzunluğu Belirtilmeyen Diziler (Undeclared Length Arrays)
Zig’de dizi uzunluğu derleyici tarafından otomatik olarak da hesaplanabilir.
var undecarray: [_]u32 = [_]u32{123, 35, 45, 77};
[_]u32
: Derleyici burada dizinin 4 elemanlı olduğunu kendisi anlar.- Bu kullanım, kodun daha okunabilir olmasını sağlar ve manuel uzunluk hatalarını önler.
3. Dizi Uzunluğu Öğrenme (Array Length)
Dizinin uzunluğu .len
özelliğiyle öğrenilir:
var primes: [_]u32 = [_]u32{25, 2500, 3000, 1212, 19881723};
const length = primes.len;
primes.len
: 5 değerini döndürür.len
sayesinde döngülerde veya kontrol yapılarında kolaylıkla kullanılabilir.
4. Dizileri Birleştirme (Concatenate Arrays)
Zig'de iki dizi ++
operatörü ile birleştirilebilir:
var le = [_]u16{0, 1, 2};
var et = [_]u16{3, 4, 5};
var leet = le ++ et;
leet
:[6]u16
olarak sonuçlanır:{0, 1, 2, 3, 4, 5}
- İki dizinin türleri aynı olmalıdır (
u16
ileu16
gibi).
5. Diziyi Tekrarlama (Repeat Array)
Bir dizi sabit sayıda tekrarlanarak yeni bir dizi oluşturulabilir:
var arr = [_]u8{1, 2, 3};
// Dizi iki kez tekrarlanır
var rep_arr = arr ** 2;
rep_arr
:{1, 2, 3, 1, 2, 3}
şeklinde olur.**
operatörü dizinin tekrar sayısını belirtir.
6. Döngüyle Dizi Üzerinde Gezinme (Loops and Arrays)
Zig’de for
döngüsü diziler üzerinde kolaylıkla kullanılabilir:
var leet = [_]u8{12, 13, 14};
for (leet) |n| {
// Ekrana yazdırma
std.debug.print("{}", .{n});
}
for (leet) |n|
: Dizinin her elemanını sırasıylan
değişkenine atar.std.debug.print
: Standart çıktıya yazdırmak için kullanılır."{}"
formatı Zig'in yerleşik biçimlendiricisidir.
7. Tanımsız Dizi Oluşturma (Undefined Arrays)
Diziyi önceden belirleyip içeriğini sonra doldurmak istiyorsanız undefined
kullanılabilir:
var narr: [3]u8 = undefined;
undefined
: Zig’e göre bu bellek bölgesi tanımlanmadı; içerik çöp veri içerebilir.- Bu kullanımda, daha sonra
narr[0] = 5
gibi atamalar yapılması gerekir. - Dikkat:
undefined
kullanımı, dikkatli olunmazsa hatalara ve güvenlik açıklarına yol açabilir.
Sonuç
Zig dilinde dizilerle çalışmak hem basit hem de güçlüdür. Bu makalede sabit uzunluklu diziler, dinamik uzunluk çıkarımı, birleştirme, tekrarlama, döngülerle işlem ve undefined
kullanımı gibi temel yapıları ele aldık. Zig’in tür güvenliği ve açık bellek modeli sayesinde düşük seviyeli işlemleri daha güvenli biçimde yazmak mümkündür.