İçeriğe geç

Sıfırdan Fonksiyon ve Sınıf Üretimi

Net bir spec'ten Claude'la production-ready fonksiyon / sınıf üretmenin akışı: tip imzası, edge case, test, doc.

Şükrü Yusuf KAYA
12 dakikalık okuma
Orta
Spec → fonksiyon → test → doc pipeline'ı
Bu derste
Bir gereksinimden 'çalışan + test edilmiş + belgelenmiş' kod üretmek için Claude'la 4 adımlı bir akış.

Spec → Kod Akışı

Claude'a "şunu yap" demek yerine spec yazarak kod isteyin. İyi spec şunları içerir:
  • Tip imzası (TypeScript / Python type hint).
  • Davranış kuralları (girdi-çıktı eşleşmeleri, edge case'ler).
  • Performans / bellek beklentisi (varsa).
  • Hata davranışı (raise / return / null?).
  • Bağımlılık / dış efekt yasağı.
  • Test örnekleri (ideal: 2-3 'happy path' + 2-3 edge).
text
# Spec şablonu
 
## Fonksiyon imzası
def normalize_phone(raw: str, default_country: str = "TR") -> str | None: ...
 
## Davranış
- Türkiye numaralarını "+90 5xx xxx xx xx" formatına çevir.
- Boşluk, parantez, tire ve "+" işaretlerini at.
- 10 haneli "5xx..." numaralara "+90" ekle.
- 11 haneli "0..." başlayan numaralarda "0"ı at, başına "+90" koy.
- Geçersiz numara için None döndür (raise etme).
 
## Edge cases
- Boş string → None
- Yalnızca harf içerme → None
- "+90 (555) 123-45-67" → "+90 555 123 45 67"
- "905551234567" → "+90 555 123 45 67"
 
## Performans
- Pure function, dış erişim yok.
- 100 ms altı, regex kullanılabilir.
Spec şablonu — Claude'a vermeden önce eksik olmadığından emin ol.

4 Adımlı Akış#

Sıralama · text
python
# Üretim seviyesi spec'in çıktısı — Claude'la üretildi, lokal test
import re
from typing import Optional
 
def normalize_phone(raw: str, default_country: str = "TR") -> Optional[str]:
if not raw or not isinstance(raw, str):
return None
digits = re.sub(r"[^0-9]", "", raw)
if default_country != "TR":
return None # bu fonksiyon yalnızca TR
if len(digits) == 10 and digits.startswith("5"):
digits = "90" + digits
elif len(digits) == 11 and digits.startswith("0"):
digits = "90" + digits[1:]
elif len(digits) == 12 and digits.startswith("90"):
pass
else:
return None
return f"+{digits[:2]} {digits[2:5]} {digits[5:8]} {digits[8:10]} {digits[10:]}"
 
# Hızlı testler
testler = [
("+90 (555) 123-45-67", "+90 555 123 45 67"),
("905551234567", "+90 555 123 45 67"),
("05551234567", "+90 555 123 45 67"),
("", None),
("hello", None),
]
for inp, exp in testler:
got = normalize_phone(inp)
print(f"{inp!r:25} → {got!r:25} {'OK' if got == exp else 'FAIL'}")
Spec'ten üretilmiş fonksiyon — testlerinle birlikte.
Boşluk doldur · text
İyi bir kod üretim akışında ilk adım net bir _____ yazmaktır. TDD'de testler implementasyondan _____ yazılır. Tip imzası belirsizliği büyük ölçüde _____.

Sık Sorulan Sorular

Hayır. İnsan code review + CI testleri + (kritik yollarda) güvenlik review olmadan asla. Claude büyük çoğunlukla iyi kod yazar, ama ender hatalı varsayımlar production'da pahalıya patlar.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

İlgili İçerikler