Kodunuzu Yeniden Düzenleme ile Nasıl Disiplin Edebilirsiniz (PHP örnekleri içerir)

Yayınlanan: 2021-06-22

Hayattaki diğer birçok şey gibi, kodumuzun da biraz disipline ihtiyacı var. Dünyadaki hiçbir geliştiricinin temiz olmayan kod yazmak istemediğinden oldukça eminim. Ancak, kirli kod hala var. Çeşitli nedenlerden dolayı ortaya çıkabilir - iş baskısı, dokümantasyon eksikliği, ekip üyeleri arasındaki etkileşim eksikliği veya geliştiricinin yetersizliği olabilir. Kodu daha temiz hale getirmek ve bu nedenle gelecekte ortaya çıkabilecek sorunları önlemek için gerekli önlemler alınmalıdır. Neyse ki, Refactoring olarak adlandırılan kodu yeniden yapılandırmak için disiplinli bir teknikle bu sorunları çözebiliriz.

Yeniden düzenleme, mevcut program kaynak kodunun iç yapısını iyileştirmek ve dış davranışını sürdürmek için bir tekniktir. Kodu geliştirmek için adım adım bir prosedürdür, aksi takdirde bize çok zaman ve çaba harcatacaktır.

Yeniden yapılandırılan kod

Temiz Olmayan Kodun Dezavantajları

Kaynak kodun boyutunu uzun süre yeniden düzenlemeden yeni programlar ekleyerek genişletmek, kodu dağınık ve kirli hale getirir. Projede bakım ve daha fazla geliştirmeyi çok zorlaştırır. Temiz olmayan kod tonlarca dezavantajla birlikte gelir:

  1. Projenin bakım maliyetini arttırır.
  2. Yeni özellik eklemek çok zaman alıyor ve bazen eklemek imkansız hale geliyor.
  3. Yeni kişilerin projeye girişini yavaşlatır.
  4. Yinelenen kod içerir.
  5. Tüm testleri geçmez.

Başka birçok dezavantaj var, ancak bu sorunlar organizasyon için çok fazla para ve zamana mal oluyor.

Temiz Kodun Avantajları

Temiz ve disiplinli kodun kendi avantajları vardır:

  1. Yinelenen kod içermez.
  2. Tüm testleri geçer.
  3. Kodun daha okunabilir ve anlaşılmasını kolaylaştırır.
  4. Kodun bakımını kolaylaştırır ve daha ucuza getirir.

Temiz kodun avantajları çoktur. Dağınık, temiz olmayan bir kodu daha sürdürülebilir temiz koda dönüştürme işlemine Yeniden Düzenleme işlemi denir.

Yeniden Düzenleme Süreci

Yeniden düzenleme, her biri mevcut kodu biraz iyileştiren ve programın bozmadan çalışmaya devam etmesine izin veren bir dizi küçük değişiklik olarak yapılmalıdır. Yeniden düzenlemeden sonra, kod eskisinden daha temiz hale gelmelidir. Kirli kalırsa, yeniden düzenlemenin bir anlamı yoktur. Bu sadece zaman ve emek kaybıdır. Yeni işlevsellik oluşturmak için yeniden düzenleme sırasında yeni kod eklenmemelidir. Yeniden düzenlemeden sonra tüm testleri geçmelidir.

Ne zaman yeniden düzenlemeli

Yeniden düzenleme şu durumlarda yapılmalıdır:

  • Projeye yinelenen kod ekleme. Yinelenen kodun bakımı zor olduğundan ve bir yerde yapılan değişiklikler birçok başka yerde güncelleme gerektirebilir.
  • Bir özellik ekleme. Yeniden düzenleme, yeni işlevler eklemeyi kolaylaştırır.
  • Bir hatayı düzeltirken, hatanın otomatik olarak keşfedilmesini sağlayacağı için yeniden düzenleme yapmalısınız.
  • Kod incelemesi, değişiklikler üretime dağıtılmadan önce kodu yeniden düzenlemenin son aşamasıdır.

Kod Kokularıyla Başa Çıkmak

Koddaki sorunlara bazen kod kokuları denir. Bunlar, yeniden düzenleme sırasında ele alınan sorunlardır. Bulmaları ve düzeltmeleri daha kolaydır.

Örneğin:

  • Çalışması çok zor olan büyük yöntemler ve sınıflar.
  • Nesneye yönelik programlama kavramının eksik veya yanlış kullanımı.
  • Herhangi bir değişiklik eklemeyi zorlaştıran kod.
  • Projede yinelenen ve kullanımdan kaldırılmış kod.
  • Son derece bağlı kod.

Yeniden Düzenleme Teknikleri

Yeniden düzenleme teknikleri, kodu yeniden düzenlemek için atılan adımlardır. Yeniden düzenleme tekniklerinden bazıları şunlardır:

1. Çıkarma Yöntemi

// Sorun

 function printInvoice() { $this->printHeader(); // Print details. print("name: " . $this->name); print("amount " . $this->getPrice()); }

// Çözüm

 function printInvoice() { $this->printBanner(); $this->printDetails($this->getPrice()); } function printDetails($price) { print("name: " . $this->name); print("amount " . $outstanding); }

Gruplandırılabilen bir kod parçanız varsa, kodun o kısmı için yeni bir yöntem ekleyin ve eski kodu değiştirin. Kodu daha yalıtılmış hale getirir ve yinelemeyi ortadan kaldırır.

2. Değişkeni Çıkart

// Sorun

 if (($student->getMarksinMath() > 60) && ($student->getMarksInPhysics() > 60) && ($student->getMarksinChemistry() > 60) && $this->pass) { // do something }

// Çözüm

 $mathResult = $student->getMarksinMath() > 60; $physicsResult = $student->getMarksinPhysics() > 60; $chemistryResult = $student->getMarksinChemistry() > 60; $hasPassed = $this->pass; if ($mathResult && $physicsResult && $chemistryResult && $hasPassed) { // do something }

Problemde gösterilen gibi anlaşılması çok zor olan büyük ifadeler için her ifade için farklı değişkenler oluşturulabilir. Kodu daha okunaklı hale getirir. Ancak bu yöntem dikkatle uygulanmalıdır. Ancak, kendi dezavantajları vardır. Kod, sorunda böyle olmayan koşul yanlış olsa bile yürütülür.

3. Satır İçi Yöntem

// Sorun

 function printResult() { return ($this->getResult()) ? “Pass” : “Fail”; } function getResult() { return $this->totalMarks > 300; }

// Çözüm

 function getRating() { return ($this->totalMarks > 300) ? “Pass” : “Fail”; }

Yöntem gövdesi daha belirgin olduğunda, bu tekniği kullanın. Yöntemi, yöntem içeriğiyle değiştirin ve yöntemi silin. İstenmeyen yöntemlerin sayısını en aza indirir.

4. Hat İçi Sıcaklık

// Sorun

 $mathMark = $student->getMathResult(); return $mathMark > 60;

// Çözüm

 return $student->getMathResult() > 60;

Yalnızca ifade sonucunu tutan istenmeyen bir geçici değişken varsa, değişkeni ifadenin kendisiyle birlikte kaldırın. Gereksiz değişkenlerden kurtulmanıza yardımcı olur.

5. Diziyi nesneyle değiştirin

// Sorun

 $row = []; $row[0] = "Virat Kohli"; $row[1] = 70;

// Çözüm

 $row = new Player(); $row->setName("Virat Kohli"); $row->setNumberofCentury(70);

Çeşitli veri türlerine sahip bir dizi varsa, bunu bir nesneyle değiştirin. Çünkü bir sınıfın alanlarının belgelenmesi ve bakımı, çeşitli veri türlerine sahip dizilere göre daha kolaydır.

6. Parametreli Yöntem

// Sorun

 function fivePercentRaise() { } function tenPercentRaise() { }

// Çözüm

 function raise(percent) { }

Birden çok yöntem veriler üzerinde benzer eylemi gerçekleştirirse, tüm yöntemleri tek bir yöntemle değiştirin ve verileri argüman(lar) olarak iletin. Yinelenen ve gereksiz yöntemleri kaldırır.

7. Değiştiriciden ayrı sorgu

// Sorun

 function getInterest() { $this->interestAmount = $this->principal * 10 / 100; return $this->interestAmount; }

// Çözüm

 function setInterest() { $this->interestAmount = $this->principal * 10 / 100; } function getInterest() { return $this->interestAmount; }

Bir yöntem değer döndürüyor ve nesneyi değiştiriyorsa, iki yöntemi bölün. Biri değişiklik için, diğeri sonucu döndürmek için. Bir nesnenin kasıtsız olarak değiştirilme şansını ortadan kaldırır.