ทำไมจึงมีข่าวลือมากมายเกี่ยวกับการปิด [ปิด]


9

เหตุใดจึงมีข่าวลือมากมายเกี่ยวกับการปิดในหมู่นักพัฒนาซอฟต์แวร์ ในอาชีพของฉันฉันไม่เคยใช้มันอย่างตั้งใจ แต่ไม่เข้าใจอย่างชัดเจนว่ามันคืออะไร

UPD: เพื่อชี้แจง คำถามคือว่าทำไมแนวคิดการปิดตัวลงจึงช่างพูดคุยกันทุกวันนี้


3
คุณจะใช้สิ่งที่คุณไม่รู้โดยเจตนาได้อย่างไร? ดังนั้นโดยพื้นฐานแล้วคุณควรถาม (หรือค้นหามากกว่า) ก่อนว่าการปิดคืออะไร
Steven Jeuris

1
คุณอ่านบทความวิกิพีเดียหรือไม่? คุณไม่เข้าใจอะไรเกี่ยวกับมัน
วินไคลน์

2
คุณมีอาชีพอะไร

4
คำถามแบบนี้คืออะไร? "Buzz" คืออะไร คุณไม่เข้าใจอะไร ทำไมคุณไม่ถามคำถามนั้นแทน
Aaronaught

4
ในการป้องกันของ OP, การปิดเป็นแนวคิดเก่า แต่เมื่อเร็ว ๆ นี้พวกเขาได้รับการพูดคุยของเมืองเพื่อที่จะพูด และแนวคิดนั้นง่ายมากสำหรับทุกคนที่เรียนวิชาคณิตศาสตร์มากกว่านี้ฉันไม่สามารถเข้าใจได้ว่าทำไมผู้คนถึงพูดถึงพวกเขาราวกับว่าพวกเขาเป็นสิ่งที่เข้าใจยาก บางทีนั่นอาจเป็นวิธีที่ทำให้ตัวเองดูฉลาดขึ้น: "ดูสิฉันปิดช่องคลอดซึ่งยากที่จะคลุ้มคลั่ง
quant_dev

คำตอบ:


22

การปิดเป็นรหัสที่จดจำโลกที่มาจากในขณะที่ยังใช้งานได้ซึ่งถูกนำมา

ตัวอย่างคือการกำหนดฟังก์ชั่นที่ไม่ระบุชื่อใน Java ซึ่งรู้ว่ามันอยู่ใน YourObject และสามารถจัดการวิธีการและฟังก์ชั่นของมัน ฟังก์ชั่นนี้จะถูกส่งไปยังสวิงเช่นที่ลึกเข้าไปภายในเช่นฟัง แต่ก็ยังมีเส้นชีวิตกลับไปที่รากของมัน

นี่เป็นแนวคิดที่ทรงพลังมากเพราะช่วยให้คุณสามารถส่งรหัสซึ่งไม่ทราบรหัสที่ใช้ - สามารถติดต่อกลับเข้าไปในส่วนอื่น ๆ ของรหัสได้


1
ใช่. มันเป็นวิธีการแทรกขั้นตอนไม่เพียง แต่รัฐในรหัสอื่น ๆ สิ่งนี้ทำให้มีความยืดหยุ่นสูงมากในการออกแบบอัลกอริทึม คุณสามารถออกแบบวิธีการ templated ซึ่งขึ้นอยู่กับรูทีนย่อย stateful ซึ่งอาจไม่ได้รู้เวลารวบรวม ข้อเสียคือการเชื่อมโยงไปยังแหล่งดั้งเดิมของวิธีการนั้นและสถานะสามารถแตกได้โดยไม่ต้องรู้วิธีการบริโภค เมื่อสิ่งนั้นเกิดขึ้นคุณจะพบข้อผิดพลาดรันไทม์ที่หายาก
KeithS

1
ฮ่า ๆ ฟังก์ชั่นไม่ระบุชื่อใน Java ... ตลก
กำหนดค่า

1
@ นักประดิษฐ์ไม่ใช่เรื่องตลกความจริง

stackoverflow.com/questions/2755445/… Java 7 ยังไม่ออกใช่ไหม
BlueRaja - Danny Pflughoeft

java 7 ไม่มีการปิด

6

การปิดประตูเป็นเพียงบางสิ่งบางอย่างเพื่อแก้ไขปัญหาที่หลากหลายในวิธีที่สง่างาม ที่จริงแล้วในภาษาการเขียนโปรแกรมที่ไม่มีการปิดเทคนิคจะถูกสร้างขึ้นเพื่อใช้ฟังก์ชั่นที่คล้ายกัน

แค่คิดถึงฟังก์ชั่นใน C ++ หรือ Runnables ใน Java พวกเขาเป็นเพียงเทคนิคที่ช่วยให้ฟังก์ชันการทำงานคล้ายกับการปิด «การปิดด้วยตนเองบางประเภท»

การปิดกำลังได้รับความนิยมมากขึ้นเนื่องจากถูกรวมเข้ากับภาษายอดนิยม: Javascript เติบโตขึ้นเนื่องจากแอปพลิเคชันออนไลน์ (เช่น google doc เป็นต้น), C # นำไปใช้งาน, PHP ใช้งานตั้งแต่ 5.3 เป็นต้นไป

ขณะนี้การปิดนั้นมีอยู่ในเทคโนโลยีมากขึ้นเรื่อย ๆ กลายเป็นเรื่องตรงไปตรงมามากขึ้นเรื่อย ๆ ที่ผู้คนจำนวนมากให้ความสนใจ

ดังนั้นตอนนี้การปิดคืออะไร? มันค่อนข้างง่าย การปิดเป็นฟังก์ชันและบริบทเพื่อดำเนินการภายใน นี่คือการจัดการเป็นวัตถุ ทำไมถึงมีประโยชน์ สิ่งนี้มีประโยชน์ในการขอรหัสของคุณให้เป็นรหัสที่มีอยู่

ต่อไปนี้เป็นสถานการณ์ทั่วไปสองข้อที่ต้องใช้: เมื่อการดำเนินการได้รับการจัดการโดยรหัสส่วนอื่นเช่นในมัลติเธรดด้วยเธรดพูลหรือเมื่อการดำเนินการต้องดำเนินการในเหตุการณ์ที่เลือก (ใช้บ่อยใน javascript สำหรับ UI)


ฉันเข้าใจคุณชัดเจนหรือไม่ มี "การปิดแบบแมนนวล" บางอย่าง (ไม่ใช่การปิดแบบจริงๆ แต่มีบางอย่างที่คล้ายกับพฤติกรรมของพวกเขา) และมี "การปิดแบบ TRUE" บ้างไหม?

การปิดเป็นความสามารถทางภาษา ภาษาบางภาษาไม่มีความสามารถดังกล่าวคุณจึงต้องปิดตัวเองโดยใช้เครื่องมือที่เป็นภาษาให้คุณ บอกว่าพวกเขาเป็นจริงหรือไม่ไม่ใช่การอภิปรายที่น่าสนใจมาก IMHO
deadalnix

2
@gasan คุณสามารถใช้ชุดประกอบและทำรูปแบบใดก็ได้ที่คุณต้องการด้วยงบ GOTO จำนวนมาก ในทำนองเดียวกันคุณสามารถทำการวนซ้ำแบบ "สำหรับ" ด้วยการวนแบบ "ในขณะ" (ใน C ++) ด้วยตนเอง ระดับที่สูงขึ้นและสูงขึ้นนำเสนอวิธีการที่เป็นมาตรฐานในการทำสิ่งทั่วไป
ฟิลิป

6

ฉันเห็นข้อความที่น่าขบขันในวันอื่น ๆ มันเป็นไปตามบรรทัดของ "คลาสเป็นข้อมูลที่มีฟังก์ชั่นการปิดเป็นฟังก์ชั่นที่มีข้อมูล"

ใช่มันเป็นการทำให้ใหญ่เกินไป แต่มันช่วยให้เข้าใจได้


+1 วิธีที่ดีในการดูว่าการปิดคืออะไร: D
deadalnix
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.