Tên của 'spec' của hàm / phương thức là gì?


21

Tôi khá chắc chắn có một tên đặc biệt cho 'spec' của một hàm / phương thức. Đó là một từ để chỉ

  • phải mất bao nhiêu đối số
  • thứ tự của các đối số
  • đối số nào là tùy chọn

Có một cái tên cho điều đó?


2
Có một vài loại "thông số kỹ thuật" khác nhau. Bạn đề cập đến loại đối số, thứ tự, và sự cần thiết. Được kết hợp với kiểu trả về, đó được gọi là chữ ký loại. Bạn có xem xét tên của phần chức năng của spec không? Làm thế nào về không gian tên của nó, như lớp, gói, mô-đun, vv? Đây là thông số kỹ thuật cho các lập trình viên hoặc máy móc? Xem câu trả lời của tôi.
kdbanman

4
Tôi cho rằng câu hỏi này có bốn phiếu gần - đó là một câu hỏi hoàn toàn hợp pháp IMHO và hoàn toàn có thể trả lời được (thực tế, nó đã được trả lời rồi).
sleske

@callum, vui lòng chỉnh sửa câu hỏi của bạn để ít mơ hồ hơn để có thể không bị lỗi. Bạn có quan tâm đến một ngôn ngữ cụ thể? Một thông số kỹ thuật máy hoặc một thông số lập trình viên? Một spec để gọi hoặc một spec để thực hiện?
kdbanman

1
@kdbanman Tôi chỉ cố nhớ từ "chữ ký". Nó không mơ hồ. Nó không phải là ngôn ngữ cụ thể. Nó đã được trả lời. Ổn mà.
callum

@callum, đó là những gì tôi nghĩ. Cảm ơn bạn đã trả lời.
kdbanman

Câu trả lời:


47

Thông thường điều này được gọi là một chữ ký loại .

Chữ ký loại bao gồm loại trả về của hàm, số lượng đối số, loại đối số hoặc lỗi mà nó có thể truyền lại.


6
Thông thường? Tôi đã quen với "nguyên mẫu". Đó rõ ràng là chữ ký loại cộng với tên - en.wikipedia.org/wiki/Function_prototype
ShadSterling

14
@Polyergic, chữ ký chung chung hơn nguyên mẫu (và chính xác hơn trong trường hợp này): một nguyên mẫu tuyên bố chữ ký. Cụ thể, "nguyên mẫu" ngụ ý khai báo mà không thực hiện, như trong khai báo phương thức Java hoặc C # trong một interfacehoặc khai báo hàm C / C ++ trong tệp tiêu đề (được gọi là a prototype).
kdbanman

12
Ngoài ra, arity là một thuật ngữ ít được sử dụng cho chỉ số lượng đối số.
Sebi

^ Ồ, đó là một điều thú vị! Tôi sẽ phải nhớ rằng khi tôi học hỏi về JS, vì tôi chỉ có số lượng đối số để hướng dẫn cho tôi chứ không phải các loại.
gạch dưới

23

TL; DR Có lẽ bạn đang nói về chữ ký hàm (hoặc chữ ký phương thức), một phần trong đó là chữ ký loại.

Nhưng thực sự phụ thuộc vào những gì bạn coi là một chức năng "spec". Tôi hiểu nó là "tất cả thông tin cần thiết cho một lập trình viên để gọi một hàm". Điều này bao gồm tên hàm, loại tham số, thứ tự và sự cần thiết, có thể là kiểu trả về và thậm chí có thể là không gian tên của hàm đó.

Nhưng liệu tất cả những thứ đó có được yêu cầu (hoặc thậm chí được xác định rõ hay không) tùy thuộc vào ngôn ngữ / môi trường bạn đang sử dụng. Ngoài ra, nếu bạn thay đổi định nghĩa thành "tất cả thông tin cần thiết cho một máy để gọi chức năng", thông số kỹ thuật có thể khác 1 .

Nói một cách chính xác, chữ ký hàm (hoặc phương thức) không phải là một thuật ngữ nhất quán, 2, 3 ngay cả trong cùng một ngôn ngữ. 4, 5, 6, 7 Nhưng gần như chắc chắn đó là từ bạn đang tìm kiếm, bởi vì nó sẽ được hầu hết mọi lập trình viên hiểu.


  1. C ++ Spec Draft n337, định nghĩa 1.3.17, chữ ký không bao gồm kiểu trả về, vì không cần thiết phải giải quyết hàm.

  1. "chữ ký" không bao gồm thông tin không gian tên
  2. "chữ ký" bao gồm trường hợp ngoại lệ và bổ như public, static, vv

  1. "Chữ ký" C ++ không bao gồm loại trả về
  2. C ++ "chữ ký" làm bao gồm kiểu trả về.
  3. "Chữ ký" C ++ không bao gồm loại trả về, trừ khi chức năng là chuyên môn hóa của một mẫu.
  4. "Chữ ký" C ++ bao gồm thông tin không gian tên (phạm vi) và các thứ "linh tinh khác" ...


Tôi cũng sẽ bao gồm ít nhất những gì phương thức làm khi nói về "thông số kỹ thuật" của nó. Tùy thuộc vào trọng tâm của ngày tôi có thể hoặc không bao gồm bất kỳ thông tin bổ sung nào là cần thiết để thực hiện phương pháp.
một CVn

@ MichaelKjorling, đó là những mối quan tâm hợp lệ, nhưng đó là những lạc đề khá quan trọng từ những gì hầu hết các lập trình viên sẽ gọi là "chữ ký". Những gì hàm nên được bao gồm trong tên hàm, vì vậy nó là một phần gián tiếp của chữ ký. Bất kể, tôi không nghĩ hành vi chức năng hoặc thực hiện là những gì người hỏi dự định. Tôi sẽ chỉnh sửa cho phù hợp nếu nó bật ra.
kdbanman

Chữ ký có, "thông số" không. (FWIW, tôi nghĩ rằng câu trả lời của bạn khá hay và được trích dẫn tốt.)
một CVn

Cảm ơn vì bạn đã phản hồi. Tôi không nghĩ câu trả lời khá rõ ràng là "'spec' không". Nó phụ thuộc vào ý nghĩa của thông số kỹ thuật - người ta chắc chắn có thể đưa ra một định nghĩa hợp lý về thông số kỹ thuật bao gồm hành vi chức năng và hướng dẫn thực hiện. Bạn được chào đón để làm điều đó trong câu trả lời của riêng bạn. Nhưng như tôi đã nói, tôi không nghĩ đó là những gì người hỏi dự định.
kdbanman

1
Được nêu lên bởi vì, mặc dù không language-agnostic, các ví dụ C ++ có liên quan đến tôi và (B) minh họa cho sự nhầm lẫn thường bao quanh thuật ngữ của con người
underscore_d

0

Tôi tin rằng thuật ngữ này là "hợp đồng". Nó xác định giao diện và những gì mong đợi của người gọi và callee; tuy nhiên, nó cũng bao gồm những thứ như giá trị được phép của các tham số không phải là thứ mà nhiều ngôn ngữ cho phép được định nghĩa bởi hàm hoặc định nghĩa lớp, vì vậy thuật ngữ "hợp đồng" có thể có nghĩa rộng hơn nghĩa của bạn. Tôi đã thấy nó trong một số sách lập trình cụ thể và hướng đối tượng Java. Tôi không chắc nó có cụ thể về Java hay không nhưng tôi không hiểu tại sao nó lại cần phải như vậy. Chữ ký là thuật ngữ thường được sử dụng khác nhưng tôi đã thích "hợp đồng".


Đây là câu trả lời tốt nhất nếu câu hỏi thực sự là tên của "spec" của hàm / phương thức. Bản thân chữ ký không cho biết bất cứ điều gì về phương thức thực sự làm, phạm vi cho phép của các tham số, các điều kiện không liên quan đến chức năng, v.v ...
ch7kor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.