Don’t Repeat Yourself (DRY) Prensibi Nedir?

İngilizce “Don’t Repeat Yourself” kelimelerinin baş harflerinden referansla adlandırılan DRY prensibi, ilk olarak Andy Hunt ve Dave Thomas tarafından hazırlanan The Pragmatic Programmer (Pragmatik Programcı) kitabında formüle edilmiştir.

DRY Prensibi

Türkçe karşılığıyla “Kendini tekrar etme” anlamına gelen DRY prensibi, adından da anlaşılacağı üzere gereksiz kod tekrarlarını önlemeyi amaçlayan bir tasarım ilkesidir.

Don’t Repeat Yourself (DRY) prensibi, bir kod parçasının yalnızca bir kez yazılması ve daha sonra tekrar kullanılması gerektiği fikrine dayanır. Bu sayede, kodun bakımı daha kolay hale gelir, kodun boyutu azalır ve kodun hatalarının azaltılması sağlanır. Zira DRY prensibini benimsemiş bir programcı, üzerinde çalıştığı projenin anlaşılmasını, düzenlenmesini ve bakımını kolaylaştırmış olur.

Örneğin bir web sayfasının farklı farklı yerlerinde CSS stillerinin kullanılacağını farz edelim. İlgili stillerin kullanıldığı yerleri tek tek bulup manipüle etmek yerine ayrı bir CSS dosyasına bu stilleri saklayabiliriz. Böylece ilgili stilleri kolayca manipüle edebilir ve bunların kullanıldığı tüm yerleri otomatik olarak tek bir yerden güncelleyebiliriz.

Başka bir örnek olarak, bir web uygulamasında birçok yerde kullanılan bir iletişim formu düşünelim. Eğer formun kodu her sayfada ayrı ayrı yazılırsa, bu kodun her bir sayfada ayrı ayrı güncellenmesi gerekecektir. Bu hem zaman alıcı hem de hata yapma riskini arttıran bir işlemdir. Bunun yerine, formun kodu bir kez yazılıp, tüm sayfalarda aynı şekilde kullanılabilir.

Yine bir başka örnek olarak, bir web sitesinde gösterilecek resimlerin boyutları için bir dizi sabit değer tanımlamak isteyelim. Eğer bu sabit değerler her bir resim için ayrı ayrı tanımlanırsa, kodun boyutu artar ve değişiklik yapmak için her bir değer ayrı ayrı güncellenmelidir. Ancak, bu sabit değerler bir kez tanımlanıp, gerektiği zaman kullanılabilir hale getirilirse, kodun boyutu azalır ve değişiklik yapmak daha kolay hale gelir.

Ayrıca belirtmek isterim ki, DRY prensibi tek bir yazılım diline özgü bir prensip değildir. Bu nedenle hangi dilde yazılmış olursa olsun bu prensibi kullanabilirsiniz.

Örnek olarak Javascript dilinde bir hesap makinesi uygulaması yazalım ve DRY prensibini nasıl uygulayabileceğimizi gösterelim:

Yukarıdaki örneğimizde yazdıığmız hesap makinesi uygulaması, her matematiksel işlem için ayrı bir fonksiyon tanımlar. Haliyle, kod tekrarına ve aynı işlemleri farklı fonksiyonlar içinde tekrarlamaya neden olur. Daha DRY bir çözüm oluşturmak için aynı işlemleri bir fonksiyon içinde toplayabiliriz:

Yukarıdaki çözümüzde, hesapla fonksiyonu tek bir işlevi yerine getirir ve kullanılan işlem türüne göre sonucu hesaplar. Böylece, aynı işlemin farklı fonksiyonlarda tekrarlanmasını engeller ve kodun daha az tekrarlanması sağlanır. Dahası, yeni bir işlem eklemek için tek yapmamız gereken switch bloğuna eklemek olacaktır.

DRY Prensibini Nasıl Kullanmalıyız?

DRY prensibinin uygulanması, projenin daha anlaşılır, düzenli ve bakımı kolay hale gelmesine yardımcı olur. Bu sayede, projenin geliştirilmesi ve bakımı daha hızlı ve etkili bir şekilde yapılabilir hale gelir. Ayrıca, projenin daha az hata içermesine yardımcı olur, çünkü aynı bilgi sadece bir yerde tutulur ve kolayca değiştirilebilir.

DRY prensibi, programcının kod bilgisini kullanabilme becerisini ve yetkinliğini de göstermektedir. Zira kod tekrarını önleyebilecek gerekli yazılım becerisi olmadan ilgili kodu optimize edebilmek kolay olmayacaktır. Bu aynı zamanda yazılımcının kendini geliştirmesi adına da bir fırsattır. “Peki ben bu prensibi nasıl uygulayacağım?” diye sorabilirsiniz. Bunu yapabilmek adına birtakım tasarım ilkelerini izlemeniz önerilir. Bunlar sırasıyla:

➡️ Özelleştirilmiş kod parçalarının oluşturulması (Create specialized code snippets):
Özel bir işlemi yapmak için tekrar tekrar aynı kod parçalarını kullanmak yerine, özel bir fonksiyon veya sınıf oluşturulabilir. Bu sayede, işlem tek bir yerde yapılabilir ve değiştirilebilir.

➡️ Modüler yapı (Modular structure):
Bir projeyi daha küçük parçalara bölmek ve her parça için ayrı dosyalar oluşturmak, projenin düzenlenmesini ve anlaşılmasını kolaylaştırır. Bu sayede, her modül sadece bir görev yapar ve tekrar tekrar kullanılabilir.

➡️ Önceden tanımlı sabitler ve konfigürasyon değerlerinin kullanılması (Use pre-defined constants and configuration values):
Önceden tanımlı sabitler, bir projede sıklıkla kullanılan değerler için kullanılır (örneğin, bir veritabanı adresi). Bu sabitler, projenin bir parçası olarak tek bir yerde tutulur ve değiştirilebilir.

Yukarıdaki kod oldukça ilkel bir şekilde yazılmıştır. Bunun yerine bu kodu aşağıdaki şekilde yazabiliriz:

DRY prensibinin uygulanması her zaman mümkün olmayabilir. Hatta bazı tekrarlardan yararlanmak bile gerekebilir. Zira, çok farklı işlemler için aynı kod parçasını kullanmak, kodu anlaşılır ve okunabilir hale getirmekten ziyade karmaşasını arttıracaktır. Bu nedenle, DRY prensibinin uygulanmasında uygun bir dengenin gözetilmesi tavsiye edilir.

Bu dengeyi nasıl ayarlayacağınız ise sizin insiyatifinize kalmış. İpucu olarak ve bunun ölçüsünü iç güdüsel olarak ayarlayabilmek adına kendinize şu soruyu sorabilirsiniz; “Ben bunu daha önce yazmadım mı?”

Bu soruya iki kez evet cevabı vermeniz durumu kotorabilir. Ki, halihazırda bu durum literatürde “Her şeyi ike kere yaz” anlamına gelen Write Everything Twice, yani WET olarak adlandırılmaktadır.

Yine de tekrarların artmasını kodunuzu gözden geçirmeniz için bir uyarı mesajı olarak değerlendirmekte fayda var. Zaten kodu daha iyi yazmaya çalışmanız yazılım becerilerinizi de geliştirecektir.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu