การพูดคุยเกี่ยวกับ“ วิธีการ” ของ C ++ มันผิดอย่างไร (กับ“ ฟังก์ชั่นสมาชิก”)


19

ฉันเข้าใจว่าตาม C ++ สเป็คไม่มีสิ่งเช่น "วิธีการ" และบางส่วน (มากที่สุด?) โปรแกรมเมอร์ C ++ พิจารณา "วิธี" เป็น Java-ism ในทางกลับกันแม้แต่ในฟอรัม C ++คนก็ดูเหมือนจะพูดถึงวิธีการต่างๆโดยไม่ชักกระตุก ฉันกำลังมองหาอนุสัญญาที่เป็นที่รู้จักหรือการปฏิบัติทั่วไปเกี่ยวกับคำศัพท์นี้

ฉันกำลังทำเอกสาร API ที่มีทั้ง C ++ และ Java เวอร์ชัน นักพัฒนาได้เก็บคลาสและเมธอด / ฟังก์ชันสมาชิกไว้เหมือนกันระหว่างสองชื่อนี้เพื่อความสะดวกในการย้ายและการทดสอบ ด้วยเหตุนี้สิ่งที่จำเป็นต้องได้รับการบันทึกเกี่ยวกับ API เหล่านี้คือ "ทางเลือก" ด้านบนของภาษา ฉันต้องสามารถพูดคุยทั่วไปเกี่ยวกับ Foos และ Bars ด้วยวิธีการ baz () และ mumble () ... วิธีการ?

ถ้าฉันพูดถึงวิธีการโปรแกรมเมอร์ Java จะพิจารณาเป็นธรรมชาติและจะปรากฏขึ้นโปรแกรมเมอร์ C ++ อาจจะเข้าใจ แต่บางคนคิดว่ามันไม่ถูกต้อง คำถามของฉันคือ: วิธีนี้เลวร้ายในทางปฏิบัติอย่างไร ฟังก์ชั่นของสมาชิก C ++ พูดถึงตามอัตภาพในบริบท "ทั่วไป OOP" อย่างไรเมื่อเทียบกับ C ++ - เฉพาะเจาะจง? มีวิธีที่ดีกว่าในการพูดคุยเกี่ยวกับฟังก์ชั่นสมาชิกในวิธีที่ไม่ถูกต้องสำหรับภาษาใดภาษาหนึ่งหรือไม่? ("ฟังก์ชั่นสมาชิก" เป็น verbose เล็กน้อย)

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

ฉันรู้คำถามนี้แต่โดยทั่วไปเกี่ยวกับ OOP และไม่ถามเกี่ยวกับภาษาเฉพาะ


ฉันอ่านศูนย์ช่วยเหลือและตรวจสอบรายการแท็กก่อนถามเรื่องนี้ ฉันทำสิ่งผิดปกติโดยถามสิ่งนี้ที่นี่หรือไม่?
โมนิกา Cellio

การโหวตอย่างใกล้ชิดที่คุณมีสำหรับความเห็นเบื้องต้นซึ่งอาจเป็นได้ .. ไม่แน่ใจว่าเว็บไซต์นี้สามารถทำงานได้ดีเพียงใดใน SE เพราะมันยากที่จะเผด็จการพูดว่าคนจะหงุดหงิดกับคุณหรือไม่ เป็น .. คน ๆ หนึ่งอาจคิดว่ามันดีโดยสิ้นเชิงและอีกคนคิดว่ามันเป็นการฝ่าฝืนคำศัพท์ที่น่ากลัวเช่นเดียวกับที่คุณอธิบายไว้ใน Q- เพราะนี่เป็นสิ่งที่มีความคิดเห็นเพียงอย่างเดียว
Jimmy Hoffa

2
แนวคิดของวิธีการ OOP จะแมปส่วนใหญ่กับ "ฟังก์ชันสมาชิกเสมือน" ใน C ++ แต่สิ่งเดียวกัน มีคำศัพท์ที่แย่กว่านั้นในฝั่ง Java เช่น "วิธีการคงที่" ซึ่งไม่ใช่วิธีการยกเว้นฟังก์ชั่น เพียงใช้คำว่า“ วิธี” ที่ไม่ขึ้นกับภาษาและทุกคนจะเข้าใจในสิ่งที่คุณหมายถึง หากมีคนยืนยันว่า C ++ ไม่มีวิธีการนั่นเป็นเพียงความผิดที่เกิดขึ้นจริงและการปลดจักรยานที่น่ารำคาญอย่างเหลือเชื่อ
amon

1
@JimmyHoffa นี้ดีขึ้นหรือไม่
Monica Cellio

3
เพียงเรียกวิธีการเหล่านี้ในเอกสาร API ข้ามภาษาของคุณ คุณสามารถรวมวลีในข้อความแนะนำเช่น "เพื่อพยายามคงภาษาการเขียนโปรแกรมไว้ไม่เชื่อเรื่องเอกสาร API นี้จะใช้วิธีการคำเพื่ออ้างถึงฟังก์ชั่นสมาชิก C ++"
Brandin

คำตอบ:


11

ทำไมคุณไม่รวมคำอธิบาย (เหมือนอย่างที่คุณทำในคำถามของคุณ) ในส่วนเบื้องต้นของเอกสารเช่นส่วนของการประชุม ? จากนั้นคุณสามารถอธิบายได้ว่าคำว่า "method" ตามที่ใช้ในเอกสารของคุณนั้นมีความหมายทั่วไปในแง่ของวิธีการ (Java), ฟังก์ชันสมาชิก (C ++), ... เนื่องจากเอกสารนี้ใช้กับการนำไปใช้ทั้งหมด


นี่คือสิ่งที่ฉันทำและคนอื่น ๆ ก็ดูเหมือนจะโอเคกับมัน ขอบคุณสำหรับคำแนะนำ
โมนิกา Cellio

15

คุณจะไม่ถูกประหารชีวิต

การร้องเรียนในโลก C ++ ไม่ได้เป็นหนึ่งในความถูกต้องทางศาสนา: มันเป็นหนึ่งในความคลุมเครือ มี"วิธีการ" หลายประเภทในถิ่นทุรกันดารโดยขึ้นอยู่กับว่าคุณกำลังพูดถึงโดเมนอะไรกันว่าพวกเราหลายคนชอบที่จะใช้คำศัพท์มาตรฐานเพื่อหลีกเลี่ยงความเข้าใจผิดในภายหลัง นั่นหมายถึงประมาณ "ฟังก์ชั่นสมาชิกแบบคงที่ / [ไม่ใช่แบบคงที่] [บริสุทธิ์] เสมือน / [ไม่ใช่แบบเสมือน] / [ฟรี]"

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

แต่ฉันแน่ใจว่ามีโปรแกรมเมอร์ C ++ มืออาชีพหลายล้านคนที่ไม่รู้ว่านี่เป็นเรื่องจริง มันเป็นโลกเฒ่าใหญ่

คุณจะไม่ถูกประหารชีวิต


3

Eiffel เรียกพวกเขาว่าRoutines or Features , C ++ เรียกพวกเขาว่าMember Functionและ (เกือบ) ภาษา OO อื่น ๆ ที่เคยสร้างมาในประวัติศาสตร์ของการคำนวณทั้งก่อนและหลัง C ++ เรียกพวกมันว่าMethodดังนั้นโดยทั่วไปแล้วคำศัพท์หลังควรจะเข้าใจแม้กระทั่ง c ++ (และไอเฟล) โปรแกรมเมอร์จนกว่าพวกเขาจริงๆไม่เคยได้ยิน Simula, สมอลล์ทอล์คตนเอง, Objective-C, Newspeak, Java, C #, VB.NET, PHP, Python, Ruby, ECMAScript / JavaScript, สกาล่า CoffeeScript ...


ยกเว้นประเด็นคือพวกเขามักจะหมายถึงสิ่งต่าง ๆ อย่างละเอียดในโดเมนเหล่านั้น นั่นเป็นสาเหตุที่ OP ถามว่าการติดศัพท์เฉพาะโดเมนดีกว่าหรือไม่และทำไมคำตอบที่ถูกต้องคือ "ใช่" ...
Lightness Races with Monica

เพิ่งรู้ว่าคุณพิสูจน์จุดของฉันด้วยการอ้างจาวาสคริปต์ซึ่งไม่ได้มีคลาส (OO ของมันคือต้นแบบ) ดังนั้นวิธีการของ JavaScript จึงเหมือนกับวิธีอื่น ๆ ได้อย่างไร? ความเข้าใจซึ่งกันและกันที่คุณอ้างว่าไม่มีอยู่จริง
การแข่งขัน Lightness กับโมนิก้า

OOP ที่ใช้ต้นแบบไม่ได้สร้างความแตกต่าง OOP ขึ้นอยู่กับความคิดที่ว่าวัตถุสื่อสารผ่านข้อความ (เช่นเซิร์ฟเวอร์ที่ส่งคำร้องขอซึ่งกันและกัน) และวิธีการอ้างถึงวิธี (วิธี) ที่วัตถุใด ๆ ตอบสนองต่อข้อความที่กำหนด ต้นแบบ OO สร้างความแตกต่างเฉพาะเมื่อคำนึงถึงวิธีการที่อาจสืบทอดวิธีการ สิ่งที่สร้างความแตกต่างที่ใหญ่กว่าคือการใช้สล็อต (เช่น Python) กับข้อความที่ใช้ (เช่น Ruby) OOP และไม่ว่าคุณจะมีผลผูกพันช้าหรือเร็ว
saolof
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.