Kod Refactoring Teknikleri: Dağınık Tabloları Temizleyin

Summary

Kod refactoring teknikleri, mevcut formülleri ve tablo mantığını ne hesapladıklarını değiştirmeden yeniden yapılandırmanıza yardımcı olur; tek amaç onları daha okunabilir, düzeltilebilir ve yeniden kullanılabilir hale getirmektir. Bu rehber altı etkili yaklaşımı ele alıyor: Extract Method, Replace Temp with Query, sadeleştirme yoluyla inline etme, kapsülleme, tekrarı ortadan kaldırma ve karmaşık koşulları değiştirme. Her biri, hemen uygulayabileceğiniz somut bir tablo örneğiyle geliyor.

Masasında iki ekranla çalışan, kod refactoring öncesi ve sonrası sonuçları gösteren bir bilgi çalışanı

Kod refactoring teknikleri, zaten doğru sonucu veren bir formülü bozmadan temizlemenizi sağlar. Tablo dünyasında bu, gece yarısı deadline baskısıyla yazılmış ama işi gören bir formülü alıp, üç ay sonra tekrar açtığınızda gurur duyacağınız bir şeye dönüştürmek demektir.

Biscuit onu sizin için çoktan buldu. İşe yarayan kısımlara geçelim.

Formülünüz çalışıyor, peki neden içinize sinmiyor?

Refactoring zamanı geldiğinin klasik işareti: altı ay önce hazırladığınız dosyayı açıyorsunuz ve tek bir hücrenin ne yaptığını anlamak için üç dakika harcıyorsunuz. Ya da formülü yeni bir sütuna kopyalıyorsunuz ve içine gömülü sabit bir satır referansı yüzünden formül sessizce bozuluyor.

Refactoring sonucu değiştirmez. Etrafındaki her şey değiştiğinde (yeni satırlar, yeni sütunlar, yeniden adlandırılmış bir sayfa) sonucun doğru kalmasını sağlayacak şekilde yapıyı değiştirir.

Şu durumda atlayın: dosya tek seferlik bir hesaplamaysa ve kimse dokunmayacaksa. Refactoring'in bir maliyeti var (zaman, kesinti) ve fayda sıfırsa yatırım da sıfır demektir.

Şu durumda değer: birden fazla kişi dosyayı kullanıyorsa, düzenli olarak güncelliyorsanız veya formüller birden fazla sayfa arasında zincirleniyorsa.

Dikkat etmeniz gereken bazı uyarı işaretleri:

Bunlardan biri bile bir refactoring seansı planlamak için yeterli.

Bu teknikler özellikle finans ve operasyon ekiplerinde işe yarar: bir bütçe dosyası, üç kişinin sırayla düzenlediği bir raporlama tablosu veya her ay güncellenen bir kontrol paneli. Tek kişinin anladığı bir formül, o kişi izne çıktığında herkesin sorunu haline gelir.

Laptop ekranında renk kodlu hücrelerle düzenli, temiz bir tablo

Extract Method: Tek formülü isimli parçalara bölün

Bu, kodda olduğu kadar tablolarda da en kullanışlı refactoring tekniğidir. Fikir şu: bir formül üç işi birden yapıyorsa, onu üç hücreye bölün, her adım için bir tane, sonra sonuçları birleştirin.

Önce (her şeyi tek hücrede yapan formül):

=IF(AND(A2<>"",DATEDIF(A2,TODAY(),"Y")>30),"Senior","Junior")

Sonra:

Gerçek bir hücrede göründüğü hali işte bu: her adım tek başına okunabilir. Eşik değeri 30'dan 25'e değişirse, tek bir hücrede tek bir sayıyı değiştirirsiniz. DATEDIF bir tarih eksikliği yüzünden bozulursa, tam olarak nerede olduğunu görürsünüz.

Ödünleşim: daha fazla sütun kullanırsınız. Geniş bir tabloda bu israf gibi hissettirebilir. Sütun alanı darsa ayrı bir sayfada yardımcı sütun alanı kullanın. Sayfayı "Yardımcı" veya "Hesaplar" gibi bir isimle adlandırın, böylece dosyayı açan herkes düzeni anında anlar.

Excel ve Google Sheets'te aynı şekilde çalışır, yardımcı hücre kullanmanın bir sürüm kısıtlaması yoktur.

Excel ve Sheets arasında geçiş yapan bir ekipseniz, karşılıklar şöyle:

Menü yolları farklı olsa da mantık birebir aynı kalıyor.

Replace Temp with Query: Hesaplayabileceğinizi saklamayı bırakın

Tablo dünyasında geçici değişken, doğrudan başka hiçbir yerin referans vermediği, sadece bir sonraki adıma ulaşmak için doldurduğunuz bir hücredir.

Bazen bunlar faydalıdır (yukarıda gördüğünüz gibi). Ama sadece sonuncusunun önemli olduğu beş yardımcı hücreden oluşan bir zincir varsa ve aradaki değerler hiç değişmiyorsa, bunları tek bir formülde birleştirebilirsiniz.

Bir sonuca doğru ilerleyen üç yardımcı hücre:

Birleştirilmiş hali:

=(B2*C2)+(B2*C2*0.2)

Ya da vergi oranı için adlandırılmış bir aralıkla:

=B2*C2*(1+VergiOrani)

Kural şu: bir yardımcı hücre yalnızca tek bir başka hücre tarafından kullanılıyorsa, o formülün satır içine alınacak kadar kısa olup olmadığını sorun. Evetse, satır içine alın. Değilse, yardımcı hücreyi koruyun ve düzgün adlandırın.

Sınırı nerede çizmeli: 80 karakteri geçen bir formül genellikle satır içine almak için fazla uzundur. Bu noktada yukarıdaki Extract Method yaklaşımı işinizi daha iyi görür. Yardımcı hücreleri gerçekten okunabilirliğe katkı sağladığında tutun, sadece gürültü olduklarında kaldırın.

Encapsulate Field: Değişmemesi gereken girdileri koruyun

Tablolarda kapsülleme, sabit girdilerinizi (oranlar, eşikler, referans değerleri) formüllerin içine dağılmış sabit sayılar yerine tek bir yerde tutmak demektir.

Herkesin unuttuğu ama herkesin bir gün aradığı formül tam olarak bu: KDV oranı gibi tek bir değeri 47 farklı formülde sabit olarak yazmak bir bakım tuzağıdır. Oran değişince 47'sini de bulmanız gerekir. Üçünü kaçırırsanız hesaplama hatası kaçınılmazdır.

Çözüm:

  1. KDVOrani = 0.2 adında bir hücre içeren bir Ayarlar sayfası oluşturun

  2. Her formülde bu hücreye referans verin: =B2*KDVOrani

  3. Oran değiştiğinde tek bir hücreyi güncelleyin. Gerisi kendiliğinden düzelir.

Bu, tarih referansları (bugünün tarihi sabit bir çıpa olarak), döviz çarpanları ve kategori eşikleri için de geçerlidir. Bir değer ikiden fazla yerde tekrar ediyorsa ve bir gün değişebilecekse, adlandırılmış bir referansta yer almalıdır.

Adlandırılmış aralık nasıl oluşturulur:

Adlandırma kuralı önemli. VergiOrani açıktır. VO değildir. gecici_3 değildir. Formülü yazmamış birinin üç saniyede anlayacağı isimler kullanın.

Masada elinde kalemle basılı tablo sayfalarını inceleyen profesyonel bir analist

Tekrarı ortadan kaldırın: Formüller için DRY ilkesi

DRY, Don't Repeat Yourself ilkesi, yazılım mühendisliğinde en çok atıfta bulunulan prensiplerden biridir ve doğrudan tablolara da uygulanır. Aynı VLOOKUP formülünü küçük farklarla 15 sütuna kopyaladıysanız, patlamayı bekleyen bir bakım sorununuz var demektir.

Durumunuza göre iki yaklaşım:

Excel 365 / Google Sheets: Tek bir formülde birden fazla sütun çekmek için dizi genişletmeli XLOOKUP veya INDEX-MATCH kullanın.

=XLOOKUP(A2,ReferansTablo[ID],ReferansTablo[[Ad]:[Durum]])

Bu formül tek seferde hem Ad hem Durum'u getirir, sütunlar arasında kopyala-yapıştır yapmadan.

Daha eski Excel (2016 veya öncesi): Yardımcı bir hücrede tek bir MATCH çağrısı oluşturun, sonra o konuma referans veren INDEX kullanın:

Her yerde aynı MATCH sonucuna referans verirsiniz. Arama sütunu değişirse, tek bir formülü güncellersiniz.

Değinilmesi gereken bir sürüm notu: XLOOKUP, kurumsal abonelikler için Excel 2019'da ve Excel 365'te geldi. Ekibiniz Excel 2016 kullanıyorsa, kullanılacak yaklaşım INDEX-MATCH'tir. Sheets, 2022'den beri tüm planlarda XLOOKUP'ı destekliyor.

Replace Conditional: Koşulları daha temiz hale getirin

İç içe geçmiş IF'ler, tabloların okunamaz hale geldiği yerdir. Üç seviye derinliğe ulaştığınızda çoğu okuyucuyu (altı ay sonra kendinizi de dahil) kaybetmiş olursunuz.

Önce (iç içe IF zinciri):

=IF(A2>10000,"A",IF(A2>5000,"B",IF(A2>1000,"C","D")))

Seçenek 1: IFS (Excel 2016+ / Sheets)

=IFS(A2>10000,"A",A2>5000,"B",A2>1000,"C",TRUE,"D")

Daha düz ama yine de tek formülde dört koşul var. Kabul edilebilir.

Seçenek 2: Arama tablosuyla VLOOKUP (hafife alınan yaklaşım)

Küçük bir referans tablosu oluşturun:

Sonra: =VLOOKUP(A2,EsikTablosu,2,TRUE)

TRUE (yaklaşık eşleşme) sıralı tabloda aşağı iner ve uyan son kategoriyi döndürür. Mantık artık formülün içinde gömülü değil, tabloda; formülleri okumayan biri için bile görünür ve denetlenebilir hale gelir.

Harcamaya değer: arama tablosu yaklaşımı, mantığı herkes için, formülleri okumayan kişiler dahil, görünür ve denetlenebilir kılıyor. Acelen varsa atla: üç koşul veya daha azı için IFS yeterli.

Excel 2019+ ve Sheets'te bulunan SWITCH fonksiyonu da başka bir seçenek; aralıklar yerine tam eşleşen değerleri karşılaştırırken kullanışlı. Tam eşleşme durumlarında IFS'ten daha okunaklı sonuçlar verir.

Substitute Algorithm: Düzeltmek yerine yeniden yazmanın mantıklı olduğu an

Bazen formül yanlış değildir, sadece yaklaşım tamamen yanlıştır. CONCATENATE ve & ile metin birleştiren 200 karakterlik bir formül devraldınız ve bir alan daha eklemeniz gerekiyor. Doğru hamle onu uzatmak değil, TEXTJOIN ile yeniden yazmaktır.

Önce:

=A2&" | "&B2&" | "&C2&" | "&D2

Sonra:

=TEXTJOIN(" | ",TRUE,A2:D2)

Tablonuz yarın kafayı değiştirse bile bu formül peşinden gelir: TEXTJOIN boş hücreleri yönetir, dizileri yönetir ve E sütununu eklediğinizde bozulmaz.

Aynı mantık şunlar için de geçerli:

Aynı prensip büyük ölçekte de geçerli: INDIRECT referanslarından, dış bağlantılardan ve birbirine referans veren adlandırılmış aralıklardan oluşan bir yumağa dönüşmüş büyük bir veri hattını bir tabloda yönetiyorsanız, bazen doğru refactoring hamlesi mantığı uygun bir araca (SQL, Python, Power Query) taşımak ve tabloyu sadece görüntüleme için kullanmaktır. Bu daha büyük bir karar ama aynı kategoriye giriyor.

Bu noktaya gelmeden önce bir soru sorun: sorun formülün kendisinde mi, yoksa formülün üzerine bindirdiğiniz veri hacminde mi? Cevap ikinciyse, refactoring sizi ancak bir süre kurtarır; asıl çözüm veriyi başka bir yere taşımaktır.

İki meslektaşın code review sırasında beyaz tahtada akış diyagramlarıyla çalışması

Başlamadan önce: Yerinde olması gereken üç şey

Kod refactoring teknikleri, geri dönemeyeceğiniz bir şeyi bozmadığınız sürece işe yarar. Tablo dünyasında bu şu demek:

  1. Bir yedek kopya. Herhangi bir refactoring seansından önce, dosyanın tarihli bir kopyasını kaydedin. Aynı klasöre Farklı Kaydet değil, ayrı bir konuma (bulut yedeği, kendinize e-posta, ne olursa olsun). Bir kere bir şey ters gittiğinde kendinize teşekkür edeceksiniz.

  2. Mevcut çıktıların ne olması gerektiğini bilin. Herhangi bir şeyi değiştirmeden önce, kilit çıktıları not edin: toplamlar, özet rakamlar, kilit hücre değerleri. Her değişiklikten sonra aynı hücrelerle karşılaştırın. On saniyelik bir kontrol, gerilemeleri anında yakalar.

  3. Tek seferde tek değişiklik. Aynı oturumda hem Extract Method uygulayıp hem üç adlandırılmış aralık kapsülleyip hem de iç içe bir IF'i düzleştirmeyin. Bir şey bozulursa, hangi değişikliğin sebep olduğunu bilmeniz gerekir. Bir şey yapın, doğrulayın, sonra bir sonrakine geçin.

Bu üç adım kurulumu yaklaşık beş dakika alır. Beklenmedik bir şeyin olduğu her refactoring seansında bundan çok daha fazlasını kurtarmışlardır.

Ek olarak, dosyayı paylaştığınız kişilere ne yaptığınızı önceden haber verin. "Bugün öğleden sonra rapor dosyasındaki formülleri düzenliyorum, sonuçlar aynı kalacak" gibi tek bir mesaj, birinin ortasında dosyayı açıp paniklemesini önler.

Refactoring hiç bitmediğinde (ve nasıl durdurulur)

Refactoring'deki risk mükemmeliyetçiliktir. Zaten işlevsel olan bir dosyayı bütün öğleden sonra yeniden düzenleyip, yarım günlük bir maliyetle sadece biraz daha temiz bir sonuç elde edebilirsiniz.

Başlamadan önce bir zaman sınırı koyun: buna 45 dakika. Gerçekten sorun yaratan formülleri önceliklendirin: insanların yanlış okuduğu, normal kullanımda bozulan, eklemeniz gereken yeni bir özelliği engelleyen formüller.

Geri kalan her şeyi bırakın. Çalışan, kimsenin dokunmadığı, bir yıldır hata vermeyen bir formül yeterince iyidir. Yeterince iyi, meşru bir durma noktasıdır.

Kullanışlı bir çerçeve: refactoring, tabloyu mükemmel yapmakla ilgili değil. Bir sonraki değişikliği kolaylaştırmakla ilgili. Her değişiklikten önce kendinize sorun: bu, yapmam gereken bir sonraki şeyi daha hızlı veya daha güvenli hale getiriyor mu? Evetse yapın. Hayırsa durun.

İyi yapılan refactoring sessizdir. Kimse fark etmez. Hedef de zaten bu.

Frequently asked questions

Tablolar bağlamında kod refactoring nedir?
Tablolarda kod refactoring, formüllerinizi ve dosya düzenini hesapladıkları sonucu değiştirmeden yeniden yapılandırmak demektir. Amaç, formülleri sonuçlara dokunmadan daha okunabilir, güncellenebilir ve yeniden kullanılabilir hale getirmektir.
Excel veya Google Sheets formüllerinizi ne zaman refactor etmelisiniz?
Formülleri tekrar okuduğunuzda anlaşılması zor geldiğinde, bir değişiklik beklenmedik şekilde bir şeyi bozduğunda veya mevcut bir dosyaya yeni bir özellik eklemeden önce refactor edin. Zaten sorunsuz çalışan ve nadiren dokunulan dosyaları refactor etmekten kaçının.
Tablolar için Extract Method tekniği nedir?
Extract Method, tek bir karmaşık formülü, her biri tek bir işi yapan birden fazla adıma bölmek demektir. Bu, her adımı tek başına okunabilir ve test edilebilir hale getirir.
Excel'de tekrar eden formülleri nasıl ortadan kaldırırsınız?
Tek bir formülde birden fazla sonuç almak için çok sütunlu dönüş yapan XLOOKUP kullanın (Excel 365 / Sheets) ya da tüm INDEX formüllerinin referans verdiği tek bir MATCH yardımcı hücresi oluşturun; böylece birden fazlasını değil tek bir arama mantığını yönetirsiniz.
Replace Conditional tekniği nedir?
Replace Conditional, iç içe geçmiş IF zincirlerini daha temiz alternatiflerle değiştirmek demektir: düz okunabilirlik için IFS fonksiyonu, ya da mantığı formüllerden çıkarıp denetlenebilir veriye taşımak için bir referans tabloya karşı yaklaşık eşleşmeli VLOOKUP.
Refactoring bir formülün döndürdüğü sonucu değiştirir mi?
Hayır. Refactoring'in temel kuralı dışa dönük davranışın aynı kalmasıdır. Değiştirdiğiniz yapıdır, sonuç değil. Refactoring bir çıktı değerini değiştiriyorsa bir şeyler yanlış gitmiştir.
Adlandırılmış aralıklar Excel'de kod refactoring'e nasıl yardımcı olur?
Adlandırılmış aralıklar, vergi oranı, tarih çıpası veya arama tablosu gibi sabit değerlere anlamlı etiketler vermenizi ve bunlara sabit kodlanmış değerler yerine isimle referans vermenizi sağlar. Değer değiştiğinde tek bir yeri güncellersiniz, tüm formüller otomatik olarak güncellenir.