"Halo lagi."

"Hai!"

"Hari ini saya akan memberi tahu Anda tentang pemfaktoran ulang. Pemfaktoran ulang adalah mengubah kode dalam suatu proyek tanpa mengubah fungsinya."

"Tapi bagaimana mungkin?"

"Nah, dalam kasus yang paling sederhana, kita bisa mengganti nama variabel dan/atau metode. Lagi pula, mengubah nama variabel tidak akan membuat program bekerja secara berbeda, bukan?"

"Tentu saja tidak."

"Anda juga dapat memecah metode besar menjadi beberapa metode yang lebih kecil. "

"Anda dapat menarik cuplikan kode berulang ke dalam metode terpisah. "

"Beberapa fungsi dapat dinyatakan statis dan kemudian dipindahkan ke kelas utilitas."

"Tapi ini adalah interpretasi sempit dari refactoring."

"Refactoring terkadang berarti menulis ulang (meningkatkan) arsitektur proyek tanpa menambahkan fungsionalitas baru. Ini adalah refactoring dalam arti luas."

"IntelliJ IDEA menjadi lingkungan pengembangan terintegrasi (IDE) paling populer khususnya karena ini adalah yang pertama memperkenalkan alat pemfaktoran ulang yang sangat andal."

"Apa alat ajaib ini?"

Trik sulap #1: Mengubah nama metode.

"Bayangkan bahwa kode Anda memiliki metode yang dipanggil dari 100-500 tempat berbeda. Anda telah memutuskan untuk mengubah namanya menjadi sesuatu yang lebih mudah dipahami. Katakanlah itu dijalankan(), dan Anda menginginkannya menjadi runDownloadTaskAsync(). Seberapa cepat Bisakah Anda melakukan itu?"

"Yah, pertama-tama kamu perlu mengubah nama metodenya, lalu temukan semua tempat dalam program di mana metode itu dipanggil, dan ubah nama di sana juga."

"Dan bagaimana Anda menemukan tempat-tempat itu?"

"Saya baru saja menjalankan program dan IntelliJ IDEA akan menunjukkan kepada saya semua tempat di mana metode yang tidak ada dipanggil."

"Oke. Tapi sekarang misalkan setiap metode memiliki komentar penjelasan (JavaDoc) yang menjelaskan apa yang dilakukan metode itu — dan nama metode lama tertulis di sana."

"Aku juga akan mengubah komentarnya."

"Tapi mungkin juga ada variabel yang namanya diasosiasikan dengan nama metode. Akan lebih baik untuk mengubahnya juga:"

Sebelum Setelah
Task task = manager.run();
Task asyncTask = manager.runDownloadTaskAsync();

"Ya, akan bagus untuk mengubah nama variabel itu juga. Tidak ada salahnya."

"Nah, semua ini bisa dilakukan hanya dalam beberapa detik menggunakan IntelliJ IDEA!"

"Anda menempatkan kursor pada nama metode (atau klik dengan mouse), lalu tekan Shift+F6 dan mulailah mengetik nama metode yang diinginkan."

"Inilah contoh mengedit nama metode."

"Mulai mengedit:"

IDE: pemfaktoran ulang - 1

"Tentukan nama baru:"

IDE: pemfaktoran ulang - 2

"Cukup masukkan nama baru, tekan enter, dan hanya itu. Metode ini akan diganti namanya di mana pun ia dipanggil dalam proyek."

"IntelliJ IDEA juga biasanya menanyakan apakah Anda ingin mengganti nama variabel dan nama metode di komentar. Cukup klik 'Ya' dan itu akan mengubah segalanya."

"Terlebih lagi, jika proyek dikompilasi sebelum operasi refactoring ini, maka dijamin akan dikompilasi setelah refactoring."

"Kedengarannya sangat menjanjikan."

"Omong-omong, Anda dapat mengubah nama variabel dengan cara yang sama. Setelah mengeklik nama, cukup tekan Shift+F6 — Anda kemudian dapat memasukkan nama baru, dan IntelliJ akan mengubah nama variabel di mana pun itu digunakan. "

"Jika variabel adalah bidang di kelas dan memiliki pengambil dan penyetel, maka nama pengambil dan penyetel juga akan diubah agar sesuai dengan nama baru variabel."

"Aku mencobanya menggunakan variabel. Semuanya berfungsi seperti yang kamu katakan, Ellie. Refactoring itu luar biasa!"

"Apakah menurut Anda hanya itu yang diperlukan untuk pemfaktoran ulang? Pembiasaan ulang adalah topik yang sangat luas — kami bahkan belum menggores permukaannya."

"Wah. Ada apa lagi?"

Trik sulap #2: Ekstrak variabel.

"Terkadang ekspresi tertentu diulang begitu sering dalam kode sehingga Anda ingin memindahkannya ke dalam variabel terpisah. Misalnya:"

Kode
public void printInfo(User user)
{
 System.out.println(user.getProfile().getName());
 System.out.println(user.getProfile().getAddress().getState());
 System.out.println(user.getProfile().getAddress().getCity());
 System.out.println(user.getProfile().getAddress().getStreet());
 System.out.println(user.getProfile().getAddress().getHomeNumber());
}
Tampilan yang Anda inginkan:
public void printInfo(User user)
{
 Address address = user.getProfile().getAddress();

 System.out.println(user.getProfile().getName());
 System.out.println(address.getState());
 System.out.println(address.getCity());
 System.out.println(address.getStreet());
 System.out.println(address.getHomeNumber());
}

"Ah."

"Dan kode bisa jauh lebih rumit, dengan banyak bagian yang berulang."

"Programmer tidak menulis seperti itu dengan sengaja. Tetapi Anda sering perlu menambahkan sesuatu ke suatu metode, lalu sesuatu yang lain - dan seiring waktu jumlah pengulangan melewati atap."

"Dengan membuat variabel terpisah, kita dapat memberinya nama yang tepat dan meningkatkan keterbacaan kode."

"Misalnya, pada contoh di atas, mungkin kita tidak berbicara tentang alamat rumah. Mungkin kita berbicara tentang alamat kontak darurat. Kemudian Anda bisa memanggil variabel emergencyContactAddress ini, bukan hanya alamat. Kemudian, seorang programmer melihat kode ini untuk pertama kali akan mengerti apa yang terjadi di sini."

"Ya, saya setuju. Menambahkan variabel seperti itu masuk akal."

"Jadi, bagaimana kamu melakukannya?"

"Memindahkan ekspresi ke dalam variabel terpisah sangat sederhana."

Langkah 1: Gunakan mouse untuk memilih ekspresi.

IDE: pemfaktoran ulang - 3

Langkah 2: Tekan Ctrl+Alt+V

IDE: pemfaktoran ulang - 4

"Jendela terbuka di mana IntelliJ IDEA menanyakan apakah kami ingin mengganti hanya ekspresi yang dipilih atau semua contoh ekspresi (4 kemunculan)?"

"Pilih opsi kedua untuk mengganti semua kejadian (Ganti semua 4 kejadian)"

Langkah 3: Tekan Enter.

IDE: pemfaktoran ulang - 5

"IntelliJ IDEA akan meminta Anda untuk memasukkan nama variabel. Itu juga akan membuat saran sendiri untuk namanya. Lumayan kan?"

"Uh-huh. Benar. Kami juga berencana menamai variabel 'alamat'. Bagaimana dia tahu?"

"Dengan menggunakan nama metode terakhir dalam ekspresi, yang mengembalikan alamat. Dengan demikian, kemungkinan besar variabel tersebut akan digunakan untuk menyimpan alamat."

"Itu berhasil dengan sangat baik. Hebat, Ellie."

Trik sulap #3: Ekstrak kode ke metode terpisah.

"Tetapi kita dapat melakukan sesuatu yang lain. Kita dapat mendeklarasikan metode baru, misalnya printAddress (), dan memindahkan semua kode ini ke dalamnya."

"Ayo coba lakukan itu."

Langkah 1: Pilih 4 baris kode yang menggunakan variabel alamat:

IDE: pemfaktoran ulang - 6

Langkah 2: tekan Ctrl+Alt+M

IDE: pemfaktoran ulang - 7

"IntelliJ IDEA menentukan variabel mana yang dibutuhkan metode, dan menyarankan seperti apa tampilannya. "Satu-satunya yang tersisa adalah memasukkan nama untuk metode tersebut."

Langkah 3: Masukkan printAddress sebagai nama metode dan tekan Enter.

IDE: pemfaktoran ulang - 8

"Bagaimana kamu suka itu?"

"Luar biasa. IntelliJ IDEA tidak hanya mengekstrak kode menjadi metode terpisah, tetapi juga menambahkan semua variabel yang diperlukan. Terlebih lagi, ia menebak semua nama dengan benar."