WY · BÖLÜM 07 · FÖY 133
YAZ-133 · Yazılım & Teknik · ~2 dk

Devraldigin legacy fonksiyonu satir satir okut, riskli noktalarini isaretle

Devraldigin fonksiyonun tek cumlelik ozetini, mantik bloklarina bolunmus satir satir aciklamasini, girdi/cikti sozlesmesini ve baslik baslik isaretlenmis riskli noktalar listesini elde edersin.

Kanca

Uc yil once baskasinin yazip gittigi bir fonksiyonu aciyorsun. Ne yaptigini tam cozemeden tek satir bile degistirmek istemiyorsun, cunku nerede patlayacagini bilmiyorsun.

Hamle — Claude / ChatGPT (ikisi de calisir)
Prompt — kopyala & yapıştır
Sen deneyimli bir yazilim muhendisisin. Sana asagida devraldigim, baskasinin yazdigi bir fonksiyon verecegim. Gorevin bu kodu benim yerime satir satir okumak ve korkmadan degistirebilecegim kadar netlestirmek.

Kurallar:
- Sadece gordugun kod uzerinden konus. Tahmin yurutme.
- Kodun cagirdigi ama icerigini gormedigin baska fonksiyon, degisken ya da ayar varsa, o satirda "EKSIK: [neyi bilmem gerektigi]" yaz.
- Var olmayan davranis uydurma. Emin olamadigin yeri "belirsiz" diye isaretle.
- Turkce yaz, sade dille. Bana ne yapacagimi soyle, ustunkoru gecme.

Su sirayla ver:

1. TEK CUMLE OZET: Bu fonksiyon en temelde ne yapiyor?

2. SATIR SATIR: Kodu mantik bloklarina bol. Her blok icin: hangi satirlar, ne yapiyor, neden orada.

3. GIRDI/CIKTI: Aldigi parametreler ne bekliyor, ne donduruyor, hangi durumda ne donuyor.

4. RISKLI NOKTALAR: Su basliklarin her birini tek tek tara ve bulduklarini yaz -
   - Disari sizan etki (global degisken, veritabani, dosya, dis servis cagrisi)
   - Null / bos / beklenmedik girdide kirilma noktalari
   - Sessizce yutulan hata (yakalanip gorunmez olan)
   - Degistirilen parametre veya paylasimli durum (mutation)
   - Bagli oldugu ornukmeyen varsayimlar (siralama, tip, zamanlama)

5. DEGISTIRIRKEN DIKKAT: Bu koda dokunacak biri, bir sey degistirmeden once neyi test etmeli?

Fonksiyon:
[KODU BURAYA YAPISTIR]
Çıktı

Devraldigin fonksiyonun tek cumlelik ozetini, mantik bloklarina bolunmus satir satir aciklamasini, girdi/cikti sozlesmesini ve baslik baslik isaretlenmis riskli noktalar listesini elde edersin. Orta boy bir fonksiyon icin birkac dakikada okunur hale gelir.

Kariyer çentiği

Kimsenin dokunmaya cesaret edemedigi eski koda guvenle girip degistirebilmek, seni ekipte "o modulu cozen kisi" konumuna tasir.

Sınır

AI sadece yapistirdigin kodu gorur; cagirdigi dis fonksiyonlarin ya da veritabani semasinin gercek davranisini bilemez, o yuzden "EKSIK" isaretlerini kendin dogrulamadan production'da degisiklik yapma ve kod sirket sirriysa once anahtar/gizli bilgileri temizle.

Örnek — bu prompt ne üretir?
Örnek girdi
function hesaplaSiparisToplam($siparis, $indirimKodu = null) {
    global $db, $aktifKampanya;
    $toplam = 0;
    foreach ($siparis['kalemler'] as $k) {
        $toplam += $k['fiyat'] * $k['adet'];
        $k['islendi'] = true;
    }
    if ($indirimKodu) {
        try {
            $res = $db->query("SELECT oran FROM indirimler WHERE kod = '$indirimKodu'");
            $oran = $res->fetch()['oran'];
            $toplam = $toplam - ($toplam * $oran / 100);
        } catch (Exception $e) {}
    }
    if ($aktifKampanya == 'yaz') {
        $toplam = $toplam * 0.9;
    }
    $siparis['toplam'] = $toplam;
    kaydetLog($siparis['id'], $toplam);
    return round($toplam);
}
Çıktı

1. Tek cümle özet

Bir siparişin kalemlerini toplayıp, varsa bir indirim kodunu ve "yaz" kampanyasını uygular, sonucu yuvarlayıp döndürür ve bu arada bir log yazar.

2. Satır satır

Blok A — Hazırlık (satır 2-3)

global $db, $aktifKampanya; ile fonksiyon, dışarıda tanımlı iki değişkeni içeri alır. $toplam = 0; toplamı sıfırdan başlatır. Bu blok fonksiyonun dış dünyaya bağlandığı yer.

Blok B — Kalem toplamı (satır 4-7)

kalemler dizisini gezer, her kalemin fiyat * adet çarpımını toplama ekler. Ayrıca her kaleme islendi = true yazar — ama bu döngüdeki $k bir kopya, kalıcı olup olmadığı belirsiz.

Blok C — İndirim kodu (satır 8-15)

Sadece $indirimKodu doluysa çalışır. Veritabanından koda karşılık gelen oran'ı çeker ve toplamdan yüzde olarak düşer. catch bloğu boş.

Blok D — Kampanya (satır 16-18)

$aktifKampanya "yaz" ise toplamı 0.9 ile çarpar (yüzde 10 indirim). İndirimden sonra uygulanır, yani iki indirim üst üste binebilir.

Blok E — Yazma ve dönüş (satır 19-21)

$siparis['toplam'] alanına sonucu yazar, kaydetLog çağırır, round($toplam) döndürür.

3. Girdi / çıktı

NeBeklenti
$siparisİçinde kalemler dizisi olan, her kalemde fiyat ve adet bulunan bir dizi. id alanı da bekleniyor (log için).
$indirimKoduOpsiyonel string. Boş/null verilirse indirim bloğu atlanır.
DöndürürYuvarlanmış toplam (sayı). Boş kalemler ise 0 (kampanya kapalıysa). Geçersiz indirim kodunda ne döndüğü belirsiz (aşağıya bak).

4. Riskli noktalar

  • Dışarı sızan etki: global $db (veritabanı), global $aktifKampanya (dış durum) ve kaydetLog(...). Fonksiyon bu üçü olmadan doğru çalışmaz. EKSIK: kaydetLog ne yapıyor — dosyaya mı, veritabanına mı yazıyor, hata fırlatır mı?
  • Null / boş / beklenmedik girdi: $siparis['kalemler'] yoksa döngü patlar. $res->fetch() hiç satır dönmezse $oran null olur ve toplam ya aynı kalır ya da hatalı hesaplanır — belirsiz. fiyat veya adet sayı değilse çarpım bozulur.
  • Sessizce yutulan hata: Boş catch (Exception $e) {}. Veritabanı hatası, geçersiz kod veya bağlantı sorunu tamamen görünmez olur; indirim sessizce uygulanmaz ve kullanıcı tam fiyat öder ama kimse fark etmez.
  • Değiştirilen durum (mutation): $k['islendi'] = true ve $siparis['toplam'] = $toplam. Bunların çağırana geri yansıyıp yansımadığı, $siparis'in referansla mı değerle mi geçtiğine bağlı — belirsiz.
  • Bağlı olduğu görünmeyen varsayımlar: $indirimKodu doğrudan sorgu metnine gömülüyor — SQL enjeksiyon riski. $aktifKampanya == 'yaz' gevşek karşılaştırma. oran'ın 0-100 aralığında geçerli bir sayı olduğu varsayılıyor. EKSIK: indirimler tablosunun yapısı ve $aktifKampanya'nın nerede/ne zaman set edildiği.

5. Değiştirirken dikkat

Bu koda dokunmadan önce şunları test et: indirim kodu var / yok / veritabanında olmayan üç durum; boş kalemler listesi; $aktifKampanya açık ve kapalı iki durum; ve $db bağlantısının düştüğü durum (boş catch yüzünden bunu ancak testle görürsün).

ÜRETİM: TEM 2026 · CLAUDE Bu kayıt eşlenmiş örnek girdi ve çıktı içerir. Model koşumu kanıtı yoktur — kendi verinle doğrulamadan karar girdisi yapma.

Kendi verinle çalıştır
Verini aşağıya yapıştır; prompt seninkiyle birleşip çalıştırmaya hazır tek bloğa dönüşsün. Sonra tek dokunuşla Claude ya da ChatGPT'de aç.
Hazır prompt — verini bekliyor
Sen deneyimli bir yazilim muhendisisin. Sana asagida devraldigim, baskasinin yazdigi bir fonksiyon verecegim. Gorevin bu kodu benim yerime satir satir okumak ve korkmadan degistirebilecegim kadar netlestirmek.

Kurallar:
- Sadece gordugun kod uzerinden konus. Tahmin yurutme.
- Kodun cagirdigi ama icerigini gormedigin baska fonksiyon, degisken ya da ayar varsa, o satirda "EKSIK: [neyi bilmem gerektigi]" yaz.
- Var olmayan davranis uydurma. Emin olamadigin yeri "belirsiz" diye isaretle.
- Turkce yaz, sade dille. Bana ne yapacagimi soyle, ustunkoru gecme.

Su sirayla ver:

1. TEK CUMLE OZET: Bu fonksiyon en temelde ne yapiyor?

2. SATIR SATIR: Kodu mantik bloklarina bol. Her blok icin: hangi satirlar, ne yapiyor, neden orada.

3. GIRDI/CIKTI: Aldigi parametreler ne bekliyor, ne donduruyor, hangi durumda ne donuyor.

4. RISKLI NOKTALAR: Su basliklarin her birini tek tek tara ve bulduklarini yaz -
   - Disari sizan etki (global degisken, veritabani, dosya, dis servis cagrisi)
   - Null / bos / beklenmedik girdide kirilma noktalari
   - Sessizce yutulan hata (yakalanip gorunmez olan)
   - Degistirilen parametre veya paylasimli durum (mutation)
   - Bagli oldugu ornukmeyen varsayimlar (siralama, tip, zamanlama)

5. DEGISTIRIRKEN DIKKAT: Bu koda dokunacak biri, bir sey degistirmeden once neyi test etmeli?

Fonksiyon:
[KODU BURAYA YAPISTIR]

Yapıştırdığın veri tarayıcından çıkmaz — WhiteYaka'ya gönderilmez. Prompt panoya kopyalanır; açılan sohbete Ctrl/⌘ + V ile yapıştırırsın.

i Bu föy örnek girdi ve çıktı içerir; yapısal doğrulama ve ölçütlü prompt koşumu henüz kaydedilmedi.

Bülten kaydı kapalı.

Bu sayfa e-posta adresi toplamaz ve liste kaydı başlatmaz. 160 hamlenin tamamı giriş yapmadan açık.