Kategoriler
Kodlama

Kodunuzu basitleştirin

JavaScript Refactoring in Action: Replace Nested If-Else with Guards

İç içe if-else ifadeleri, bir fonksiyonun farklı yürütme yolları ve sonuçları hakkında akıl yürütmeyi gereksiz yere karmaşık hale getirebilir. Sonuç, verim kaybı ve yanlış anlamalar nedeniyle hataların ortaya çıkması olabilir.

Martin Fowler’ın “Replace Nested Conditional with Guard Clauses” kitabından “Refactoring – Improving the Design of Existing Code (2nd Edition)” yeniden düzenleme bu durumlarda yardımcı olabilir.

Bir koruma yan tümcesi(guard clause) bir koşulu kontrol eder ve koşul doğruysa işlevden döner, potansiyel olarak bazı hesaplamalar yapar ve bir sonuç döndürür. Bir yürütme yolunu erken sonlandırarak işlev hakkında akıl yürütmeyi kolaylaştırır.

Yeniden düzenlemeden önce örnek bir işlev (İç İçe Koşulluyu Guard Cümleleri ile Değiştir, Martin Fowler’dan):

function getPayAmount(){
  let result;
  if (isDead)
    result = deadAmount();
  else{
    if (isSeparated)
      result = separatedAmount();
    else{
      if (isRetired)
        result = retiredAmount();
      else
        result = normalPayAmount();
   }
 }
  return result;
}

Bu örnekte, iç içe üç if-else ifadesi farklı koşulları kontrol eder (örneğin, isSeparated) ve bir değişkeni günceller result. Değişken, işlevin sonunda döndürülür.

Amaç, işlevi aşağıdaki sürümde yeniden düzenlemektir:

function getPayAmount(){
  if (isDead) return deadAmount();
  if (isSeparated) return separatedAmount();
  if (isRetired) return retiredAmount();
  return normalPayAmount();
}

Yeniden düzenlenmiş işlev, iç içe if-else ifadeleri yerine koruma yan tümcelerini kullanır. Değişken result artık gerekli değildir ve kaldırılmıştır. Yeniden düzenlenmiş kodun anlaşılması daha kolaydır çünkü daha az durum vardır (değişken yok) ve her yürütme yolu erken döner.

Orijinal işlev adım adım nasıl yeniden düzenlenebilir?

Her koşula iki yeniden düzenleme uygulayarak orijinal kodu basitleştirebilirsiniz:

  • Satır içi dönüş, bir değişken atamasını bir dönüş ifadesine dönüştürür. Böyle bir dönüştürme, kontrol akışındaki atamadan sonraki aşağıdaki ifadenin değişkeni döndürmesi durumunda mümkündür.
  • if-else’ı guard yan tümcesine return dönüştür, içindeki deyimleri içeren bir if-else deyimini, else bloğunun etrafındaki girintiyi kaldırarak koruma yan tümcelerine dönüştürür.

Bu adımları manuel veya otomasyon ile gerçekleştirebilirsiniz. P42 VS Kodu için JavaScript Yardımcısı refactoring aracı olduğunu destekler hem operasyonlar olduğunu. P42, mavi dalgalı alt çizgilerle iyileştirme fırsatlarını gösterir. Yeniden düzenleme otomasyonu ile kod birkaç saniye içinde geliştirilebilir . Son bir biçimlendirme adımından sonra, işlev basitleştirilmiş sürümde yeniden düzenlendi.

P42 ile VS Kodunda kodu yeniden düzenlemenin nasıl göründüğü:

Here is how refactoring the code looks like in VS Code with P42
Here is how refactoring the code looks like in VS Code with P42

Yeniden düzenleme, sağlıklı bir kod temeli sağlamak için çok önemlidir ve birçok küçük iyileştirme uzun bir yol kat eder. Koruma yan tümceleri ekleyerek, iç içe if-else ifadelerini genellikle basitleştirebilir ve kod tabanınızı biraz daha iyi hale getirebilirsiniz.

Kaynak: Lars Grammel p42.ai/blog/2021-09-29/javascript-refactoring-in-action-replace-nested-if-else-with-guards

Mutlu kodlamalar!