Bir işlevin / yöntemin 'spec' adı nedir?


21

Bir işlevin / yöntemin 'özelliği' için özel bir ad olduğundan eminim. Bu ifade eden bir kelime

  • kaç argüman alıyor
  • argümanlar sırası
  • hangi argümanlar isteğe bağlıdır

Bunun için bir isim var mı?


2
Birkaç çeşit "özellik" vardır. Argüman türünden, düzeninden ve gerekliliğinden bahsediyorsunuz. Dönüş türü ile birlikte alındığında, buna bir tür imza denir. Spesifikasyonun fonksiyon kısmının adını düşünüyor musunuz? Sınıf, paket, modül gibi ad alanlarına ne dersiniz? Bu programcılar veya makineler için mi? Cevabımı gör.
kdbanman

4
Bu sorunun dört yakın oyu olduğuna şaşırdım - bu tamamen meşru bir soru IMHO, ve oldukça cevaplandı (aslında, çoktan cevaplandı).
sleske

@callum, lütfen sorunuzu daha az belirsiz olması için düzenleyin; Belirli bir dille ilgileniyor musunuz? Bir makine belirtimi mi yoksa bir programcı belirtimi mi? Arama için bir özellik mi yoksa uygulama için bir özellik mi?
kdbanman

1
@kdbanman Sadece "imza" kelimesini hatırlamaya çalışıyordum. Belirsiz değil. Dile özgü değil. Cevaplandı. Tamam.
callum

@callum, öyle düşündüm. Cevabınız için teşekkürler.
kdbanman

Yanıtlar:


47

Genellikle buna bir tür imza denir .

Bir tür imzası, fonksiyonun geri dönüş türünü, argüman sayısını, argüman türlerini veya geri alabileceği hataları içerir.


6
Genellikle? "Prototip" e alışkınım. Görünüşe göre türü imza artı adı - en.wikipedia.org/wiki/Function_prototype
ShadSterling 22:15

14
@Polerjik, imza prototipten daha genel (ve bu durumda daha doğrudur): prototip imza ilan eder . Spesifik olarak, "prototip", bir Java veya C # yöntemi bildirgesinde interfaceveya bir başlık dosyasında (tam anlamıyla a olarak adlandırılır prototype) bir C / C ++ işlev bildirgesinde olduğu gibi, uygulama olmadan bildirimi belirtir .
kdbanman

12
Ayrıca, arity sadece argüman sayısı için daha az kullanılan bir terimdir.
Sebi

^ Ooh, bu ilginç bir tane! Bunu JS ile cüret ettiğimde hatırlıyorum, çünkü sadece bana rehberlik edecek sayımlar var, türler değil.
underscore_d

23

TL; DR Muhtemelen bir kısmı tip imzası olan bir fonksiyon imzasından (veya yöntem imzasından) bahsediyorsunuzdur .

Ama gerçekten bir işlev "spec" olarak düşündüğünüz şeylere bağlıdır. Bunu, "bir programcının bir fonksiyonu çağırması için gereken tüm bilgiler" olarak yorumluyorum. Bu, fonksiyon ismini, parametre tipini, sırayı ve gerekliliği, muhtemelen dönüş tipini ve muhtemelen bu fonksiyonun isim alanını içerir.

Ancak tüm bunların gerekli olup olmadığı (hatta iyi tanımlanmış olması) kullandığınız dile / ortama bağlıdır. Eğer "a için gerekli tüm bilgilere tanımını değiştirmek Ayrıca, makinenin bir işlevi çağırmak için", Spec olasılıkla farklıdır 1 .

Açıkçası, bir işlev (veya yöntem) imzası aynı dilde bile tutarlı bir terim, 2, 3 değildir . 4, 5, 6, 7 Ama bu kesinlikle aradığınız kelime, çünkü neredeyse her programcı tarafından anlaşılacak.


  1. C ++ Spec Taslak n337, tanım 1.3.17, imza, dönüş türünü içermez, çünkü işlevi çözmek gerekli değildir.

  1. "imza", ad alanı bilgisi içermiyor
  2. "imza" gibi istisnalar ve düzenleyici maddeleri kapsamaktadır public, staticvb

  1. C ++ "imzalar" iade türünü içermez
  2. C ++ "imzalar" do dönüş türü bulunmaktadır.
  3. C ++ "imzalar", fonksiyon bir şablonun uzmanlığı olmadığı sürece return tipini içermez.
  4. C ++ "imzalar", ad alanı (kapsam) bilgisi ve "diğer çeşitli" öğeleri içerir ...


Ayrıca en azından "spec" hakkında konuşurken yöntemin ne yaptığını da eklerdim. Günün odağına bağlı olarak , yöntemi uygulamak için gerekli olan her türlü bilgiyi içerebilir veya içermeyebilir veya içermeyebilirim .
bir CVn

@ MichaelKjörling, bunlar geçerli kaygılar, ancak bunlar çoğu programcının "imza" olarak adlandırdığı şeyden oldukça önemli bir bölüm. İşlevin yaptığı şey işlev adına dahil edilmelidir, bu nedenle dolaylı olarak imzanın bir parçasıdır. Ne olursa olsun, fonksiyon davranışının veya uygulamasının, asıl amacın ne olduğunu sanmıyorum. Yaptığı ortaya çıkarsa buna göre düzenleyeceğim.
kdbanman

İmza evet, "spec" hayır. (FWIW, cevabın oldukça iyi ve iyi alıntı olduğunu düşünüyorum.)
Özgeçmiş

Geri dönüşünüz için teşekkür ederiz. Cevabın "'spec' hayır" kadar açık bir kesim olduğunu sanmıyorum. Spesifik olarak neyin kastedildiğine bağlıdır - kesinlikle, davranış davranışı ve uygulama kılavuzlarını içeren makul bir şartname tanımı ortaya çıkmış olabilir. Bunu kendi cevabınızla yapabilirsiniz. Ama dediğim gibi, askerin istediği şeyin bu olduğunu sanmıyorum.
kdbanman

1
Upvoted çünkü olmasa language-agnostic, C ++ örnekleri sık sık insan terminolojiyi çevreleyen o karışıklık açıklayıcı (A) beni ve (B) alakalı
underscore_d

0

Terimin "sözleşme" olduğuna inanıyorum. Arayüzü ve arayan ve callee'den beklenenleri tanımlar; bununla birlikte, birçok dilin işlev veya sınıf tanımı ile tanımlanmasına izin vermeyen bir şey olan parametrelerin izin verilen değerleri gibi şeyleri de kapsar, bu nedenle "sözleşme" terimi, kastettiğinizden daha geniş olabilir. Birkaç nesne yönelimli ve Java'ya özgü programlama kitaplarında gördüm. Java'ya özgü olup olmadığından emin değilim ancak neden olması gerektiğini bilmiyorum. İmza, yaygın olarak kullanılan diğer terimdir, ancak "sözleşmeyi" sevdim.


Eğer soru gerçekten fonksiyon / yöntemin "spec" ismi ise, bu en iyi cevaptır. İmza, metodun gerçekte ne yaptığı, parametrelerin izin verilmediği, fonksiyonel olmayan
çelişkiler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.