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.
Uc yil once baskasinin yazip gittigi bir fonksiyonu aciyorsun. Ne yaptigini tam cozemeden tek satir bile degistirmek istemiyorsun, cunku nerede patlayacagini bilmiyorsun.
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]
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.
Kimsenin dokunmaya cesaret edemedigi eski koda guvenle girip degistirebilmek, seni ekipte "o modulu cozen kisi" konumuna tasir.
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.
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);
}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ı
| Ne | Beklenti |
|---|---|
$siparis | İçinde kalemler dizisi olan, her kalemde fiyat ve adet bulunan bir dizi. id alanı da bekleniyor (log için). |
$indirimKodu | Opsiyonel string. Boş/null verilirse indirim bloğu atlanır. |
| Döndürür | Yuvarlanmış 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) vekaydetLog(...). Fonksiyon bu üçü olmadan doğru çalışmaz. EKSIK:kaydetLogne 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$orannull olur ve toplam ya aynı kalır ya da hatalı hesaplanır — belirsiz.fiyatveyaadetsayı 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'] = trueve$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:
$indirimKodudoğ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:indirimlertablosunun 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.
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.
Bülten kaydı kapalı.
Bu sayfa e-posta adresi toplamaz ve liste kaydı başlatmaz. 160 hamlenin tamamı giriş yapmadan açık.