การใช้ตัวแปร 'สุดท้าย' ในการทดสอบ Java Selenium
นี่อาจถือเป็นคำถามเกี่ยวกับการเขียนโปรแกรม แต่เกี่ยวกับโค้ดทดสอบที่เขียนด้วย Selenium บวก Java ดังนั้นฉันคิดว่านี่เป็นเว็บไซต์ที่เกี่ยวข้องในการโพสต์สิ่งนี้
เมื่อดูการทดสอบของผู้อื่นทางออนไลน์บางครั้งฉันพบว่ามีการเพิ่มองค์ประกอบของเว็บลงในตัวแปรที่ประกาศเป็นfinal:
final WebElement element = driver.findElement(By.id("element-id"));
ฉันคาดเดาว่าจะช่วยให้สามารถแยกอะตอมและแยกการทดสอบได้ดีขึ้นและมันก็สมเหตุสมผลดี
เนื่องจากฉันไม่มีปัญหากับการไม่ประกาศตัวแปรสุดท้ายมีเหตุผลอะไรอีกบ้างที่ต้องทำเช่นนี้
คำตอบ
นี่เป็นแบบฝึกหัดการเขียนโปรแกรมมาตรฐานที่มีวัตถุประสงค์เพื่อลดข้อบกพร่องในโค้ด ตัวปรับแต่งขั้นสุดท้ายจะป้องกันไม่ให้ตัวแปรดั้งเดิมหรือตัวแปรอ้างอิงอ็อบเจ็กต์ถูกกำหนดใหม่ ดังนั้นสิ่งดั้งเดิมจึงไม่เปลี่ยนรูปและการอ้างอิงสามารถชี้ไปที่วัตถุที่มันชี้ไปในตอนแรกได้ (สิ่งนี้ไม่ส่งผลกระทบต่อวิธีการที่คุณสามารถเรียกใช้แม้แต่วิธีที่จะทำให้สถานะภายในของวัตถุกลายพันธุ์)
ทุก IDE ที่ฉันใช้ในช่วง 10 ปีที่ผ่านมามีความสามารถในการตรวจสอบโค้ดด้วยวิธีการและใช้ตัวปรับแต่งขั้นสุดท้ายกับตัวแปรโลคัลที่ไม่ได้กำหนดใหม่หลังจากเริ่มต้นแล้ว แนวคิดเบื้องหลังคือถ้าคุณเขียนโค้ดและบันทึก (ซึ่งเรียกใช้การบันทึกที่ใช้ตัวปรับแต่งขั้นสุดท้าย) คุณอาจไม่ได้ตั้งใจที่จะแก้ไขตัวแปรนั้นอีก หากคุณตั้งใจจะแก้ไขตัวแปรนั้นคุณก็สามารถลบตัวปรับแต่งออกได้ ภายใต้ตรรกะนี้ตัวแปรทุกตัวจะสิ้นสุดจนกว่าจะมีคนตัดสินใจว่าไม่ควรเป็นอย่างจริงจัง
เช่นเดียวกับการเขียนโปรแกรมทุกอย่างมีข้อโต้แย้งที่ขัดแย้งกับสิ่งนี้ หนึ่งคือมันถ่วงรหัสเพิ่มภาระงานให้กับโปรแกรมเมอร์ที่พยายามอ่านรหัสเพื่อรักษาไว้ แม้ว่านี่จะไม่ใช่ประสบการณ์ส่วนตัวของฉันกับตัวปรับแต่งนี้ แต่ฉันรู้ว่ามันเป็นไปตามแนวทางปฏิบัติอื่น ๆ สำหรับฉันดังนั้นฉันจึงไม่ต้องการยกเลิกสิ่งนี้โดยสิ้นเชิงเพียงเพราะมันไม่เกี่ยวข้องกับฉัน อีกประการหนึ่งคือถ้าคุณใช้เฉพาะกับสิ่งที่คุณตัดสินใจว่าควรถือเป็นที่สิ้นสุด (ตรงข้ามกับการคลุมโค้ดด้วยขั้นสุดท้าย) คุณจะส่งข้อความถึงนักพัฒนารายอื่นว่าตัวแปรนี้ไม่ควรเปลี่ยนแปลง - มันควรจะโดดเด่นเหนือใคร ตัวแปรเป็นตัวแปรเดียวที่คุณไม่ควรพยายามเปลี่ยนแปลง
ความคิดเห็นของ PDHide เกี่ยวกับการ จำกัด การใช้การดำเนินการแบบขนานเกี่ยวข้องกัน - ตัวแปรสุดท้ายมีสิทธิ์ใช้ใน lambdas และการประมวลผลแบบขนานในขณะที่ตัวแปรอื่นไม่ได้ ตอนนี้ฉันเชื่อว่า (เป็นเวลาสักพักแล้ว) คอมไพเลอร์ Java จะอนุญาตให้คุณใช้ตัวแปรที่เป็นขั้นสุดท้ายอย่างมีประสิทธิภาพแม้ว่าจะไม่ได้เป็นขั้นสุดท้ายอย่างชัดเจนแต่ถ้ามีคนตัดสินใจที่จะแก้ไขตัวแปรก่อนการดำเนินการแบบขนานคอมไพเลอร์จะไม่สามารถพูดได้อีกต่อไป มันเป็นขั้นสุดท้ายอย่างมีประสิทธิภาพดังนั้นจึงไม่มีสิทธิ์สำหรับการประมวลผลแบบขนานอีกต่อไปและจะทำให้เกิดข้อผิดพลาดในการคอมไพล์ แก้ไขได้อย่างง่ายดาย แต่ยังคงน่ารำคาญ
ในตอนท้ายของวันคุณจะต้องสนทนาสั้น ๆ กับทีมของคุณเพื่อตัดสินใจว่าอะไรจะดีที่สุดสำหรับคุณ คำสำคัญไม่มีผลกระทบต่อการดำเนินการจริงหรือประสิทธิภาพและทั้งหมดนี้เป็นเรื่องของประสิทธิภาพการทำงานของโปรแกรมเมอร์