DRY, KISS ve YAGNI: kodu sade ve sürdürülebilir tutan ilkeler
Sözlük

DRY, KISS ve YAGNI: kodu sade ve sürdürülebilir tutan ilkeler

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 3 dk okuma

DRY, KISS ve YAGNI; tekrarı azaltan, basit tutan ve gereksiz özellikten kaçınan yazılım ilkeleridir. Kod örnekleriyle açıklanır.

Üç ilke nedir?

DRY, Don't Repeat Yourself ifadesinin kısaltmasıdır: aynı bilgi ya da mantık sistemde tek bir yerde bulunmalıdır. KISS, Keep It Simple, Stupid ifadesinin kısaltmasıdır: çözüm ihtiyacı karşılayan en basit biçimde tasarlanmalıdır. YAGNI, You Aren't Gonna Need It ifadesinin kısaltmasıdır: şu an gereken olmayan özellik yazılmamalıdır.

Üçü de temiz kod anlayışının temelinde yer alır ve ortak amaçları kodun okunmasını, değiştirilmesini ve test edilmesini kolaylaştırmaktır.

DRY nasıl çalışır?

Aynı iş kuralı kodun birçok yerinde kopyalanırsa, kural değiştiğinde bütün kopyaların bulunup güncellenmesi gerekir; biri unutulduğunda tutarsızlık doğar. DRY bunu önlemek için tekrarlanan mantığı tek bir fonksiyona, sınıfa veya yapılandırmaya toplar.

Örnek:

function indirimliFiyat(fiyat) { return fiyat * indirimOrani; }

Bu fonksiyon her yerde çağrılır; indirim kuralı değiştiğinde yalnızca burası güncellenir. Dikkat edilecek nokta şudur: kod parçaları şimdilik benzer görünse de farklı nedenlerle değişecekse zorla birleştirmek yeni bağımlılık yaratır.

KISS nasıl çalışır?

Gereğinden karmaşık çözüm, hem hata riskini hem de ekibe yeni gelenin öğrenme yükünü artırır. KISS, çalışan en basit çözümü tercih etmeyi söyler.

Örneğin bir listedeki aktif kayıtları seçmek için ayrı bir kural motoru kurmak yerine basit bir filtre yazmak yeterlidir:

const aktifler = kayitlar.filter(k => k.aktif);

Sade kod, genellikle daha kolay test edilir ve daha az yan etki üretir. Basitlik, kısa kod demek değildir; okunabilir ve amacı belli kod demektir.

YAGNI nasıl çalışır?

Geliştiriciler çoğu zaman ileride lazım olur düşüncesiyle ek parametre, soyutlama veya özellik ekler. Bu eklemeler bugün kullanılmadığı halde bakım, test ve anlama yükü getirir. İleride gerçekten gerekmezse de boşa gitmiş emek olur.

YAGNI, özelliği ihtiyaç doğduğunda yazmayı önerir. Örneğin yalnızca tek ödeme yöntemi destekleniyorsa, henüz olmayan yöntemler için ortak bir soyutlama kurmak erken yapılmış bir karmaşıklıktır. İhtiyaç gerçekten ortaya çıktığında yeniden düzenleme yapmak çoğu zaman daha ucuzdur.

Örneğin bir hata ayıklama günlüğü için yapılandırılabilir bir mesaj motoru kurmak yerine ihtiyaç doğduğunda tek bir fonksiyon yazmak YAGNI'ye uygundur. Aynı işlev sonradan birçok yerde gerçekten gerekirse, o zaman ortak hale getirilir.

Üçü birlikte nasıl dengelenir?

İlkeler zaman zaman birbiriyle gerilim yaratır. Aşırı DRY, karmaşık ve çok parametreli soyutlamalara yol açıp KISS'i ihlal edebilir. Aşırı KISS ise tekrarı kabul ederek DRY'dan uzaklaştırabilir. YAGNI, soyutlamayı geciktirerek bu gerilimi azaltır: tekrar ortaya çıktığında ve kalıp netleştiğinde birleştirilir.

Pratik kural olarak benzer kodun yinelenmesi ancak mantığın aynı nedenle değişeceği anlaşıldığında ortak hale getirilir. Kod incelemesi ve refactoring bu dengeyi sürdürmenin ana araçlarıdır.

Bu konu Mindset programlarında nerede geçer?

Clean Coding Uzmanlığı Eğitimi, fonksiyonel ve modüler kod yazımı, isimlendirme, hata yönetimi ve refactoring modülleriyle bu ilkelerin günlük kod pratiğine dönüşmesini sağlar. Geliştiriciler ve teknik liderler için uygundur.

Yazılım Mimarisi ve Tasarım Desenleri programı ise SOLID ve tasarım prensiplerini mimari seviyede ele alır.

İlgili Mindset programı

Clean Coding Uzmanlığı Eğitimi: Yazılımda Kalite, Okunabilirlik ve Verimlilik

Sık sorulanlar

Sık sorulan sorular

DRY her tekrarı kaldırmak anlamına mı gelir?

Hayır. DRY, aynı bilginin veya iş kuralının birden fazla yerde yaşamasını önler. Tesadüfen benzeyen ama farklı nedenlerle değişecek kodların birleştirilmesi gerekmez; erken birleştirme gereksiz bağımlılık yaratabilir ve kodu daha karmaşık hale getirir.

KISS ile YAGNI arasındaki fark nedir?

KISS, mevcut çözümün olabildiğince basit olmasını ister. YAGNI ise henüz gerekmeyen özelliğin ya da esnekliğin eklenmemesini ister. Biri çözümün biçimiyle, diğeri çözümün kapsamıyla ilgilidir ve çoğu zaman birlikte uygulanır; ikisi de gereksiz karmaşıklığı azaltır.

YAGNI, ileriyi düşünmemek mi demektir?

Hayır. Mimari kararlarda geleceğe dair varsayımlar yine tartışılır ve gerekirse belgelenir. YAGNI, belirsiz bir ihtiyaç için kod yazmamayı söyler; değişime açık, temiz bir tasarım bırakmak onunla çelişmez, tam tersine onu destekler.

Bu ilkeler hangi dillerde geçerlidir?

Hepsi dilden bağımsızdır. Nesne yönelimli, fonksiyonel ve betik dillerinde aynı biçimde uygulanır. Araçlar ve söz dizimi değişse de tekrarı azaltma, basit tutma ve gereksiz kod yazmama mantığı her yerde geçerlidir.

İlkeleri kod incelemesinde nasıl kullanırız?

İncelemede kopyalanmış mantık, gereksiz soyutlama veya hiç kullanılmayan parametre gibi işaretler aranır. Bunlar tespit edildiğinde ilgili ilke gerekçe olarak anılır ve basitleştirme önerilir; böylece tartışma kişisel beğeniye değil ortak bir ölçüte dayanır.

DRY, KISS ve YAGNI Nedir? Yazılım İlkeleri