Veri Tipleri & Fonksiyonlar
Veri Tipleri & Fonksiyonlar: Primitive (Stack) vs Reference (Heap) Tipleri JavaScript veri tipleri iki gruba ayrılır ve bu ayrımı anlamak test otomasyonunda kritiktir.
Primitive (Stack) vs Reference (Heap) Tipleri
JavaScript veri tipleri iki gruba ayrılır ve bu ayrımı anlamak test otomasyonunda kritiktir. Primitive tipler (String, Number, Boolean, Null, Undefined, Symbol, BigInt) posta pulu gibidir: değerini üzerinde taşır, kopyalandığında tam bağımsız bir kopya oluşur. Reference tipler (Object, Array, Function) ise posta kutusunun anahtarı gibidir: anahtar kopyalandığında iki anahtar da aynı kutuyu açar — birisi içeriği değiştirince diğeri de değişimi görür. Peki bu neden önemli? Java'da primitive (`int`, `boolean`) ile reference (`List`, `Map`) ayrımı aynıdır ve benzer sorunlara yol açar: `int a = b;` değer kopyalar, `List a = b;` referans kopyalar. QA perspektifinden kritik senaryo: test verisi nesnesini iki test arasında paylaşırsan ve biri içeriği değiştirirse diğer test bozulur — flaky test'in klasik kaynağı. Çözüm: her test için `JSON.parse(JSON.stringify(data))` ile derin kopya almak veya spread `{...config}` kullanmak.
Nesne Referansı — "Posta Kutusu Anahtarı" Canlı
`const config = { retries: 3 }` Heap'te bir nesne yaratır. `config`, o nesnenin adresini (referansını) tutar — nesnenin KENDİSİNİ değil.
`backup = config` referansı KOPYALAR — YENİ bir nesne YARATMAZ. Artık `config` ve `backup` AYNI Heap nesnesini işaret eder (iki anahtar, tek posta kutusu).
`backup.retries = 5` Heap'teki nesneyi DEĞİŞTİRİR. `const backup` sadece REFERANSIN yeniden atanmasını engeller — nesnenin İÇERİĞİNİ değiştirmekten değil.
`config.retries` de `5` yazdırır — `config`'e HİÇ dokunulmadı, ama `backup` üzerinden yapılan değişiklik AYNI nesneyi paylaştıkları için `config`'e de yansıdı. Bu, JS'te en sık rastlanan test-veri kirlenmesi (flaky test) kaynağıdır.
Primitive Tipler — 7 Temel Yapı Taşı
3 Farklı Fonksiyon Yazım Biçimi
Function Declaration vs Expression vs Arrow
// ─── 1. Function Declaration (Bildirim) ────────────────────── // Java'daki public static void / String methodName() gibi // Hoisting: tanımlanmadan ÖNCE çağrılabilir function add(a, b) { return a + b; } console.log(add(3, 5)); // 8 // ─── 2. Function Expression (İfade) ────────────────────────── // Değişkene atanır; hoisting OLMAZ const multiply = function(a, b) { return a * b; }; console.log(multiply(4, 6)); // 24 // ─── 3. Arrow Function (ES6) ────────────────────────────────── // Kısa sözdizimi; 'this' bağlamını DEVRALmaz (önemli fark!) const divide = (a, b) => a / b; // tek satır → return örtük const greet = name => `Merhaba, ${name}!`; // tek parametre → parantez opsiyonel console.log(divide(10, 2)); // 5 console.log(greet("Hasan")); // Merhaba, Hasan!
Micro Lab: JavaScript QA kod yazma
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
Adim Adim: JavaScript QA kod yazma