Şaka gibi ama, bir REST API endpoint'i için basit bir filtreleme algoritması yazıyordum. Ana mantık, yani "şu koşulları sağlayan kayıtları getir" kısmı, belki 15 dakikada bitti. Ama sonra... Sonra o lanet "ya şöyle olursa?" soruları başladı. Kafayı yiyecektim resmen.
Yani, algoritmanın normal akışında nadiren karşılaşacağı, sınırda kalan durumlar. Mesela benim durumumda: Kullanıcı tarih aralığı seçmemişse? Hem başlangıç hem bitiş tarihi aynı gün verilirse? Filtre için gönderilen parametrelerden biri null veya boş string gelirse? Liste boş dönerse frontend'de patlamasın diye ne yapacağım?
Ana mantık şuydu:
JavaScript:
const results = data.filter(item => item.date >= startDate && item.date <= endDate);
Ama gerçek hayatta yazdığım kod, bu 1 satırın etrafını saran onlarca satırlık validasyon, default değer atama ve hata kontrolü oldu. StackOverflow'da bile "basit tarih filtresi" diye aratınca çıkan örnekler genelde bu edge'leri hiç düşünmüyor!
Artık şu ilkeyi benimsedim: Ana mantığı yazdıktan hemen sonra, oturup potansiyel tüm çılgın senaryoları düşünüyorum. Hatta bazen unit test'leri önce yazıyorum ki, "bu koşulda ne olmalı?" sorusunu baştan cevaplayayım. Bu, zaman kaybı gibi görünse de, gece 3'te production'da çıkan bir bug'ı debug etmekten kesinlikle daha az yorucu.
Siz de böyle mi hissediyorsunuz? Bir function yazarken, asıl işi yapan koddan çok, onun etrafına koruma duvarı örmekle mi uğraşıyorsunuz? Edge case'leri hızlı ve sistematik düşünmenin bir püf noktası var mı? Lütfen yorumlarda fikirlerinizi paylaşın, birlikte ağlayalım.