Apa nama untuk 'spesifikasi' fungsi / metode?


21

Saya cukup yakin ada nama khusus untuk 'spek' fungsi / metode. Itu kata yang merujuk

  • berapa banyak argumen yang dibutuhkan
  • urutan argumen
  • argumen mana yang opsional

Apakah ada nama untuk itu?


2
Ada beberapa jenis "spesifikasi". Anda menyebutkan jenis argumen, urutan, dan kebutuhan. Diambil bersama-sama dengan tipe kembali, itu disebut tipe tanda tangan. Apakah Anda menganggap nama bagian fungsi dari spesifikasi? Bagaimana dengan namespace, seperti kelas, paket, modul, dll? Apakah spesifikasi ini untuk programmer atau mesin? Lihat jawaban saya.
kdbanman

4
Saya terkejut pertanyaan ini memiliki empat suara dekat - itu adalah IMHO pertanyaan yang sangat sah, dan cukup dijawab (pada kenyataannya, sudah dijawab sudah).
sleske

@cum, harap edit pertanyaan Anda agar tidak terlalu rancu sehingga tidak dapat dibatalkan. Apakah Anda peduli dengan bahasa tertentu? Spesifikasi mesin atau spesifikasi programmer? Spesifikasi untuk menelepon atau spesifikasi untuk implementasi?
kdbanman

1
@kdbanman Saya hanya mencoba mengingat kata "tanda tangan". Itu tidak ambigu. Itu tidak spesifik bahasa. Sudah dijawab. Tidak apa-apa.
callum

@cum, itulah yang saya pikirkan. Terima kasih atas balasannya.
kdbanman

Jawaban:


47

Biasanya ini disebut tipe tanda tangan .

Tipe tanda tangan termasuk tipe pengembalian fungsi, jumlah argumen, tipe argumen, atau kesalahan yang mungkin ditimbulkannya kembali.


6
Biasanya? Saya sudah terbiasa dengan "prototipe". Yang ternyata adalah tipe tanda tangan plus namanya - en.wikipedia.org/wiki/Function_prototype
ShadSterling

14
@Polyergic, tanda tangan lebih umum daripada prototipe (dan lebih tepat dalam hal ini): prototipe menyatakan tanda tangan. Secara khusus, "prototipe" menyiratkan deklarasi tanpa implementasi, seperti dalam deklarasi metode Java atau C # dalam interface, atau deklarasi fungsi C / C ++ dalam file header (secara harfiah disebut a prototype).
kdbanman

12
Juga, arity adalah istilah yang kurang umum digunakan untuk hanya sejumlah argumen.
Sebi

^ Ooh, itu yang menarik! Saya harus ingat bahwa ketika saya mencoba-coba di JS, karena saya hanya punya argumen yang cukup untuk membimbing saya, bukan tipe.
underscore_d

23

TL; DR Anda mungkin berbicara tentang tanda tangan fungsi (atau tanda tangan metode), yang sebagian adalah tanda tangan jenis.

Tetapi benar-benar tergantung pada apa yang Anda anggap fungsi "spec". Saya menafsirkannya sebagai "semua informasi yang diperlukan untuk seorang programmer untuk memanggil suatu fungsi". Ini termasuk nama fungsi, tipe parameter, urutan, dan keperluan, mungkin tipe pengembalian, dan mungkin bahkan namespace fungsi itu.

Tetapi apakah semua hal itu diperlukan (atau bahkan didefinisikan dengan baik) tergantung pada bahasa / lingkungan yang Anda gunakan. Juga, jika Anda mengubah definisi menjadi "semua informasi yang diperlukan mesin untuk memanggil suatu fungsi", spesifikasi kemungkinan berbeda 1 .

Sebenarnya, fungsi (atau metode) tanda tangan bukan istilah yang konsisten, 2, 3 bahkan dalam bahasa yang sama. 4, 5, 6, 7 Tapi itu hampir pasti kata yang Anda cari, karena itu akan dipahami oleh hampir semua programmer.


  1. C ++ Spec Draft n337, definisi 1.3.17, tanda tangan tidak termasuk tipe pengembalian, karena tidak perlu menyelesaikan fungsi.

  1. "tanda tangan" tidak termasuk informasi namespace
  2. "tanda tangan" termasuk pengecualian dan pengubah seperti public, static, dll

  1. C ++ "tanda tangan" tidak termasuk tipe pengembalian
  2. C ++ "tanda tangan" melakukan termasuk jenis kembali.
  3. C ++ "tanda tangan" tidak termasuk jenis kembali, kecuali fungsinya adalah spesialisasi dari suatu templat.
  4. C ++ "tanda tangan" termasuk informasi namespace (ruang lingkup) dan hal-hal "lainnya" ...


Saya akan memasukkan juga setidaknya apa yang dilakukan metode ketika berbicara tentang "spec" nya. Bergantung pada fokus hari itu saya mungkin atau mungkin tidak menyertakan informasi tambahan apa pun yang diperlukan untuk menerapkan metode ini.
CVn

@ MichaelKjörling, itu adalah kekhawatiran yang sahih, tetapi itu adalah penyimpangan yang cukup signifikan dari apa yang oleh kebanyakan programmer disebut sebagai "tanda tangan". Apa fungsi yang harus dimasukkan dalam nama fungsi, sehingga secara tidak langsung merupakan bagian dari tanda tangan. Bagaimanapun juga, saya tidak berpikir perilaku fungsi atau implementasi adalah apa yang dimaksudkan oleh si penanya. Saya akan mengedit sesuai jika ternyata dia melakukannya.
kdbanman

Tanda tangan ya, "spec" tidak. (FWIW, saya pikir jawaban Anda cukup baik, dan dikutip dengan baik.)
CVn

Terima kasih untuk umpan baliknya. Saya tidak berpikir jawabannya cukup jelas dipotong sebagai "'spec' no". Itu tergantung pada apa yang dimaksud dengan spec - orang tentu bisa datang dengan definisi spesifikasi yang masuk akal yang mencakup perilaku fungsi dan pedoman implementasi. Anda dapat melakukannya dengan jawaban Anda sendiri. Tapi seperti yang saya katakan, saya tidak berpikir itu yang dimaksudkan si penanya.
kdbanman

1
Terpilih karena, meskipun tidak language-agnostic, contoh-contoh C ++ (A) relevan bagi saya dan (B) menggambarkan kebingungan yang begitu sering mengelilingi terminologi manusia
underscore_d

0

Saya percaya istilahnya adalah "kontrak". Ini mendefinisikan antarmuka dan apa yang diharapkan dari penelepon dan callee; namun juga mencakup hal-hal seperti nilai parameter yang diperbolehkan yang bukan sesuatu yang banyak bahasa izinkan untuk didefinisikan oleh fungsi atau definisi kelas, sehingga istilah "kontrak" mungkin lebih luas artinya daripada yang Anda maksudkan. Saya telah melihatnya di beberapa buku pemrograman berorientasi objek dan Java tertentu. Saya tidak yakin apakah itu khusus Java tetapi saya tidak mengerti mengapa itu perlu. Tanda tangan adalah istilah lain yang umum digunakan tetapi saya mulai menyukai "kontrak".


Ini adalah jawaban terbaik jika pertanyaan benar-benar nama untuk "spek" dari fungsi / metode. Tanda tangan itu sendiri tidak memberi tahu apa-apa tentang apa yang sebenarnya dilakukan metode ini, memungkinkan rentang parameter,
hambatan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.