"สวัสดีอีกครั้ง."
"สวัสดี!"
"วันนี้ฉันจะบอกคุณเกี่ยวกับการปรับโครงสร้างใหม่ การปรับโครงสร้างใหม่คือการเปลี่ยนแปลงรหัสในโครงการโดยไม่เปลี่ยนฟังก์ชันการทำงาน"
"แต่เป็นไปได้อย่างไร?"
"ในกรณีที่ง่ายที่สุด เราสามารถเปลี่ยนชื่อตัวแปรและ/หรือเมธอดได้ ท้ายที่สุด การเปลี่ยนชื่อตัวแปรจะไม่ทำให้โปรแกรมทำงานแตกต่างออกไปใช่หรือไม่"
"ไม่แน่นอน"
"คุณยังสามารถแบ่งเมธอดขนาดใหญ่ออกเป็นเมธอดย่อยหลายๆ วิธีได้อีกด้วย "
"คุณสามารถดึงส่วนย่อยของโค้ดที่ซ้ำกันเป็นเมธอดแยกต่างหาก "
"ฟังก์ชันบางอย่างสามารถประกาศแบบสแตติกแล้วย้ายไปยังคลาสยูทิลิตี้ได้"
"แต่นี่เป็นการตีความอย่างแคบของการปรับโครงสร้างใหม่"
"บางครั้งการ Refactoring หมายถึงการเขียนใหม่ (ปรับปรุง) สถาปัตยกรรมของโครงการโดยไม่ต้องเพิ่มฟังก์ชันการทำงานใหม่ นี่คือการปรับโครงสร้างใหม่ในความหมายกว้างๆ ของคำนี้"
"IntelliJ IDEA กลายเป็นสภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE) ที่ได้รับความนิยมมากที่สุด โดยเฉพาะอย่างยิ่งเนื่องจากเป็นรายแรกที่นำเสนอเครื่องมือการปรับโครงสร้างที่ทรงพลังมาก"
“เครื่องมือวิเศษเหล่านี้คืออะไร?”
เคล็ดลับ #1: เปลี่ยนชื่อวิธีการ
"ลองนึกภาพว่าโค้ดของคุณมีเมธอดที่ถูกเรียกใช้จากที่ต่างๆ 100-500 แห่ง คุณตัดสินใจเปลี่ยนชื่อเป็นชื่อที่เข้าใจได้มากขึ้น สมมติว่ารัน () และคุณต้องการให้รัน DownloadTaskAsync() ได้เร็วแค่ไหน คุณสามารถทำได้ไหม?"
"อันดับแรกคุณต้องเปลี่ยนชื่อเมธอด จากนั้นค้นหาตำแหน่งทั้งหมดในโปรแกรมที่เรียกใช้เมธอดนั้น และเปลี่ยนชื่อที่นั่นด้วย"
“แล้วคุณจะพบสถานที่เหล่านั้นได้อย่างไร”
"ฉันแค่เรียกใช้โปรแกรมและ IntelliJ IDEA จะแสดงตำแหน่งทั้งหมดที่มีการเรียกใช้เมธอดที่ไม่มีอยู่จริง"
"โอเค แต่ตอนนี้ สมมติว่าทุกเมธอดมีคำอธิบายอธิบาย (JavaDoc) ที่อธิบายว่าเมธอดทำอะไร และชื่อเมธอดเก่าก็เขียนอยู่ที่นั่น"
"ฉันจะเปลี่ยนความคิดเห็นด้วย"
"แต่อาจมีตัวแปรที่มีชื่อเชื่อมโยงกับชื่อของเมธอดด้วย จะเป็นการดีหากเปลี่ยนตัวแปรเหล่านั้นด้วย:"
ก่อน | หลังจาก |
---|---|
|
|
"ใช่ จะเป็นการดีที่จะเปลี่ยนชื่อของตัวแปรเหล่านั้นด้วย มันจะไม่เสียหาย"
"ทั้งหมดนี้สามารถทำได้ในเวลาเพียงไม่กี่วินาทีโดยใช้ IntelliJ IDEA!"
"คุณวางเคอร์เซอร์บนชื่อของวิธีการ (หรือคลิกด้วยเมาส์) จากนั้นกดShift+F6และเริ่มพิมพ์ชื่อวิธีการที่ต้องการ"
"นี่คือตัวอย่างการแก้ไขชื่อเมธอด"
"เริ่มแก้ไข:"
"ระบุชื่อใหม่:"
"เพียงป้อนชื่อใหม่ กด Enter เพียงเท่านี้ วิธีการนี้จะถูกเปลี่ยนชื่อทุกที่ที่เรียกใช้ในโครงการ"
"โดยปกติแล้ว IntelliJ IDEA จะถามว่าคุณต้องการเปลี่ยนชื่อตัวแปรและชื่อเมธอดในความคิดเห็นหรือไม่ เพียงคลิก 'ใช่' ก็จะเปลี่ยนทุกอย่าง"
"ยิ่งไปกว่านั้น หากโปรเจ็กต์คอมไพล์ก่อนการดำเนินการรีแฟคเตอร์นี้ รับประกันว่าจะคอมไพล์หลังจากรีแฟคเตอร์"
"ฟังดูมีความหวังมาก"
"ยังไงก็ตามคุณสามารถเปลี่ยนชื่อตัวแปรได้ด้วยวิธีเดียวกัน หลังจากคลิกที่ชื่อ เพียงกดShift+F6 — จากนั้นคุณสามารถป้อนชื่อใหม่ได้ และ IntelliJ จะเปลี่ยนชื่อตัวแปรทุกที่ที่ใช้ "
"ถ้าตัวแปรเป็นฟิลด์ในคลาสและมี getter และ setter ชื่อของ getter และ setter ก็จะถูกเปลี่ยนเพื่อให้ตรงกับชื่อใหม่ของตัวแปรด้วย"
"ฉันลองใช้ตัวแปร ทุกอย่างทำงานได้เหมือนที่คุณพูด Ellie การ Refactoring นั้นยอดเยี่ยมมาก!"
"คุณคิดว่าการหักเหของแสงมีเพียงเท่านี้หรือ การหักเหของแสงเป็นหัวข้อที่กว้างมาก เราไม่ได้แม้แต่จะขีดข่วนพื้นผิว"
"ว้าว มีอะไรอีก"
มายากล #2: แยกตัวแปร
"บางครั้ง นิพจน์บางอย่างมักถูกทำซ้ำในโค้ดจนคุณอยากจะย้ายไปไว้ในตัวแปรแยกต่างหาก ตัวอย่างเช่น:"
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());
}
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());
}
"อา."
"และโค้ดอาจซับซ้อนกว่านี้มาก โดยมีส่วนที่ซ้ำๆ กันมากมาย"
"โปรแกรมเมอร์ไม่ได้เขียนแบบนั้นโดยเจตนา แต่คุณมักจะต้องเพิ่มบางอย่างในเมธอด แล้วจึงอย่างอื่น - และเมื่อเวลาผ่านไป จำนวนการทำซ้ำจะทะลุเพดาน"
"ด้วยการสร้างตัวแปรแยกต่างหาก เราสามารถตั้งชื่อที่ถูกต้องและปรับปรุงการอ่านรหัสได้"
"ตัวอย่างเช่น ในตัวอย่างด้านบน บางทีเราไม่ได้พูดถึงที่อยู่บ้าน บางทีเรากำลังพูดถึงที่อยู่ของผู้ติดต่อกรณีฉุกเฉิน จากนั้นคุณสามารถเรียกตัวแปรนี้ว่า EmergencyContactAddress แทนที่จะเป็นแค่ที่อยู่ จากนั้น โปรแกรมเมอร์ เห็นรหัสนี้ครั้งแรกจะเข้าใจว่าเกิดอะไรขึ้นที่นี่"
"ใช่ ฉันเห็นด้วย การเพิ่มตัวแปรดังกล่าวสมเหตุสมผล"
"แล้วทำยังไงล่ะ"
"การย้ายนิพจน์ไปยังตัวแปรแยกต่างหากนั้นง่ายมาก"
ขั้นตอนที่ 1: ใช้เมาส์เพื่อเลือกนิพจน์
ขั้นตอนที่ 2: กด Ctrl+Alt+V
"หน้าต่างเปิดขึ้นโดยที่ IntelliJ IDEA ถามเราว่าเราต้องการแทนที่เฉพาะนิพจน์ที่เลือกหรืออินสแตนซ์ทั้งหมดของนิพจน์ (4 ครั้ง)"
"เลือกตัวเลือกที่สองเพื่อแทนที่เหตุการณ์ทั้งหมด (แทนที่ทั้งหมด 4 เหตุการณ์)"
ขั้นตอนที่ 3: กด Enter
"IntelliJ IDEA จะแจ้งให้คุณป้อนชื่อตัวแปร นอกจากนี้ยังจะแนะนำชื่อของตัวเองอีกด้วย ไม่เลวใช่ไหม"
"อืม ใช่แล้ว เราวางแผนที่จะตั้งชื่อตัวแปรว่า 'ที่อยู่' ด้วย มันรู้ได้อย่างไร"
"โดยใช้ชื่อของเมธอดสุดท้ายในนิพจน์ ซึ่งส่งกลับที่อยู่ ดังนั้นจึงเป็นไปได้ว่าตัวแปรจะถูกใช้เพื่อจัดเก็บที่อยู่"
"นั่นได้ผลดีจริงๆ เยี่ยมมาก Ellie"
มายากล #3: แตกรหัสเป็นวิธีการแยกต่างหาก
"แต่เราสามารถทำอย่างอื่นได้ เราอาจประกาศวิธีการใหม่ เช่นprintAddress () และย้ายโค้ดทั้งหมดนี้ไปไว้ในนั้น"
"มาลองทำกันเถอะ"
ขั้นตอนที่ 1: เลือกโค้ด 4 บรรทัดที่ใช้ตัวแปรที่อยู่:
ขั้นตอนที่ 2: กด Ctrl+Alt+M
"IntelliJ IDEA กำหนดตัวแปรที่เมธอดต้องการ และแนะนำว่าควรมีลักษณะอย่างไร "สิ่งเดียวที่เหลือคือการป้อนชื่อเมธอด"
ขั้นตอนที่ 3: ป้อน printAddress เป็นชื่อเมธอดแล้วกด Enter
“ชอบขนาดนั้นเลยหรือไง”
"มันยอดเยี่ยมมาก IntelliJ IDEA ไม่เพียงแต่แยกโค้ดออกเป็นเมธอดแยกต่างหากเท่านั้น แต่ยังเพิ่มตัวแปรที่จำเป็นทั้งหมด ยิ่งไปกว่านั้น มันยังเดาชื่อทั้งหมดได้อย่างถูกต้องอีกด้วย"
GO TO FULL VERSION