it-swarm-eu.dev

Metoda vs. funkce vs. postup

Jednoduchá otázka, ale často slyším tyto tři termíny definované s takovou divokostí, které mi však v průběhu let byly známé.

Jaké jsou „správné“ definice „procedur“, „metod“, „funkce“, „podprogramů“ atd.?

113
Django Reinhardt

Jdu s jinou odpovědí zde: prakticky, není tam opravdu žádný rozdíl, s malou výjimkou, že "metoda" obvykle odkazuje na podprogram spojený s objekt v OO jazycích).

Pojmy „procedura, funkce, podprogram, podprogram a metoda“ ve skutečnosti znamenají totéž: podpůrný podprogram v rámci většího programu. Je však těžké přijít s definicí, která zachycuje všechny varianty použití těchto termínů, protože nejsou používána konzistentně napříč programovacími jazyky nebo paradigmy.

Dalo by se říci, že funkce vrací hodnotu. Následující funkce C nevrací hodnotu:

void f() { return; }

... ale pochybuji, že byste našli někoho, kdo by to nazval procedurou.

Jistě, v Pascalu procedury nevracejí hodnoty a funkce vracejí hodnoty, ale to je pouze odraz toho, jak byl Pascal navržen. Ve Fortranu funkce vrací hodnotu a podprogram vrací více hodnot. Nic z toho nám však neumožňuje vymyslet „univerzální“ definici těchto pojmů.

Ve skutečnosti, termín “procedurální programování” se odkazuje na celou třídu jazyků, včetně C, Fortran a Pascal, jen jeden který který vlastně používá termín “procedura” znamenat něco.

Takže nic z toho není opravdu konzistentní. Jedinou výjimkou je pravděpodobně "metoda", která se zdá být používána téměř výhradně s OO jazyky, odkazující na funkci, která je spojena s objektem. I když to není vždy konzistentní. C++ , například, obvykle používá termín “členské funkce” spíše než metoda, (ačkoli termín “metoda” se vplížil do C++ lidové mezi programátory.)

Jde o to, že nic z toho není skutečně konzistentní. Jednoduše odráží terminologii používanou v jakémkoli jazyce, který je v té době v módě.

109
Charles Salvia

funkce vrátí hodnotu, ale procedura ne.

metoda je podobná funkci, ale je vnitřní součást třídy. Termín metoda se používá téměř výhradně v objektově orientovaném programování.

69
Bruce Alderman

funkce je něco, co bere spoustu vstupů a vrací jednu nebo více hodnot. Pokud jsou vrácené hodnoty zcela určeny vstupy a funkce nemá žádné vedlejší účinky (protokolování, možná nebo způsobující změny stavu mimo sebe), pak se to nazývá čistá funkce.

procedura je funkce, která nevrací hodnotu. Zejména to znamená, že postup může způsobit pouze vedlejší účinky. (To může zahrnovat mutaci vstupního parametru!)

metoda je funkce, která uzavírá sadu proměnných, tj. zavření. Trvá nula nebo více vstupních parametrů, má přístup k této sadě proměnných a vrací nulu nebo více hodnot. V OO jazycích) jsou tyto metody připojeny k objektům nebo třídám.

Ve většině mainstreamových jazyků OO=) se tyto uzavřené proměnné nazývají členské pole nebo proměnné instance objektu. Metodou může být čistá funkce, nečistá funkce nebo procedura.

Druhá definice vede k object = struct + uzavření korespondenci.

53
Frank Shearar

Bruce má dobrá odpověď . Sémanticky bych dodal:

  • Procedura by měla s argumenty „něco udělat“ nebo způsobit další vedlejší účinek (např. printf)
  • Funkce by měla (a) odpovědět na otázku o argumentech, nebo (b) vypočítat novou hodnotu na základě argumentů
  • Funkční metoda by měla odpovědět na otázku o stavu objektu
  • Metoda procedury by měla změnit stav objektu
14
Scott Whitlock

výše uvedené podrobné odpovědi; povídka je, že budou mít všechny chutě podprogramů; co se myslí pod každým pojmem, se bude lišit podle kontextu programovacího jazyka

obecně platí, že funkce vrací hodnotu, ale nemusí

metody jsou obecný OOP podmínky v současnosti

v SQL mají uložené procedury výstupy, ale obvykle pouze vracejí chybový kód, zatímco uživatelem definované funkce musí vracet hodnotu (což může být sada výsledků)

přesný rozdíl mezi těmito podmínkami opět závisí na tom, s kým mluvíte!

4
Steven A. Lowe

80% znalostí přímo souvisí s obeznámením s nomenklaturou,

95% produktivity je schopnost identifikovat to, co je v tuto chvíli užitečné, a to i přes výrazy použité k jeho popisu

Docela raději jim říkám všechny metody v c # kromě toho, že když jsem použil MSSQL, měli jsme sproc's, ale samozřejmě nyní používáme Postgres a nazývají se funkcemi.

2
MvcCmsJon