Türkçe
  • if-else kaldır
  • kod optimizasyonu
  • temiz kod
  • arayüz odaklı programlama
  • koşullu mantık

Dağınık Koşulları Kaldırmak için 3 Güçlü Kodlama Tekniği

Kod kalitesini ve sürdürülebilirliğini artırarak karmaşık koşul yapıları optimize etmek ve basitleştirmek için üç güçlü kodlama tekniği tanıtır.

Yijun
Yijun
Developer

Yazılım geliştirmede, genellikle birden fazla senaryoyu ele alması gereken kod mantığıyla karşılaşırız. Düzgün bir şekilde yönetilmezse, bu mantıklar kolayca uzun if-else zincirlerine veya büyük switch ifadelerine dönüşebilir. Bu makale, bu yapıları optimize ederek kod kalitesini ve sürdürülebilirliğini artıran birkaç etkili tekniği tanıtacaktır.

1. Savunma programlama: erken dönüş

Kullanıcı durumlarını kontrol ettikten sonra erişime izin verecek bir kullanıcı kimlik doğrulama sistemi geliştirdiğimizi varsayalım:

Bu kodun belirgin yapısal sorunları var. Derin iç içe geçmiş if-else yapıları kullanır, bu da kodu okumayı ve sürdürülebilirliği zorlaştırır.Koşul kontrollerinin sayısı arttıkça, kodun girinti seviyesi derinleşir ve "ok şeklinde" bir kod oluşur.Hata işleme mantığı, farklı iç içe geçme seviyelerine dağılmıştır, bu da birleşik bir yönetim için elverişli değildir.Daha da önemlisi, izin verilen erişim durumunun çekirdek mantığı, birden fazla katman koşullu yargı içinde derinlere gömülü olup, sezgisel değildir. Bu kodlama tarzı sadece kod okunabilirliğini azaltmaz, aynı zamanda hata riskini artırır ve kod genişletilmesini zorlaştırır.

"Erken dönüş" yaklaşımını kullanarak bu kodu optimize edebiliriz:

"Erken dönüş" stratejisini benimseyerek, orijinal kod yapısını başarıyla optimize ettik.

Bu yöntem birkaç iyileştirme sağlar:

  • Kodun iç içe geçme karmaşıklığını önemli ölçüde azaltır. Her koşul kontrolü bağımsız olarak ele alınır, bu da genel mantığı daha net ve anlaşılır hale getirir. Bu düzleştirilmiş yapı, sadece kod okunabilirliğini artırmakla kalmaz, aynı zamanda bakım zorluğunu da büyük ölçüde azaltır.
  • Bu optimizasyon yöntemi, hata işleme mantığının merkezi yönetimini sağlar. Her koşul kontrolünden hemen sonra sonuçlar döndürülerek, gereksiz kod yürütülmesinden kaçınılır ve farklı hata senaryolarının yönetimi merkezileştirilir, bu da tüm hata işleme sürecini daha organize hale getirir.
  • Kodun çekirdek mantığı—erişime izin verme koşulları—daha belirgin hale gelir. Bu yapı, kodun ana amacını hemen belirgin hale getirir, kodun ifade gücünü ve anlaşılabilirliğini büyük ölçüde artırır.

2. Bakış tablosu yöntemi

Farklı girdilere bağlı olarak farklı sonuçların döndürülmesi gereken senaryolarla sıkça karşılaşırız. Düzgün işlenmezse, bu mantıklar kolayca uzun if-else zincirlerine veya büyük switch ifadelerine dönüşebilir. Örneğin, bir e-ticaret platformunda, farklı sipariş durumlarına göre ilgili durum açıklamalarını döndürmemiz gerekiyor:

Bu, farklı durumlara göre farklı sonuçlar döndürülen tipik bir senaryodur. Durum sayısı arttıkça, switch ifadesi veya if-else yargıları uzar. Üstelik, bu durumda, kullanıcılar bu durum içeriklerini başka dillere çevirmek isterse, fonksiyon gövdesinin değiştirilmesi veya yeni fonksiyonların eklenmesi gerekecektir, bu da önemli bakım maliyetleri getirecektir.

Bu durumda, kodu optimize etmek için bakış tablosu yöntemini kullanabiliriz:

İlk olarak, durumlar ve açıklamalar arasındaki eşleme ilişkisini saklamak için bir Map nesnesi kullanarak, kod daha özlü hale gelir. Aynı zamanda, durum açıklamalarını yapılandırma dosyalarına taşımak kolay hale gelir, uluslararasılaştırma ve dinamik güncellemeler için kolaylık sağlar. Yeni durumlar eklendiğinde, çekirdek mantık kodunu değiştirmemiz gerekmez; sadece yapılandırmaya karşılık gelen anahtar-değer çiftlerini eklememiz yeterlidir.

3. Arayüz odaklı programlama

Büyük yazılım sistemleri geliştirirken, genellikle birden fazla hizmet sağlayıcı veya işlevsel modülleri desteklememiz gerekir. Yazılım tasarım aşamasında arayüz odaklı programlamayı kullanmayı düşünebiliriz, böylece daha sonra genişletmeler kolaylaşır ve karmaşık sistemlerde sabit-kodlamanın getirdiği çoklu koşullu yargıların karmaşıklığı ortadan kalkar.

Birden fazla çeviri hizmet sağlayıcısını desteklemesi gereken çok dilli bir çeviri sistemi geliştirdiğimizi varsayalım. Tasarım aşamasından itibaren arayüz odaklı programlamayı düşünmezsek, gelecekteki genişletmeler çok zorlaşacaktır:

Bu uygulama, çeviri sağlayıcılarını seçmek için basit ve kaba bir if-else yapısı kullanır, bu da kodu sürdürülebilir ve genişletilebilir hale getirir. Gelecekte yeni çeviri sağlayıcıları eklerken, mevcut kodun değiştirilmesi gerekecek ve daha fazla çeviri sağlayıcısının desteklenmesi gerektiğinde, kod şişecek ve bakımı zorlaşacaktır. Aynı zamanda, bu karmaşık yöntemin birim testini yapmak da zordur çünkü farklı çeviri sağlayıcılarını simüle etmek kolay değildir.

Bu sorunları çözmek için, kodu optimize etmek için arayüz odaklı programlamayı kullanabiliriz. Arayüz odaklı programlama, polimorfizmi uygulamanın önemli bir yoludur ve farklı nesnelerin aynı mesaja farklı yanıtlar vermesine olanak tanır.

Uygulama süreci:

  1. Çeviri stratejisi arayüzünü tanımlayın:
  1. Bu arayüzü her çeviri sağlayıcısı için uygulayın:
  1. Çeviri Servisi sınıfını yeniden yapılandırın, stratejiyi bir parametre olarak geçirin:
  1. Optimizasyonlu kodu kullanın:

TranslationStrategy arayüzünü tanımlayarak ve arayüz odaklı programlamayı getirerek, aşağıdaki faydaları elde ettik:

  • TranslationService her çağırmada farklı çeviri stratejilerini kullanabilir.
  • Yeni çeviri sağlayıcıları eklemek basit hale gelir, sadece yeni bir strateji sınıfı oluşturup arayüzü uygulamak yeterlidir.
  • İstemci kodu, her çeviri için kullanılacak stratejiyi esnek bir şekilde seçebilir, TranslationService'in çekirdek mantığını değiştirmeden.
  • Her çeviri stratejisi bağımsız olarak test edilebilir, bu da kodun test edilebilirliğini artırır.
  • TranslationService'de durumu muhafaza etmekten kaçınma, hizmetin daha durumsuz ve iplik güvenli hale gelmesini sağlar.

Sonuç

Koşullu ifade yapılarını optimize etmek, kod kalitesini artırmanın önemli bir yoludur. Bu makalede tanıtılan üç yöntem—savunma programlaması, bakış tablosu yöntemi ve arayüz odaklı programlama (polimorfizm ile birleştirilmiş)—her biri kendi geçerli senaryolarına sahiptir:

  1. Savunma programlaması, birden fazla bağımsız koşul kontrolünü ele almak için uygundur ve kodun iç içe geçirilmesini etkili bir şekilde azaltabilir.
  2. Bakış tablosu yöntemi, farklı durumlara farklı tepki veren gereksinimleri ele almak için uygundur, kodu daha özlü ve sürdürülebilir hale getirir.
  3. Polimorfizm ile birleştirilmiş arayüz odaklı programlama, karmaşık ama esnek sistemler inşa etmek için uygundur, kodun esnekliğini ve ölçeklenebilirliğini artırır.

Gerçek geliştirme sürecinde, genellikle belirli durumlara dayalı uygun yöntemleri seçmemiz gerekebilir ve bazen birden fazla tekniği kapsamlı bir şekilde uygulamamız gerekebilir. Önemli olan, kodun basitliği, okunabilirliği ve sürdürülebilirliği arasında denge kurmak ve mevcut soruna en uygun çözümü seçmektir.

Unutmayın, aşırı optimize etmek, aşırı karmaşık koda yol açabilir. Kodu basit ve okunabilir tutmak her zaman öncelikli ilkedir. Bu teknikleri uygularken, projenin belirli ihtiyaçlarına ve ekibin teknik seviyesine dayanarak akıllıca seçimler yapılmalıdır.