Terimlerin Özel Anlamları Nelerdir: İşlevler, Yöntemler, Prosedürler ve Altyordamlar?


11

Kodun ilgili bölümlerini gruplandırmak için kullandığımız terminolojideki belirli farklılıkların neler olduğunu merak ediyorum. Bazen birbirinin yerine kullanılan terimleri gördüm: birçok OO dili bile bir yöntemi tanımlamak için "işlev" anahtar sözcüğünü kullanır. (Neden?)

Kesin olmak istiyorsanız, her birinin özel anlamları nelerdir? Yoksa sadece her dil onu seçmeyi seçti mi?


functionYöntemler için kullandığım tek iki dil JavaScript ve PHP'dir. Her ikisi de yöntem dışı (ücretsiz işlevler) için aynı anahtar kelimeyi kullanır ve JavaScript söz konusu olduğunda, işlevler ve yöntemler arasında en azından dil düzeyinde gerçekten bir ayrım yoktur.

Örnekler: VB.Net içinde Suba, Functionbir dönüş değeri yoktur. İçinde Pythonherhangi bir sınıfın parçası olmayan bir işlev olabilir, bu yüzden bir yöntem değildir. Ayrıca işlevler içindeki işlevleri bildirebilir ve bunu C # ile de yapabilirsiniz. Bazen elmalar ve ananaslarla aynı nedenden dolayı farklı isimler vardır: çünkü farklıdırlar.
Job

Şimdiye kadar bir tutarsızlık olduğunu düşündüren ne buldunuz?
JeffO

Yanıtlar:


20
  • alt program, alt program
    "alt program" muhtemelen montaj dilinden gelir. Bazı işlemciler, kodu organize etmenin ve ortak kod bölümlerini yeniden kullanmanın bir yolu olarak altyordamları destekleme talimatları içerir. Örneğin, 6502 işlemcinin JSR (altyordamına atla) ve RTS (altyordamdan dönüş) talimatları vardı. Bir programın bazen alt rutinler veya alt programlar olarak adlandırılan kod birimleri hiyerarşisi olduğu yapılandırılmış programlamada da çok kullanıldığını hatırlıyorum. IMO, bunlar, belirli bir görevi tamamlamak için kontrolün geçici olarak aktarıldığı bazı kod birimi için en genel terimlerdir.

  • işlev, prosedür
    Bunlar genellikle birbirlerinin yerine kullanılır, ancak bazı dillerde bir ayrım vardır. Pascal'da bir işlev, bir değer döndüren bir alt programdır, bir prosedür ise olmayan bir alt programdır. C ve ilgili dillerde, her alt programın bir dönüş türü vardır (olsa bile void), bu yüzden bir ayrım yoktur.

  • yöntem, üye işlevi
    Bunlar aynı şey için iki addır - esas olarak belirli bir sınıf veya nesne ile ilişkili bir işlev.

  • operatör
    Her dilde bir dizi yerleşik operatör vardır. C ++ gibi bazı dillerde, işleçler geçersiz kılınabilen (yani değiştirilebilen) ve / veya aşırı yüklenebilen (yani yeni türler için tanımlanabilir) işlevlerdir.

  • anonim işlev
    Bu, adı olmayan bir işlevi belirtir. Anonim işlevler aslında değişkenlere atanabilen veya sonraki kullanım için parametre olarak, örneğin bir tamamlama rutini olarak iletilebilen kod bloklarıdır.

  • closure, lambda expression, block
    Bir kapatma, bir dizi değişkene bağlı olan bir kod dizisidir. Kapakları anonim işlevler ve bağlam olarak düşünüyorum.


4
Tüm diller yerleşik işleçlerle birlikte verilmez. Şema ve Haskell gibi bazıları, '+' veya '>> =' gibi adlara sahip işlevleri tanımlamanıza izin verir. Ayrıca, bazı dillerde (Şema gibi), "işlev" in yordam şeffaflığı gerektirdiğini (örneğin, yan etkisi olmayan aynı giriş için her zaman aynı değeri döndürdüğünü) eklemelisiniz. Aksi takdirde, harika bir cevap.
Tikhon Jelvis

Şimdiye kadar "operatörlerin" çoğunlukla 2 argümanlı fonksiyonlar için kullanıldığını hatırlayabiliyorum. Bunlar infix'ti (argümanlar arasında operatör:) 2 + 2. 1-arg gibi ++arg(prefix) veya arg++(postfix) gibi küçük istisnalar vardır . Rağmen, pek çok postfix operatör görmedim ..
Darek Nędza

-1

Bu dillere, onlarla neler yapabileceğinize bağlıdır

  • bir ayrıma ihtiyacın var mı
  • sözdiziminde bir ayrım var mı, yoksa kod hakkında konuşurken kolaylık mı var?

AFAIK, Basic'te, hiçbir şey döndürmeyen, ancak yazdırma, dosyaya yazma veya genel bir değişkeni değiştirme gibi yan etkileri olan bir iş gerçekleştirirseniz, buna bir prosedür denirdi.

Bir şey döndürürse, buna işlev denirdi.

Java gibi bir OOP Dili'nde nadiren 'işlev', ancak 'yöntem' terimiyle tanıştım ve işlevlerin küresel olan ve herkes tarafından çağrılabilecek şeyler olduğu öğretildi.

İşlevsel ve OOP dili skalasında, bir yönteme işlev adı verilmez, ancak böyle bir şeyi başka bir yönteme geçirebilirsiniz ve sonra bir işlev haline gelir.

Bir altyordam benim anlayışım için başka bir rutin tarafından çağrılan bir rutindir.

Özetle, tüm diller üzerinde özlü bir tanım ve daha fazla paradigma olduğunu düşünmüyorum. Bu terimleri kullanırsanız, belirli bir kültürü düşünmelisiniz, belki de önce tanımınızı sunmalısınız.


-1

Bağlama bağlı olarak, tüm bu sözlerin aynı şey veya çılgınca farklı şeyler anlamına gelebileceğini söyleyebilirim, örneğin Caleb'in yazdıkları (ancak daha fazlası, yani operatörlerin birinci sınıf işlevler olduğu diller vb.). Bu nedenle, belirli bir tanım vermek zordur ve bağlam (programlama dili) bilinmediği sürece çok fazla varsaymamak akıllıca olacaktır.

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.