Cara Mendisiplinkan Kode Anda dengan Refactoring (Termasuk contoh PHP)

Diterbitkan: 2021-06-22

Seperti banyak hal lain dalam hidup, kode kita juga membutuhkan disiplin. Saya cukup yakin tidak ada pengembang di dunia yang ingin menulis kode yang tidak bersih. Namun, kode najis masih ada. Ini dapat muncul karena berbagai alasan - mungkin karena tekanan bisnis, kurangnya dokumentasi, kurangnya interaksi di antara anggota tim, atau ketidakmampuan pengembang. Tindakan yang tepat perlu diambil untuk membuat kode lebih bersih dan untuk menghindari masalah yang mungkin muncul di masa mendatang karena hal ini. Untungnya, kita dapat mengatasi masalah ini dengan teknik disiplin untuk merestrukturisasi kode yang disebut sebagai Refactoring .

Refactoring adalah teknik untuk memperbaiki struktur internal kode sumber program yang ada dan mempertahankan perilaku eksternalnya. Ini adalah prosedur langkah demi langkah untuk meningkatkan kode, yang jika tidak, akan menghabiskan banyak waktu dan tenaga.

Pemfaktoran Ulang Kode

Kerugian dari Kode Tidak Bersih

Memperluas ukuran kode sumber dengan menambahkan program baru ke dalamnya tanpa refactoring untuk waktu yang lama membuat kode menjadi berantakan dan tidak bersih. Itu membuat pemeliharaan dan pengembangan lebih lanjut pada proyek menjadi sangat sulit. Kode yang tidak bersih hadir dengan banyak kelemahan:

  1. Ini meningkatkan biaya pemeliharaan proyek.
  2. Menambahkan fitur baru membutuhkan banyak waktu dan terkadang menjadi tidak mungkin untuk ditambahkan.
  3. Ini memperlambat pengenalan orang baru ke proyek.
  4. Ini berisi kode duplikat.
  5. Itu tidak lulus semua tes.

Ada banyak kerugian lain, tetapi masalah ini menghabiskan banyak uang dan waktu bagi organisasi.

Keuntungan dari Kode Bersih

Kode yang bersih dan disiplin memiliki kelebihannya sendiri:

  1. Itu tidak mengandung kode duplikat.
  2. Ini melewati semua tes.
  3. Membuat kode lebih mudah dibaca dan dipahami.
  4. Itu membuat kode lebih mudah dipelihara dan lebih murah.

Keuntungan dari kode bersih banyak. Proses mengubah kode kotor yang berantakan menjadi kode bersih yang lebih dapat dipelihara disebut proses Refactoring.

Proses Pemfaktoran Ulang

Refactoring harus dilakukan sebagai serangkaian perubahan kecil, yang masing-masing sedikit meningkatkan kode yang ada dan memungkinkan program untuk terus berjalan tanpa merusaknya. Setelah refactoring, kode harus menjadi lebih bersih dari sebelumnya. Jika tetap tidak bersih, maka tidak ada gunanya refactoring. Itu hanya membuang waktu dan tenaga. Tidak ada kode baru yang harus ditambahkan selama refactoring untuk membuat fungsionalitas baru. Itu harus lulus semua tes setelah refactoring.

Kapan Harus Memfaktorkan Kembali?

Refactoring harus dilakukan ketika:

  • Menambahkan kode duplikat ke proyek. Karena kode duplikat sulit dipelihara dan perubahan di satu tempat mungkin memerlukan pembaruan di banyak tempat lain.
  • Menambahkan fitur. Refactoring membuatnya lebih mudah untuk menambahkan fungsionalitas baru.
  • Saat memperbaiki bug, Anda harus melakukan refactor karena itu akan membuat bug ditemukan secara otomatis.
  • Peninjauan kode adalah tahap terakhir dari pemfaktoran ulang kode sebelum perubahan diterapkan ke produksi.

Berurusan dengan Kode Bau

Masalah pada kode kadang-kadang disebut sebagai kode bau. Ini adalah masalah yang ditangani selama refactoring. Mereka lebih mudah ditemukan dan diperbaiki.

Sebagai contoh:

  • Metode dan kelas besar yang sangat sulit untuk dikerjakan.
  • Penggunaan konsep pemrograman berorientasi objek yang tidak lengkap atau salah.
  • Kode yang membuatnya sulit untuk menambahkan perubahan apa pun.
  • Kode duplikat dan tidak digunakan lagi dalam proyek.
  • Kode yang sangat digabungkan.

Teknik Pemfaktoran Ulang

Teknik refactoring adalah langkah-langkah yang diambil untuk refactor kode. Beberapa teknik refactoring adalah:

1. Metode Ekstrak

// Masalah

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

// Solusi

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

Jika Anda memiliki fragmen kode yang dapat dikelompokkan, tambahkan metode baru untuk bagian kode tersebut dan ganti kode lama. Itu membuat kode lebih terisolasi dan menghilangkan duplikasi.

2. Ekstrak Variabel

// Masalah

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

// Solusi

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

Untuk ekspresi besar seperti yang ditampilkan dalam masalah, yang sangat sulit dipahami, variabel yang berbeda dapat dibuat untuk setiap ekspresi. Itu membuat kode lebih mudah dibaca. Tetapi metode ini harus diterapkan dengan hati-hati. Namun, ia memiliki kekurangannya sendiri. Kode akan dijalankan bahkan jika kondisinya salah yang tidak terjadi dalam masalah.

3. Metode Sebaris

// Masalah

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

// Solusi

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

Ketika tubuh metode lebih jelas, gunakan teknik ini. Ganti metode dengan konten metode dan hapus metode. Ini meminimalkan jumlah metode yang tidak diinginkan.

4. Suhu Sebaris

// Masalah

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

// Solusi

 return $student->getMathResult() > 60;

Jika ada variabel sementara yang tidak diinginkan yang hanya menyimpan hasil ekspresi, hapus variabel dengan ekspresi itu sendiri. Ini membantu dalam menyingkirkan variabel yang tidak perlu.

5. Ganti array dengan objek

// Masalah

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

// Solusi

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

Jika ada array dengan berbagai tipe data, ganti dengan objek. Karena bidang suatu kelas lebih mudah untuk didokumentasikan dan dipelihara daripada array dengan berbagai jenis data.

6. Metode Parameterisasi

// Masalah

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

// Solusi

 function raise(percent) { }

Jika beberapa metode melakukan tindakan serupa pada data, ganti semua metode dengan satu metode dan teruskan data sebagai argumen. Ini menghapus metode duplikat dan berlebihan.

7. Pisahkan kueri dari pengubah

// Masalah

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

// Solusi

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

Jika suatu metode mengembalikan nilai dan mengubah objek, pisahkan kedua metode tersebut. Satu untuk modifikasi dan satu lagi untuk mengembalikan hasilnya. Ini menghilangkan kemungkinan modifikasi yang tidak disengaja dari suatu objek.