ฉันสงสัยว่า / สิ่งที่แตกต่างระหว่างฟังก์ชั่นเฟิร์สคลาสและการสั่งซื้อสูงฟังก์ชั่น
ฉันอ่านทั้งสองหน้า wiki และมันดูค่อนข้างคล้ายกัน ถ้าพวกเขาพูดถึงเรื่องเดียวกันทำไมต้องมีสองคำศัพท์?
พยายาม google แล้ว แต่ไม่พบสิ่งที่เป็นประโยชน์
ฉันสงสัยว่า / สิ่งที่แตกต่างระหว่างฟังก์ชั่นเฟิร์สคลาสและการสั่งซื้อสูงฟังก์ชั่น
ฉันอ่านทั้งสองหน้า wiki และมันดูค่อนข้างคล้ายกัน ถ้าพวกเขาพูดถึงเรื่องเดียวกันทำไมต้องมีสองคำศัพท์?
พยายาม google แล้ว แต่ไม่พบสิ่งที่เป็นประโยชน์
คำตอบ:
มีความแตกต่าง เมื่อคุณพูดว่าภาษาหนึ่งมีฟังก์ชันชั้นหนึ่งหมายความว่าภาษานั้นถือว่าฟังก์ชันเป็นค่า - คุณสามารถกำหนดฟังก์ชันให้เป็นตัวแปรส่งผ่านไปรอบ ๆ เป็นต้นฟังก์ชันลำดับที่สูงกว่าคือฟังก์ชันที่ทำงานกับฟังก์ชันอื่นซึ่งหมายความว่า พวกเขาใช้ฟังก์ชันอย่างน้อยหนึ่งฟังก์ชันเป็นอาร์กิวเมนต์และยังสามารถส่งคืนฟังก์ชัน
แนวคิด "ลำดับที่สูงกว่า" สามารถนำไปใช้กับฟังก์ชันโดยทั่วไปเช่นฟังก์ชันในความหมายทางคณิตศาสตร์ แนวคิด "ชั้นหนึ่ง" เกี่ยวข้องกับฟังก์ชันในภาษาโปรแกรมเท่านั้น ไม่ค่อยใช้เมื่อกล่าวถึงฟังก์ชันเช่น“ ฟังก์ชันชั้นหนึ่ง” เป็นเรื่องปกติมากที่จะพูดว่า“ ภาษาหนึ่งมี / ไม่รองรับฟังก์ชันชั้นหนึ่ง”
ทั้งสองสิ่งมีความสัมพันธ์กันอย่างใกล้ชิดเนื่องจากยากที่จะจินตนาการถึงภาษาที่มีฟังก์ชันระดับเฟิร์สคลาสที่ไม่รองรับฟังก์ชันลำดับที่สูงกว่าและในทางกลับกันภาษาที่มีฟังก์ชันลำดับที่สูงกว่า แต่ไม่มีการรองรับฟังก์ชันระดับเฟิร์สคลาส
int
หรือchar
ในแง่ที่ว่าไม่สามารถกำหนดอย่างชัดเจน (โดยเนื้อความของฟังก์ชัน) ได้ทุกที่ที่คุณต้องการ
ฟังก์ชันชั้นหนึ่งคือฟังก์ชันที่ถือว่าเป็นวัตถุ (หรือกำหนดให้กับตัวแปรได้)
ฟังก์ชันลำดับที่สูงกว่าคือฟังก์ชันที่ใช้ฟังก์ชันชั้นหนึ่งเป็นพารามิเตอร์อย่างน้อยหนึ่งฟังก์ชันหรือส่งกลับฟังก์ชันคลาสหนึ่งอย่างน้อยหนึ่งฟังก์ชัน
พวกเขาแตกต่างกัน
ฟังก์ชั่นชั้นหนึ่ง
ค่าในภาษาที่ได้รับการจัดการอย่างสม่ำเสมอเรียกว่า "ชั้นหนึ่ง" อาจถูกเก็บไว้ในโครงสร้างข้อมูลส่งผ่านเป็นอาร์กิวเมนต์หรือใช้ในโครงสร้างควบคุม
ภาษาที่รองรับค่าที่มีประเภทฟังก์ชันและปฏิบัติเช่นเดียวกับค่าที่ไม่ใช่ฟังก์ชันกล่าวได้ว่ามี "ฟังก์ชันชั้นหนึ่ง"
ฟังก์ชั่นการสั่งซื้อที่สูงขึ้น
ผลที่ตามมาประการหนึ่งของการมีฟังก์ชันชั้นหนึ่งคือคุณควรจะสามารถส่งผ่านฟังก์ชันเป็นอาร์กิวเมนต์ไปยังฟังก์ชันอื่นได้ ฟังก์ชันหลังตอนนี้คือ "ลำดับที่สูงขึ้น" เป็นฟังก์ชันที่ใช้ฟังก์ชันเป็นอาร์กิวเมนต์
ตัวอย่างตามรูปแบบบัญญัติคือ "แผนที่"
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : map f xs
นั่นคือใช้ฟังก์ชันและอาร์เรย์และส่งกลับอาร์เรย์ใหม่พร้อมกับฟังก์ชันที่ใช้กับแต่ละองค์ประกอบ
ภาษาที่ใช้งานได้ - ภาษาที่ฟังก์ชันเป็นเครื่องมือหลักในการสร้างโปรแกรม - ทั้งหมดมีฟังก์ชันชั้นหนึ่ง ส่วนใหญ่ยังมีฟังก์ชันลำดับที่สูงกว่า (ข้อยกเว้นที่หายากมากคือภาษาเช่น Excel ซึ่งอาจกล่าวได้ว่าใช้งานได้ แต่ไม่ใช่ลำดับที่สูงกว่า)
นอกเหนือจากคำตอบก่อนหน้านี้โปรดทราบว่าภาษาที่มีฟังก์ชันชั้นหนึ่งจะเปิดใช้งานการแสดงออกของฟังก์ชันลำดับที่สูงกว่าโดยอัตโนมัติ (เนื่องจากคุณสามารถส่งผ่านฟังก์ชันเป็นพารามิเตอร์เช่นเดียวกับค่าอื่น ๆ )
ในทางกลับกันคุณสามารถจินตนาการถึงภาษาที่รองรับฟังก์ชันลำดับที่สูงกว่า แต่อย่าสร้างฟังก์ชันชั้นหนึ่ง (และในกรณีที่พารามิเตอร์ที่เป็นฟังก์ชันได้รับการปฏิบัติเป็นพิเศษและแตกต่างจากพารามิเตอร์ค่า "ธรรมดา")
ดังนั้นการปรากฏตัวของฟังก์ชันชั้นหนึ่ง (เป็นคุณลักษณะของภาษา) จึงหมายถึงการมีอยู่ของฟังก์ชันลำดับที่สูงกว่า แต่ไม่ใช่ในทางกลับกัน
ฟังก์ชันชั้นหนึ่งสามารถ:
High Order Functionคือฟังก์ชันที่ส่งกลับฟังก์ชันอื่น
ตัวอย่างเช่น:
function highOrderFunc() {
return function () {
alert('hello');
};
}
ฟังก์ชันชั้นหนึ่งหมายถึงทุกสิ่งที่คุณสามารถทำได้กับประเภทอื่น ๆ (ตัวแปรบูลีนตัวเลข ... ) คุณสามารถทำได้ด้วยฟังก์ชัน
ตัวอย่างเช่นกำหนดให้กับตัวแปรส่งผ่านไปรอบ ๆ สร้างขึ้นทันที