İçeriğe geç
parazade

Refactoring Nedir?

Yayın: · Son güncelleme:

Refactoring Nedir? Kısaca

Refactoring (yeniden düzenleme), yazılımın dışarıdan görünen davranışını değiştirmeden kodun iç yapısını daha okunur, sade ve bakımı kolay hâle getirmek için yapılan düzenlemelerdir. Yeni özellik eklemek ya da hata düzeltmek değildir.

Refactoring nedir?
İçindekiler
  1. Refactoring nedir?
  2. Ne zaman yapılmalı?
  3. Güvenli refactoring kuralları

Refactoring nedir?

Refactoring, kodu yeniden düzenlemektir. Program aynı işi yapmaya devam eder, ama içi daha derli toplu olur. Uzun bir fonksiyonu küçük parçalara bölmek, anlaşılmaz değişken adlarını düzeltmek ya da tekrar eden kodu tek bir yerde toplamak tipik örneklerdir.

Kullanıcı farkı görmez. Fark, kodu bir sonraki değiştirecek kişinin işinin kolaylaşmasıdır.

Ne zaman yapılmalı?

Sık duyulan bir kural vardır: bir kodu üçüncü kez benzer şekilde yazıyorsanız düzenleme zamanı gelmiştir. Bir başka iyi an, yeni bir özellik eklemeden hemen öncesidir. Kodu önce değişikliği kolaylaştıracak hâle getirir, sonra değişikliği yaparsınız.

Kodda bazı işaretler de vardır. Yüzlerce satırlık fonksiyonlar, aynı mantığın beş farklı yerde kopyası, açıklamasız sihirli sayılar ve anlamsız isimler bunlardandır. Örneğin x = t * 0.2 satırı, kdv = tutar * KDV_ORANI hâline getirildiğinde aynı işi yapar ama artık ne yaptığı okunur. Oranın değeri de tek bir yerde tanımlanmış olur.

Güvenli refactoring kuralları

Önce test. Kodu düzenlemeden önce davranışını doğrulayan testler olmalıdır; aksi hâlde bir şeyi bozup bozmadığınızı bilemezsiniz.

Küçük adımlarla ilerleyin ve her adımdan sonra testleri çalıştırın. Düzenleme ile yeni özelliği aynı commit'e koymayın; ayrı tutmak, sorun çıktığında sebebi bulmayı kolaylaştırır. Düzenli refactoring, teknik borç birikimini kontrol altında tutmanın en etkili yoludur.

Sıkça Sorulan Sorular

Refactoring hata düzeltmek sayılır mı?

Hayır. Refactoring davranışı değiştirmez, yalnız iç yapıyı iyileştirir. Hata düzeltmek ise davranışı değiştirir. İkisini ayrı adımlarda yapmak daha güvenlidir.

Refactoring için zaman ayırmak işi yavaşlatmaz mı?

Kısa vadede biraz zaman alır. Ancak düzenli yapılmadığında kod karmaşıklaşır ve her yeni özellik daha uzun sürer. Bu yüzden birçok ekip refactoring'i günlük işin parçası olarak görür.

İlgili terimler

Teknik Borç(Technical Debt)Teknik borç (technical debt), yazılımda hız kazanmak için seçilen kolay ya da geçici çözümlerin, ileride kodu değiştirmeyi zorlaştırarak ek iş ve maliyet doğurmasıdır. Tıpkı finansal borç gibi faizi vardır ve ödenmezse büyür.Temiz Kod(Clean Code)Temiz kod (clean code), başka bir geliştiricinin kolayca okuyup anlayabileceği, değiştirebileceği ve test edebileceği biçimde yazılmış koddur. Anlamlı isimler, küçük ve tek işe odaklı fonksiyonlar ve gereksiz karmaşıklıktan uzak bir yapı temel özellikleridir.Spagetti Kod(Spaghetti Code)Spagetti kod, akışı tabaktaki spagetti gibi birbirine dolanmış, yapısı belirsiz, takip etmesi ve değiştirmesi çok zor koddur. Genelde plansız büyüyen, kopyala yapıştırla genişleyen ve kuralsız yazılan projelerde ortaya çıkar.DRY Prensibi(DRY Principle)DRY prensibi (Don't Repeat Yourself), yazılımda her bilginin ya da iş kuralının tek bir yerde tanımlanması gerektiğini söyleyen ilkedir. Aynı mantığın birden fazla yere kopyalanmasını önleyerek bakımı kolaylaştırır.Değişken(Variable)Değişken, programlamada bir değeri bellekte saklamak için kullanılan isimli alandır. İçindeki değer program çalışırken okunabilir ve değiştirilebilir; örneğin `fiyat = 250` satırı fiyat adlı bir değişken oluşturur.Özellik(Feature)Özellik (feature), makine öğrenmesinde her bir örneği tanımlayan ve modelin tahmin yaparken girdi olarak kullandığı ölçülebilir nitelik ya da değişkendir. Örneğin ev fiyatı tahmininde metrekare, oda sayısı ve konum birer özelliktir.CommitCommit, Git'te dosyalarda yaptığınız değişikliklerin bir açıklama mesajıyla birlikte depoya kalıcı olarak kaydedilmesidir. Her commit projenin o anki fotoğrafı gibidir ve sonradan geri dönülebilir.