ตรงกันข้ามกับการเริ่มต้น (หรือ init) คืออะไร? [ปิด]


94

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

ชื่อที่เป็นไปได้คือ: ปลดปล่อยลบทิ้งล้าง ฯลฯ

คุณคิดว่าอันไหนที่เหมาะสมที่สุด?


1
ทำลาย? (ต้องการตัวอักษรมากกว่านี้)
Deiwin

31
ไม่เห็นว่าสิ่งนี้ไม่สร้างสรรค์หรือไม่การสแกนคำตอบด้านล่างอย่างรวดเร็วแสดงให้เห็นว่านักพัฒนาจำนวนมากไม่ค่อยได้คำตรงข้าม ชื่อวิธี IMO มีความสำคัญมากและ "เริ่มต้น" ไม่มีคำตรงข้ามที่ชัดเจน แต่เป็นคำทั่วไปและมีประโยชน์
earcam

2
น่าเศร้าที่ฉันไม่สามารถเพิ่มคำตอบได้อีกต่อไปเนื่องจากคำถามถูกปิด (ดังที่ earcam กล่าวว่า: สิ่งนี้ไม่สร้างสรรค์หรือไม่) ดังนั้นฉันจะเพิ่มคำตอบของฉันที่นี่ แบบฟอร์มสั้น ๆ ที่เป็นมิตรกับความคิดเห็นคือ: ใช้Initializeเฉพาะในกรณีที่คุณไม่ต้องการใช้คำตรงข้าม! ในกรณีที่คุณต้องการหนึ่งเลือกคำกริยาอื่น (ส่วนใหญ่มีทางเลือกที่อธิบายเพิ่มเติม) สำหรับการอ้างอิงเพิ่มเติมฉันกำลังให้รายการคำตรงกันข้ามของฉันสำหรับโปรแกรมเมอร์ที่ GitHub
Max Truxa

3
ฉันพบคำตอบสำหรับสิ่งนี้มีประโยชน์มากเมื่อฉันมีคำถามเดียวกันทุกประการ มันไม่ควรถูกปิด
Ian Goldby

3
ฉันเห็นด้วย ... การปิดคำถามนี้ไม่เป็นประโยชน์เลย
39811

คำตอบ:


79

ฉันใช้ :

  • เริ่มต้น ()
  • ยุติ ()

ฉันคิดว่ามันเหมาะสมกว่า:

  • มันยากที่จะไม่เห็นมันเป็นรหัสเพราะมันทั้งคำยาว (ฉันไม่ได้ใช้ init)
  • มันถูกต้องภาษาอังกฤษ (AFAIK)
  • ในหัวของฉันยุติการหลีกเลี่ยงความคลุมเครือ มันไม่ตรงกับการเริ่มต้น (ซึ่งตรงกับจุดสิ้นสุด), เริ่มต้น (ซึ่งตรงกับหยุด), สร้าง (ซึ่งตรงกับทำลาย), การตั้งค่า (ซึ่งตรงกับ unset), โหลด (ซึ่งตรงกับการยกเลิกการโหลด) ฯลฯ

บางคนอาจพบว่ามันเป็นคำถามของรสนิยม


6
+1 terminate()สำหรับ ฉันรู้สึกว่ามันไม่ได้คลุมเครือและอาจใช้ได้ในกรณีการใช้งาน
Ben Hocking

9
ฉันเห็นด้วยอย่างสมบูรณ์กับ "ยุติ" คำแนะนำอื่น ๆ ทั้งหมดสำหรับคำที่มีคำตรงข้ามที่แน่นอนและเป็นที่รู้จัก ทำลาย (สร้าง), tearDown (setUp), ปิด (เปิด), ปล่อย (รับ), และอื่น ๆ ที่น่าประหลาดใจที่นักพัฒนาจำนวนมากไม่เห็นสิ่งนี้
earcam

Defenestrate นั่นคือสิ่งที่ฉันทำกับวัตถุเมื่อฉันทำกับพวกเขา (แต่สิ้นสุดจะเป็นตัวเลือกที่สองของฉัน)
Nicki

3
@Nicki ดูมีราคาแพงที่จะมีการติดตั้งหน้าต่างที่แต่ละวัตถุทำลาย ...
Klaim

ดังที่earcamชี้ให้เห็น: มันเป็นset up(ซึ่งเข้ากันtear downได้) ไม่setup(ไม่มีคำกริยาในภาษาอังกฤษ)
Max Truxa

25

ฉันมักจะไปกับทั้งจบ, ทำลายหรือยุติขึ้นอยู่กับสิ่งที่ฟังก์ชั่นวัตถุ

สำหรับกรณีที่คุณอธิบายจบคือสิ่งที่ฉันจะไปด้วยตามรูปแบบของฉัน


น่าเสียดายที่ 'สรุป' อาจเป็นคำพ้องความหมายหรือคำตรงกันข้ามของ 'กำหนดค่าเริ่มต้น' ดังนั้นฉันคิดว่ามันจะเป็นตัวเลือกที่ไม่ดีโดยทั่วไป อย่างไรก็ตาม 'ทำลาย' และ 'ยุติ' เป็นคู่แข่ง ดู mw.com/dictionary/finalize สำหรับคำจำกัดความที่พูดว่า "ใส่ในแบบฟอร์มสุดท้ายหรือแบบเสร็จ" ฉันเคยเห็นมันใช้วิธีนี้ในรหัส เช่นการจบวัตถุเป็นขั้นตอนสุดท้ายในการเริ่มต้น ในทางตรงกันข้ามคลาส Object ของ Java มีfinalize()วิธีการที่ระบุว่าไม่มีการอ้างอิงไปยังวัตถุอีกต่อไป
Ben Hocking

@ BenHocking ฉันคิดว่าคุณกำลังใช้ "เพื่อใส่ในรูปแบบสุดท้ายหรือเสร็จ" วิธีที่ผิด สำหรับฉันแล้วนี่หมายความว่าคุณทำกับวัตถุเสร็จแล้วและถึงเวลาที่ต้องทำความสะอาด / รีเซ็ตคุณสมบัติทั้งหมด นี่คือสิ่งที่ OP บอกว่าเขาต้องการทำ ดังนั้นฉันคิดว่าคำจำกัดความพิสูจน์กรณีของฉัน
Brian Dishaw

นอกจากนี้ข้อเสนอแนะใด ๆ เกี่ยวกับเหตุผลที่ downvote? (ฉันสมมติว่ามันไม่ใช่ @ BenHocking เนื่องจากเขาไม่ได้ระบุว่าเขาเป็นผู้ลง
คะแนนเสียง

a) คุณพูดถูกที่ฉันไม่ได้ลงคะแนน ข้อเสนอแนะของคุณสมเหตุสมผลและฉันคิดว่าการสนทนานี้มีประโยชน์ b) ฉันเห็นการสรุป () ใช้ในความหมายที่ฉันระบุ ตัวอย่างเช่นในคลาสที่คำนวณ Delauney triangularization หลังจากเพิ่มคะแนนทั้งหมดแล้ว finalize () ถูกเรียกให้ทำการคำนวณเพิ่มเติมบางอย่างก่อนที่ผลลัพธ์จะถูกนำมาใช้ ในกรณีนั้นมันบ่งบอกว่าวัตถุนั้นไม่ได้ถูกเปิดอีกต่อไปสำหรับการดัดแปลง แต่มันก็ยังคงพร้อมใช้งานเช่นเพื่อให้ได้ผลลัพธ์ของการเป็นสามเหลี่ยม
Ben Hocking

14

ฉันชอบreleaseวิธีการที่กำจัดวัตถุและทรัพยากรอื่น ๆ (เช่นเป็นการเตรียมพร้อมสำหรับการทำลาย) ฉันจะเลือกresetวิธีที่รีเซ็ตค่าเป็นค่าเริ่มต้น

หากสถานะ "เริ่มต้น" ไม่ต้องการทรัพยากรใด ๆ ก็resetอาจจะสามารถเรียกreleaseให้ดำเนินการส่วนนั้นได้


6

close()

ยังไม่มีใครเสนอ close () Java 7 มีคุณสมบัติ "ลองกับทรัพยากร" ใหม่ คลาสที่ถูกล้างข้อมูลโดยอัตโนมัติต้องใช้ java.lang.AutoCloseable ซึ่งมีเมธอด close () เดียว การปิดระบบ () หรือการล้างข้อมูล () อาจดีเช่นกัน

ไม่ finalize()

finalize () หมายถึงบางสิ่งบางอย่างที่เฉพาะเจาะจงกับตัวรวบรวมขยะใน Java และวิธีการทำงานค่อนข้างแปลก ฉันจะอยู่ห่างจาก finalize () เว้นแต่คุณจะต้องการสิ่งที่ Java ทำกับ finalize ()


2
คุณสร้างจุดที่ถูกต้องเกี่ยวกับการสรุป () ใน Java ... แต่ OP ไม่ได้ระบุว่าฉันเห็นว่าคำถามนั้นเกี่ยวข้องกับ Java โดยเฉพาะและไม่ใช่ภาษา OO อื่น ๆ ที่มี "ชื่อเมธอด" (เช่น C ++)
EliSko

ใน C # Finalizeใช้เพื่อทำลายอินสแตนซ์ของคลาส
Olivier Jacot-Descombes

4

ฉันค่อนข้างชอบ 'ทำลาย' ไม่ชัดเจนถ้าคุณกำลังเขียนวิดีโอเกมหรืออะไรซักอย่าง


4
ในใจของฉัน "ทำลาย" ถูกจับคู่กับ "สร้าง"
EliSko

4

ฉันจะบอกว่ามันขึ้นอยู่กับว่าการกระทำนั้นเป็นตัวเลือกหรือจำเป็น (โดยไม่มีการรั่วไหลของทรัพยากร) และถ้าภาษานั้นรองรับตัวสร้าง / ตัวทำลาย สำหรับกรณีที่ไม่จำเป็นฉันใช้:

  • ชัดเจน
  • รีเซ็ต
  • ซ่อน (ในบริบท UI)

ในกรณีอื่น ๆ ที่ต้องการการดำเนินการตรงกันข้าม (ในภาษาที่ไม่มีตัวสร้าง / destructors หรือเมื่อตัวทำลายไม่ปล่อยทรัพยากร) ฉันจะใช้:

  • init - fini
  • เริ่มต้น - ยกเลิกการเริ่มต้น
  • สร้าง - ทำลาย

hideในกรณีของคุณผมคิดว่าผมจะชอบ มันยังสามารถปล่อยหน่วยความจำ / ทรัพยากรถ้ามันต้องการ - สิ่งสำคัญคือมันเป็นทางเลือกนั่นคือ destructor จะดูแลถ้าคุณไม่ได้


3

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

เพียงตรวจสอบให้แน่ใจว่าคำศัพท์ของคุณไม่ได้โหลดมากเกินไปในบริบทปัจจุบันของคุณ


ฉันไม่เห็นว่าปัญหานี้เกิดขึ้นในตัวเองได้อย่างไร ได้รับFinalizeและDisposeอยู่ในรหัส. NET นอกจากนั้นฉันไม่เห็นปัญหาในการนำชื่อที่กำหนดกลับมาใช้ใหม่
Konrad Rudolph

1
@ KonradRudolph การใช้ชื่อที่ยอมรับแล้วกลับเป็นเรื่องปกติถ้าแนวคิดสอดคล้องกันมาก ไม่มีเงื่อนไขใดที่ฉันระบุไว้สอดคล้องกับสิ่งที่ฉันเข้าใจว่าเขาอธิบาย ดังนั้นมันจะสับสนมากขึ้นเนื่องจากคุณจะเห็นคำว่าคิดฉันรู้ว่ามันทำอะไรและผิด
เข้าสู่ระบบ

3

และมันถูกใช้เพื่อรีเซ็ตค่าเป็นค่าเริ่มต้นและกำจัดวัตถุที่จะไม่ใช้อีกต่อไป

resetดูเหมือนว่าเป็นคำที่ดีถ้าคุณรีเซ็ตวัตถุให้เป็นค่าเริ่มต้น reinitializeอาจมีความเหมาะสมหากการใช้วัตถุนี้คล้ายกับสิ่งที่initializeทำ ดูเหมือนว่าวิธีนี้จะกำจัดวัตถุอื่น ๆไม่ใช่สิ่งที่ได้รับข้อความซึ่งในกรณีใดกรณีหนึ่งข้างต้นควรจะใช้ได้ หากคุณกำลังทำสิ่งที่ตรงกันข้ามinitและการเตรียมเครื่องรับสัญญาณให้ถูกทำลายdisposeจะเป็นทางเลือกที่ดี


1

http://www.wordhippo.com/what-is/the-opposite-of/initialize.html

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

หากคุณกำลังมองหาแนวความคิดสำหรับการใช้งานทั่วไปหรือเป็นมาตรฐานฉันจะเลือกบางอย่างที่มีความหมายน้อยกว่าสิ่งที่ไม่มีความหมายพิเศษเช่นปล่อยหรือลบ

แนวคิดของ init vs (อะไรก็ตาม) คล้ายกับ (constructor vs destructor) หรือใน java finalize

( หมายเหตุ : หากภาษามีแนวคิดในการสร้างและทำลายวัตถุความต้องการเพียงเล็กน้อยหรือไม่จำเป็นต้องใช้ init ()


FYI: finalizeสงวนไว้ใน Java
Basil Bourque

0

หากวัตถุที่วิธีการถูกเรียกใช้จะหยุดใช้ฉันก็แค่ใช้ destructor มาตรฐาน แม้ว่าจะไม่ดูเหมือนกรณี แต่แทนที่จะเป็นชื่อสามัญเกินไปชื่อที่ดีกว่าอาจเป็นสิ่งที่คล้ายกันhide()ถ้าวัตถุนั้นถูกซ่อนอยู่หรือhideUserInterfacePart()หากวัตถุประกอบถูกซ่อนอยู่

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