Daha İyi Okunabilirlik için PHP Kodunu Yeniden Düzenleme Örnekleri


Yeniden düzenleme kodu, dış davranışını değiştirmeden mevcut kodu yeniden yapılandırdığınız zamandır. Temel olarak amacınız, temel işlevi değiştirmeden "kötü" kodu daha iyi hale getirmektir.

Kodunuzu yeniden düzenlemeyle ilgili birçok kılavuz var. Ancak, birçoğunun, "kötü" kodunuzu "iyi" koda dönüştürmenin nasıl göründüğünü size göstermeden, iyi yazılmış ve yapılandırılmış kodun ideolojisi hakkında konuştuğunu görüyorum. Yeniden düzenleme sürecinin geçerli amaçları olan okunabilirlik, genişletilebilirlik, sürdürülebilirlik, test edilebilirlik, azaltılmış karmaşıklık vb. gibi üst düzey kavramlardan bahsedebilirler, ancak bunun gerçekte nasıl göründüğüne dair örnekler gösteremezler.

Bu yazıda ne zaman yeniden düzenleme yapmanız gerektiğinden bahsetmeyeceğim (kişisel olarak kötü kodla karşılaştığınızda bunu yapmanız gerektiğine inanıyorum), neden yeniden düzenlemeniz gerektiğinden de (teknik borcu azaltır) bahsetmeyeceğim. Bunun yerine, yeniden düzenleme yaparken uygulayabileceğiniz bazı yaygın, pratik ilkelere bakmak ve gerçek kod örnekleriyle nasıl göründüklerine dair örnekler vermek istiyorum. Bu makalenin amaçları doğrultusunda PHP kodunu kullanacağım (WordPress PHP ile yazıldığı için) ancak bu ilkeler herhangi bir programlama dili için geçerli olacaktır.

Kendinizi Tekrar Etmeyin (KURU)

Muhtemelen duyacağınız en popüler programlama ilkesi “Kendini Tekrar Etme” (DRY). Kendinizi aynı kodu birkaç kez kopyalarken bulursanız, muhtemelen işlevselliği kendi sınıfına veya işlevine yerleştirmeli ve tekrardan kaçınmak için söz konusu sınıfı veya işlevi kullanmalısınız. Bu, kaçınılmaz hata aylar sonra ortaya çıktığında, kodu yalnızca tek bir yerde düzeltmeniz gerektiği anlamına gelir.

Buna iyi bir örnek, iki farklı ancak benzer sınıfın aynı işlevselliklerden bazılarını gerektirmesidir. Kodu iki farklı sınıfta çoğaltmak yerine, ortak işlevselliğe sahip soyut bir sınıf oluşturabilir ve ardından diğer iki sınıfın soyut sınıfı extend sağlayabilirsiniz.

Örneğin:

olur:

Bu, tekrarı önlemek için kodunuzu nasıl yapılandırabileceğinizin basit bir örneğidir.

Karmaşık Fonksiyonları Bölme

Teknik borca ​​ve okunması zor kodlara yol açabilecek diğer bir yaygın programlama sorunu, karmaşık işlevler veya yöntemlerdir.

"Programlar insanların okuması için yazılmalı ve sadece tesadüfen makinelerin çalışması için yazılmalıdır." – Harold Abelson

Kodunuzu diğer insanların okuması ve anlaması için kolaylaştırmak son derece önemlidir, bu nedenle karmaşık işlevlerle başa çıkmanın bir yolu, onları daha küçük, daha anlaşılır (ve test edilebilir) parçalara bölmektir.

İşte karmaşık bir fonksiyon örneği. Yaptığı her şeyi anlama konusunda endişelenmeyin. Sadece bakmanın ne kadar karmaşık göründüğüne dikkat edin.

Bu işlevin tamamı şöyle görünseydi çok daha kolay olmaz mıydı:

Bunu okumak ve anlamak çok daha kolay. Büyük, karmaşık kod parçalarını basitçe bölmenin bir kod tabanına yapabileceği fark inanılmaz.

Burada dikkat edilmesi gereken bir diğer nokta da, bunun gibi karmaşık işlevleri bölerken uzun, açıklayıcı işlev adlarına sahip olmak konusunda çok fazla endişelenmemeniz gerektiğidir. Amacın insan tarafından okunabilirlik olduğunu unutmayın, bu nedenle işlev adlarınızla çok kısa olmaya çalışmak kodunuzun anlaşılmasını zorlaştırabilir. Örneğin:

 $this->get_att_inf( $post_id );

Anlamak şundan daha zordur:

 $this->get_attachment_s3_info( $post_id );

Karmaşık Şartları Bölme

Hiç şuna benzeyen büyük koşul cümleleri gördünüz mü:

Koşullu uzun kod parçalarının okunması ve anlaşılması zordur. Bunun basit bir çözümü, koşullu kodu açıkça adlandırılmış yöntemlere çıkarmaktır. Örneğin:

Bu, kodunuzun gelecekteki bir bakıcı için anlaşılmasını çok daha kolaylaştırır. Koşullu yöntem açıkça adlandırıldığı sürece, gerçek yöntem kodunu incelemeden ne yaptığını anlamak kolay olmalıdır. Bu uygulama aynı zamanda Bildirimsel Programlama olarak da bilinir.

İç İçe Şartları Koruma Cümleleriyle Değiştirme

Karmaşık koşul ifadelerini yeniden düzenlemenin başka bir yolu, "koruyucu maddeler" olarak bilinenleri kullanmaktır. Koruma yan tümceleri, yöntemden bir istisnanın çağrılmasına veya bir değerin anında döndürülmesine yol açan tüm koşulları çıkarır ve onu yöntemin başına yerleştirir. Örneğin:

Burada, yöntem daha karmaşık hale gelirse ne kadar çabuk “koşullu cehennem”e dönüşebileceğinizi görebilirsiniz. Ancak, bu yöntemi koruma maddelerini kullanacak şekilde yeniden düzenlersek, şöyle görünür:

Şimdi yöntem daha karmaşık hale gelse bile, yolun aşağısında bir bakım baş ağrısı olmayacak.

İşlevsel Yöntemleri Kullanarak Yeniden Düzenleme Döngüleri ve Koşullar

Bu, işlevsel programlama dillerinde ve kitaplıklarda daha yoğun olarak kullanılan biraz daha gelişmiş bir yeniden düzenleme türüdür (bu tür işlevler JavaScript ülkesinde çok kullanılır). map ve reduce gibi işlevleri duymuş ve bunların ne olduğunu ve nasıl kullanılacağını merak etmiş olabilirsiniz. Bu yöntemlerin kodunuzun okunabilirliğini önemli ölçüde artırabileceği ortaya çıktı.

Bu örnek, Adam Wathan'ın konuyla ilgili harika senaryosundan esinlenmiştir (yakında çıkacak kitabına göz atmalısınız) ve Laravel Koleksiyonlarını kullanmaya dayanmaktadır. Ancak, örneği standart PHP işlevleriyle çalışacak şekilde uyarladım.

İki yaygın senaryoya bakalım ve işlevsel yöntemler kullanılarak nasıl geliştirilebileceğini görelim. Aşağıdaki örneğimiz, bir API'den bir grup $events alır ve olay türüne göre bir puan hesaplar:

Geliştirebileceğimiz ilk şey, foreach döngüsünü bir map işleviyle değiştirmek. Mevcut bir diziden yeni bir dizi oluşturmak istediğinizde bir harita işlevi kullanılabilir. Örneğimizde, $events dizisinden bir $types dizisi oluşturuyoruz. PHP, yukarıdaki koddaki ilk foreach şöyle yazmamıza izin verecek bir array_map işlevine sahiptir:

Not: Bunun gibi anonim işlevleri kullanabilmek için PHP 5.3+ çalıştırıyor olmanız gerekir.

Yapabileceğimiz ikinci şey, işlenmesi biraz daha kolay olması için büyük switch ifadesini parçalamaktır.

Ama burada bir adım daha ileri gidebiliriz ve PHP'nin array_reduce fonksiyonunu kullanarak $score tek bir fonksiyonda hesaplayabiliriz. Bir azaltma işlevi, bir dizi değer alır ve bunları tek bir değere indirger. Bunu burada $score hesaplamak için yapacağız.

Hepsini bir araya getirirsek, şimdi elimizde:

Çok daha iyi. Görünürde döngü veya koşul yok. $types bulmak veya satırdaki $score reduce için daha fazla karmaşıklık gerekiyorsa, map yeniden düzenlemenin ve işlev çağrılarını ayrı yöntemlere indirmenin nasıl kolay olacağını hayal edebilirsiniz. Karmaşıklığı bir fonksiyona indirgediğimiz için bu artık mümkün.

Daha fazla okuma

Bu makalede yalnızca yeniden düzenlemenin yüzeyini kazıdım. Bahsedebileceğim daha pek çok şey var, ama umarım bu size kodunuzu yeniden düzenlemenin gerçekte nasıl göründüğüne dair küçük bir fikir vermiştir.

Biraz daha derine dalmak istiyorsanız SourceMaking Refactoring kılavuzunu tavsiye ederim. Bir sürü konuyu kapsar ve her birinin bir örneği vardır, böylece refactor'un tam olarak nasıl göründüğünü görebilirsiniz.

Hiç kodunuzu yeniden düzenlemeyi denediniz mi? Paylaşmak istediğiniz harika yeniden düzenleme ipuçlarınız var mı? Fonksiyonel yöntemler hakkında ne düşünüyorsunuz? Yorumlarda bana bildirin.

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

Divi's Theme Builder ile Özel Global Başlık Nasıl Oluşturulur

Artık Tema Oluşturucu burada olduğuna göre, web sitenizi A'dan Z'ye kurmanıza yardımcı olacak yeni eğitimlere dalmak için sabırsızlanıyoruz. Buna Divi'nin yerleşik seçeneğini kullanarak özel başlıklar oluşturma da dahildir. Bu eğitimde Divi's Theme Builder'ı kullanarak global bir başlık oluşturmaya odaklanacağız. Bu sayfaya veya gönderiye farklı bir başlık atamadıysanız, web sitenizin her yerinde genel bir başlık görünecektir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir