หลักการตั้งชื่อสำหรับฟังก์ชั่นการสั่งซื้อที่สูงขึ้น? [ปิด]


15

มีแบบแผนการตั้งชื่อสำหรับฟังก์ชันคำสั่งซื้อที่สูงขึ้นหรือไม่? นั่นคือฟังก์ชันที่ส่งคืนฟังก์ชันอื่น

ตัวอย่างใน Javascript:

function onlyDivisibleBy(div) { // <-- higher order function
  return function (n) {
    return n % div === 0;
  }
}

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

arr.filter(onlyDivisibleBy(3)); // [0, 3, 6, 9]
arr.filter(onlyDivisibleBy(5)); // [0, 5]

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


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

6
ฟังก์ชั่น @Reet ซึ่งฟังก์ชั่นกลับเป็นลำดับที่สูงขึ้นเช่นกัน พวกเขาอาจทำทั้งสองอย่าง
itsbruce

3
@Racheet นั้นเป็นจุดที่ดีและค่อนข้างเกี่ยวข้องกับตัวอย่างนี้: สิ่งที่ OP ใช้จริง ๆ คือแอปพลิเคชันบางส่วน หลายคน (ทุกคนไม่แน่ใจ) ใช้ฟังก์ชั่นที่จะถูกส่งกลับสามารถดูแทนแอปพลิเคชันบางส่วน @ nickf: นี่เป็นวิธีที่สะอาดกว่าในการใช้ตัวอย่างของคุณ

คำตอบ:


14

ไม่ฉันไม่คิดว่าคุณจะต้องมีแบบแผนการตั้งชื่อพิเศษเพื่อระบุว่าคุณกำลังส่งคืนฟังก์ชัน เราจะเห็นได้จากภาษาที่ฟังก์ชั่นแกงกะหรี่กลับฟังก์ชั่นเป็นหลักเช่นเดียวกับที่มีฟังก์ชั่นที่มีการขัดแย้งหลาย เช่นมีความแตกต่างเล็กน้อยระหว่างonlyDivisibleBy(3)(6)และonlyDivisibleBy(3,6)

ฉันจะเปลี่ยนชื่อจากonlyDivisibleByไปisDivisibleByแต่ที่ผมคิดว่าisเป็นวิธีที่ใช้กันมากขึ้นที่จะบ่งบอกถึงกริยาและonlyDivisibleBy(3)(6)น่าแปลกที่จะกลับมาtrueให้ที่ 6 ได้อย่างชัดเจนนอกจากนี้ยังมีหารด้วย 2


5

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

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


4

ไม่และคุณไม่ควรใช้งานใด ๆ

ทำไม?

เพราะเห็นว่าจะเป็นชนิดของสัญกรณ์ฮังการี แนวคิดก็คือฟังก์ชั่นที่ส่งผ่านไปยังฟังก์ชั่นการสั่งซื้อที่สูงขึ้นเป็นเพียงตัวแปรชนิดหนึ่ง ดังนั้นปฏิบัติต่อพวกเขาเช่นนั้น


1
ความหมายที่ว่าจะต้องหลีกเลี่ยงค่าใช้จ่ายทั้งหมดสัญกรณ์ฮังการี? ฉันขอแนะนำให้อ่านMaking Wrong Code Look Wrong
TehShrike

4
ผมเคยอ่านว่าก่อนและผมยังคงเชื่อว่าโน้ตฮังการีไม่ดี :)
Wilbert

@TehShrike ลิงก์ของคุณเสีย
corvus_192

1
@ corvus_192 ต้องแพ้ในการออกแบบบล็อกของ Joel! URL ใหม่ดูเหมือนจะเป็นjoelonsoftware.com/2005/05/11/making-wrong-code-look-wrong
TehShrike
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.