กลับไปหน้าบทความ

อ่าน 2 นาที

ไม่มีชื่อบทความ

Monkey patch คือการแก้ไขโค้ดขณะทำงาน (ไม่ใช่ โค้ดต้นฉบับ ) ของ ภาษาโปรแกรมแบบไดนามิก และข้อมูล (ข้อมูล/โค้ด) ที่ใช้ในการแก้ไขโค้ดขณะทำงานก็คือ Monkey patching นั่นเอง Monkey...

ทุ่งลิง

Monkey patchคือการแก้ไขโค้ดขณะทำงาน (ไม่ใช่โค้ดต้นฉบับ ) ของภาษาโปรแกรมแบบไดนามิกและข้อมูล (ข้อมูล/โค้ด) ที่ใช้ในการแก้ไขโค้ดขณะทำงานก็คือ Monkey patching นั่นเอง Monkey patching จะเพิ่มหรือแทนที่ส่วนประกอบของโปรแกรม เช่นเมธอดคลาสแอตทริบิวต์และฟังก์ชันในหน่วยความจำ การแก้ไขโค้ดขณะทำงานช่วยให้สามารถปรับเปลี่ยนพฤติกรรมของซอฟต์แวร์จากภายนอก ได้โดยไม่ต้องดูแลรักษาโค้ดต้นฉบับเวอร์ชันที่แก้ไขแล้ว

คำว่าmonkey patchดูเหมือนจะมาจากคำเดิมคือguerrilla patchซึ่งหมายถึงการเปลี่ยนแปลงโค้ดอย่างลับๆ – และอาจไม่เข้ากันกับ patch อื่นๆ – ในระหว่างรันไทม์ คำว่าguerrillaซึ่งออกเสียงคล้ายกับgorillaจึงกลายเป็นmonkeyอาจเพื่อทำให้ patch ฟังดูไม่น่ากลัว[ 1 ]

แม้ว่าชื่อจะบ่งบอกเช่นนั้น แต่บางครั้ง monkey patch ก็เป็นวิธีการขยายโปรแกรมอย่างเป็นทางการ ตัวอย่างเช่น เว็บเบราว์เซอร์อย่างFirefoxและInternet Explorerเคยสนับสนุนวิธีการนี้ แม้ว่าปัจจุบันเบราว์เซอร์ (รวมถึง Firefox) จะรองรับการขยายในรูปแบบที่แตกต่างกันก็ตาม[ 2 ]

Monkey patch มีความหมายแตกต่างกันไปตามบริบท ในRuby [ 3 ] Python [ 4 ] และ ภาษา อื่นๆ monkey patch หมายถึงการ แก้ไข คลาสหรือโมดูลแบบไดนามิกในขณะรันไทม์เท่านั้น โดยมีแรงจูงใจจากความตั้งใจที่จะแก้ไขโค้ดของบุคคลที่สามที่มีอยู่เพื่อแก้ปัญหาบั๊กหรือฟีเจอร์ที่ไม่ทำงานตามที่ต้องการ รูปแบบอื่นๆ ของการแก้ไขคลาสในขณะรันไทม์มีชื่อเรียกที่แตกต่างกัน ตัวอย่างเช่น ในZopeและPloneแพตช์ความปลอดภัยมักจะส่งมอบโดยใช้การแก้ไขคลาสแบบไดนามิก แต่เรียกว่าhot fixes

ข้อผิดพลาด

ข้อควรระวังบางประการของการแก้ไขโค้ดแบบ Monkey Patching:

ความไม่เข้ากัน

การออกเวอร์ชันใหม่ของซอฟต์แวร์ที่แก้ไขแล้วอาจทำให้การแก้ไขนั้นใช้การไม่ได้ ด้วยเหตุนี้ การแก้ไขแบบ monkey patch จึงอาจมีเงื่อนไขและจะถูกนำไปใช้เฉพาะเมื่อเหมาะสมเท่านั้น[ 5 ]

การเขียนทับ

หากมีการแก้ไข วิธีเดียวกัน หลายครั้ง จะมีการใช้เฉพาะการ แก้ไขครั้งสุดท้ายเท่านั้น การแก้ไขอื่นๆ จะไม่มีผลใดๆ เว้นแต่จะมีการเขียน monkey patches ด้วยรูปแบบเช่นalias_method_chain [ 6 ]

ความสับสน

การแก้ไขโค้ดแบบ Monkey Patch ทำให้เกิดความไม่สอดคล้องกันระหว่างโค้ดต้นฉบับและพฤติกรรมจริง ซึ่งอาจทำให้ผู้พัฒนาสับสน ตัวอย่างเช่นเคอร์เนล Linuxตรวจจับโมดูลที่เป็นกรรมสิทธิ์และโมดูลของบุคคลที่สามอื่นๆ เช่น ไดรเวอร์ Nvidiaซึ่งทำการแก้ไขโครงสร้างเคอร์เนล เพื่อไม่ให้ผู้พัฒนาเสียเวลาไปกับการพยายามแก้ไขปัญหาที่พวกเขาไม่สามารถแก้ไขได้[ 7 ]

ความวุ่นวาย

การแก้ไขแบบ Monkey Patch อาจมีโค้ดที่เป็นอันตรายที่โจมตีโปรแกรม หรือการแก้ไขอื่นๆ ตัวอย่างเช่น ในปี 2552 Giorgio Maone ผู้พัฒนาNoScriptได้โจมตี ส่วนขยาย Adblock Plusสำหรับ Firefox โดยเพิ่มข้อยกเว้นเพื่อให้โฆษณาบนเว็บไซต์ของเขาทำงานได้ โค้ดที่ก่อกวนยังทำให้แน่ใจว่าหากผู้ใช้พยายามลบข้อยกเว้น ข้อยกเว้นเหล่านั้นจะถูกเพิ่มเข้ามาอีกครั้ง สงครามที่ทวีความรุนแรงขึ้นเกิดขึ้นจากการผลักดันกฎ Adblock ใหม่ให้กับผู้ใช้ ตามด้วย Maone ที่ก่อวินาศกรรม ซึ่งในที่สุดก็ทำให้ Mozilla ต้องเข้ามาแทรกแซงเพื่อเปลี่ยนแปลงนโยบายเกี่ยวกับส่วนเสริม[ 8 ]

ตัวอย่าง

โค้ดต่อไปนี้จะแก้ไขค่าของpiในไลบรารีคณิตศาสตร์มาตรฐานของ Python เพื่อให้สอดคล้องกับกฎหมาย pi ของรัฐอินเดียนา

>>> นำเข้าโมดูลmath >>> math.pi 3.141592653589793 >>> math.pi = 3.2 # แก้ไขค่า Pi ในโมดูลmath โดยตรง>>> math.pi 3.2

ครั้งต่อไปที่ Python เริ่มทำงาน ค่าของ pi จะเป็นค่าเดิมก่อนการแก้ไข: 3.141592653589793.

ดูเพิ่มเติม

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ไม่มีชื่อบทความ

Monkey patch คือการแก้ไขโค้ดขณะทำงาน (ไม่ใช่ โค้ดต้นฉบับ ) ของ ภาษาโปรแกรมแบบไดนามิก และข้อมูล (ข้อมูล/โค้ด) ที่ใช้ในการแก้ไขโค้ดขณะทำงานก็คือ Monkey patching นั่นเอง Monkey...

ข้อผิดพลาด

ข้อควรระวังบางประการของการแก้ไขโค้ดแบบ Monkey Patching:

ตัวอย่าง

โค้ดต่อไปนี้จะแก้ไขค่าของ pi ในไลบรารีคณิตศาสตร์มาตรฐานของ Python เพื่อให้สอดคล้องกับ กฎหมาย pi ของรัฐ อินเดียนา

ดูเพิ่มเติม

คำแนะนำ (การเขียนโปรแกรม) การเขียนโปรแกรมเชิงแง่มุม การโหลดแบบไดนามิก วิธีการขยาย หมวดหมู่ Objective-C ใยสังเคราะห์ รหัสที่แก้ไขตัวเองได้