ใช้รุ่นพารามิเตอร์ให้
- ข้อมูลเพิ่มเติมให้กับผู้ใช้ฟังก์ชั่น
- จำกัด จำนวนของโปรแกรมที่คุณสามารถเขียนได้ (ตรวจสอบบั๊กฟรี)
เป็นตัวอย่างแบบสุ่มสมมติว่าเรามีวิธีที่คำนวณรากของสมการกำลังสอง
int solve(int a, int b, int c) {
// My 7th grade math teacher is laughing somewhere
}
แล้วคุณต้องการให้มันทำงานกับจำนวนอื่น ๆ ที่คล้าย ๆint
กัน คุณสามารถเขียนสิ่งที่ชอบ
Num solve(Num a, Num b, Num c){
...
}
ปัญหาคือสิ่งนี้ไม่ได้บอกสิ่งที่คุณต้องการ มันบอกว่า
ให้ 3 สิ่งที่มีจำนวนเหมือนกัน (ไม่จำเป็นต้องเหมือนกัน) และฉันจะให้คุณกลับจำนวน
เราไม่สามารถทำอะไรเช่นint sol = solve(a, b, c)
ถ้าa
, b
และc
เป็นint
เพราะเราไม่ทราบว่าวิธีการที่จะไปกลับint
ในที่สุด! สิ่งนี้นำไปสู่การเต้นที่น่าอึดอัดใจบางอย่างกับการทำให้เศร้าใจและอธิษฐานหากเราต้องการใช้วิธีแก้ปัญหาในการแสดงออกที่ใหญ่ขึ้น
ภายในฟังก์ชั่นบางคนอาจมอบทุ่นให้เราเป็นใหญ่และองศาและเราจะต้องเพิ่มและคูณพวกเขาเข้าด้วยกัน เราต้องการที่จะปฏิเสธสิ่งนี้เนื่องจากการดำเนินการระหว่าง 3 คลาสนี้จะเป็นการพูดพล่อยๆ องศาคือ mod 360 ดังนั้นมันจะไม่เป็นอย่างนั้นa.plus(b) = b.plus(a)
และจะมีความฮือฮาที่คล้ายกันเกิดขึ้น
ถ้าเราใช้พารามิเตอร์หลากหลายรูปแบบกับการพิมพ์ย่อยเราสามารถแยกแยะสิ่งนี้ออกได้เพราะประเภทของเราบอกว่าจริง ๆ แล้วเราหมายถึงอะไร
<T : Num> T solve(T a, T b, T c)
หรือในคำว่า "ถ้าคุณให้ฉันแบบซึ่งเป็นตัวเลขบางอย่างฉันสามารถแก้สมการด้วยสัมประสิทธิ์เหล่านั้น"
เรื่องนี้เกิดขึ้นในหลาย ๆ ที่เช่นกัน แหล่งที่ดีอีกประการหนึ่งของตัวอย่างฟังก์ชั่นที่เป็นนามธรรมมากกว่าการจัดเรียงของตู้คอนเทนเนอร์, Ala บางreverse
, sort
, map
ฯลฯ