ความหมายเฉพาะของข้อกำหนดคืออะไรฟังก์ชั่นวิธีการขั้นตอนและรูทีนย่อย


11

ฉันสงสัยว่าอะไรคือความแตกต่างเฉพาะในคำศัพท์ที่เราใช้สำหรับการจัดกลุ่มส่วนต่าง ๆ ของรหัส บางครั้งฉันเคยเห็นคำศัพท์ที่ใช้แทนกันได้: ภาษา OO หลายภาษาใช้คำว่า "ฟังก์ชั่น" เพื่อกำหนดวิธีการ (ทำไม?)

หากคุณต้องการที่จะแม่นยำสิ่งที่มีความหมายเฉพาะของแต่ละคน? หรือมันเป็นเพียงสิ่งที่แต่ละภาษาเลือกที่จะเรียกว่า?


มีเพียงสองภาษาเท่านั้นที่ฉันรู้ว่าการใช้functionวิธีการนั้นคือ JavaScript และ PHP ทั้งสองใช้คำหลักเดียวกันสำหรับวิธีที่ไม่ใช่ (ฟังก์ชั่นฟรี) และในกรณีของ JavaScript ก็ไม่ได้มีความแตกต่างระหว่างฟังก์ชั่นและวิธีการอย่างน้อยก็ไม่ใช่ระดับภาษา

ตัวอย่าง: ใน VB.Net Subคือค่าที่Functionไม่มีการส่งคืน ในPythonคุณสามารถมีฟังก์ชั่นที่ไม่ได้เป็นส่วนหนึ่งของคลาสใด ๆ ดังนั้นจึงไม่ใช่วิธี คุณสามารถประกาศฟังก์ชั่นภายในฟังก์ชั่นและคุณสามารถทำเช่นนั้นใน C # เช่นกัน บางครั้งพวกเขามีชื่อแตกต่างกันด้วยเหตุผลเดียวกับที่แอปเปิ้ลและสับปะรดทำเพราะมันต่างกัน
งาน

คุณพบอะไรที่ทำให้คุณคิดว่ามีความคลาดเคลื่อน
JeffO

คำตอบ:


20
  • โปรแกรมย่อยรูทีนย่อย
    "รูทีนย่อย" อาจมาจากภาษาแอสเซมบลี ตัวประมวลผลบางตัวมีคำแนะนำเพื่อรองรับรูทีนย่อยเป็นวิธีการจัดระเบียบรหัสและนำส่วนทั่วไปของรหัสมาใช้ซ้ำ ตัวอย่างเช่นโปรเซสเซอร์ 6502 มีคำสั่ง JSR (ข้ามไปที่รูทีนย่อย) และคำสั่ง RTS (ส่งคืนจากรูทีนย่อย) ฉันจำได้ว่ามันยังถูกใช้อย่างมากในการเขียนโปรแกรมที่มีโครงสร้างซึ่งโปรแกรมเป็นลำดับชั้นของหน่วยของรหัสซึ่งบางครั้งเรียกว่ารูทีนย่อยหรือโปรแกรมย่อย IMO เหล่านี้เป็นคำศัพท์ทั่วไปสำหรับหน่วยของโค้ดบางส่วนที่การควบคุมถูกถ่ายโอนชั่วคราวเพื่อวัตถุประสงค์ในการทำงานให้เสร็จ

  • ฟังก์ชั่นขั้นตอน
    เหล่านี้มักจะใช้แทนกันได้ แต่ในบางภาษามีความแตกต่าง ใน Pascal ฟังก์ชั่นเป็นโปรแกรมย่อยที่ส่งกลับค่าในขณะที่ขั้นตอนเป็นโปรแกรมย่อยที่ไม่ได้ ใน C และภาษาที่เกี่ยวข้องทุกโปรแกรมย่อยมีประเภทผลตอบแทน (แม้ว่าจะเป็นvoid) ดังนั้นจึงไม่มีความแตกต่าง

  • method, ฟังก์ชั่นสมาชิก
    เหล่านี้เป็นสองชื่อสำหรับสิ่งเดียวกัน - โดยพื้นฐานแล้วฟังก์ชันที่เกี่ยวข้องกับคลาสหรือวัตถุที่กำหนด

  • ผู้ประกอบการ
    ทุกภาษามีชุดของผู้ประกอบการในตัว ในบางภาษาเช่น C ++ ตัวดำเนินการคือฟังก์ชันที่สามารถแทนที่ (เช่นแทนที่) และ / หรือโอเวอร์โหลด (เช่นกำหนดไว้สำหรับประเภทใหม่)

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

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


4
ไม่ใช่ทุกภาษาที่มาพร้อมกับโอเปอเรเตอร์ในตัว บางอย่างเช่น Scheme และ Haskell เพียงให้คุณกำหนดฟังก์ชั่นที่มีชื่อเช่น '+' หรือ '>> =' นอกจากนี้คุณควรเพิ่มในบางภาษา (เช่นแบบแผน) "ฟังก์ชั่น" หมายถึงความโปร่งใสในการอ้างอิง (เช่นมันจะส่งกลับค่าเดียวกันสำหรับอินพุตเดียวกันโดยไม่มีผลข้างเคียง) เสมอในขณะที่กระบวนการไม่ทำงาน มิฉะนั้นคำตอบที่ดี
Tikhon Jelvis

จนถึงตอนนี้ฉันยังจำได้ว่า "โอเปอเรเตอร์" ส่วนใหญ่จะใช้สำหรับฟังก์ชั่นที่มี 2 อาร์กิวเมนต์ พวกเขามัด (ผู้ประกอบการระหว่างการขัดแย้ง: 2 + 2) มีข้อยกเว้นเล็กน้อยเช่น 1-arg like ++arg(prefix) หรือarg++(postfix) แม้ว่าฉันจะไม่เห็นผู้ประกอบการ postfix จำนวนมาก ..
Darek Nędza

-1

ขึ้นอยู่กับภาษาสิ่งที่คุณสามารถทำได้กับพวกเขา

  • คุณต้องการความแตกต่างหรือไม่
  • มีความแตกต่างในไวยากรณ์หรือเป็นเพียงความสะดวกสบายเมื่อพูดถึงรหัส

AFAIK ในแบบพื้นฐานถ้าคุณเรียกบางสิ่งซึ่งไม่ส่งคืนสิ่งใด แต่ดำเนินงานที่มีผลข้างเคียงเช่นการพิมพ์เขียนลงไฟล์หรือเปลี่ยนตัวแปรทั่วโลกเรียกว่าขั้นตอน

ถ้ามันคืนบางอย่างมันถูกเรียกว่าฟังก์ชั่น

ใน OOP- ภาษาเช่น Java ฉันไม่ค่อยพบคำว่า 'ฟังก์ชั่น' แต่ 'วิธีการ' และได้รับการสอนว่าฟังก์ชั่นเป็นสิ่งที่เป็นสากลและทุกคนสามารถเรียกได้

ในการทำงานและ OOP- ภาษาสกาล่าวิธีการไม่ได้เรียกว่าฟังก์ชั่น แต่คุณสามารถส่งสิ่งนั้นไปยังวิธีอื่นแล้วมันจะกลายเป็นฟังก์ชั่น

รูทีนย่อยเป็นรูทีนซึ่งถูกเรียกโดยรูทีนอื่นเพื่อความเข้าใจของฉัน

โดยสรุปฉันไม่คิดว่าจะมีคำจำกัดความที่กระชับสำหรับทุกภาษาและกระบวนทัศน์อื่น ๆ คุณต้องพิจารณาถึงวัฒนธรรมเฉพาะคุณเข้ามาหากคุณใช้คำเหล่านี้ - บางทีคุณควรแนะนำนิยามของคุณก่อน


-1

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

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