Jaka jest różnica między metodą a funkcją?


1739

Czy ktoś może podać proste wyjaśnienie metod vs. funkcji w kontekście OOP?



12
Gdy wartość właściwości jest funkcją, nazywamy ją metodą
koder

2
Co jest przeciwieństwem metody? To jest moje pytanie. „Funkcja” jest pojęciem nadrzędnym. Metoda jest rodzajem funkcji. Jaka jest nazwa typu funkcji, która nie jest metodą, ale którą można wywołać bezpośrednio według nazwy?
Alexander Mills,

Byłoby interesujące zobaczyć inne wyjaśnienie przedstawiające różnicę między metodami i funkcjami w r . Jest to interesujące, ponieważ metoda zwykle zawiera funkcję . Jeśli metoda jest funkcją zależną od obiektu, to sprawdzenie funkcji klasy obiektu if(class(object)) { ... } else {stop()}byłoby koncepcyjnie równoważne metodzie?
Konrad

Właściwa terminologia może naprawdę zależeć od języka, więc może oznaczać nieco inne rzeczy w różnych kontekstach. Mimo to, ponieważ programiści, którzy pracują w jednym języku w innym, są bardziej przyzwyczajeni do pewnych terminologii. Na programistów ma również wpływ to, że ich współpracownicy używają terminów (poprawnych lub niepoprawnych). Terminy te są często używane zamiennie. Zobacz na przykład niektóre komentarze poniżej.
jvriesem

Odpowiedzi:


1830

Funkcja jest kawałek kodu, który nazywa się po imieniu. Można przekazać dane do działania (tj. Parametry) i opcjonalnie zwrócić dane (wartość zwracana). Wszystkie dane przekazywane do funkcji są jawnie przekazywane.

Metoda jest kawałek kodu, który jest nazywany przez nazwę, która jest skojarzona z obiektem. Pod wieloma względami jest identyczny z funkcją, z wyjątkiem dwóch kluczowych różnic:

  1. Metoda jest domyślnie przekazywana do obiektu, na którym została wywołana.
  2. Metoda może działać na danych zawartych w klasie (pamiętając, że obiekt jest instancją klasy - klasa jest definicją, obiekt jest instancją tych danych).

(jest to uproszczone wyjaśnienie, ignorujące kwestie zakresu itp.)


249
Za 1), należy również dodać, że metody w C ++ są nazywane członków funkcje. Zatem różnica między funkcjami i metodami w tym kontekście jest analogiczna do różnicy między funkcjami a funkcjami składowymi w C ++. Ponadto języki takie jak Java mają tylko metody. W takim przypadku funkcje byłyby analogiczne do metod statycznych, a metody miałyby to samo znaczenie. W przypadku 2) należy dodać, że metoda może działać na danych instancji prywatnej (członka) zadeklarowanych jako część klasy. Każdy kod może uzyskać dostęp do danych instancji publicznej.
Raffi Khatchadourian

45
funkcja jest konstrukcją matematyczną. Powiedziałbym, że wszystkie metody są funkcjami, ale nie wszystkie funkcje są metodami
Tyler Gillies

28
Biorąc pod uwagę funkcjonalne podstawy programowania, uważam, że istnieje głęboka różnica między funkcją a metodą. Głównie metody wywołują skutki uboczne, a funkcje te powinny być czyste, a tym samym dawać raczej przyjemną właściwość przejrzystości referencyjnej
HHC

26
@TylerGillies i HHC, zgadzam się, że byłoby miło, gdyby „funkcja” i „metoda” oznaczały to, co chciałeś, ale twoje definicje nie odzwierciedlają niektórych bardzo powszechnych zastosowań tych terminów.
Paul Draper,

9
Według tej definicji metoda statyczna nie byłaby faktycznie uważana za metodę, ponieważ nie ma ona nic wspólnego z konkretną instancją?
Carcigenicate

961

Metoda jest na obiekcie.
Funkcja jest niezależna od obiektu.

W przypadku Java i C # istnieją tylko metody.
W przypadku C są tylko funkcje.

W przypadku C ++ i Python zależałoby to od tego, czy jesteś w klasie.


39
Czas dodać C #.
Rosdi Kasim

7
@RosdiKasim W języku C # istnieją tylko metody. (ponieważ nawet obiekty statyczne muszą być powiązane z obiektem)
Lynn Crumbling

38
Co powiesz na metody statyczne w klasie? Byłyby one niezależne od obiektu (w java). Czy nie byłaby to zatem funkcja?
Squeazer

12
@Squeazer Istnieje pytanie dotyczące tego niedawno stackoverflow.com/questions/30402169/... Specyfikacja języka Java różni się po prostu jako „metoda klasy” (statyczna) i „metoda instancji”. Więc nadal są to wszystkie metody.
Xji

13
Java ma wyrażenia lambda, które są funkcjami, które nie są metodami
Max Heiber

228

„metoda” to zorientowane obiektowo słowo oznaczające „funkcję” . To prawie wszystko, co tam jest (tzn. Nie ma prawdziwej różnicy).

Niestety, myślę, że wiele odpowiedzi tutaj utrwala lub rozwija pomysł, że istnieje jakaś złożona, znacząca różnica.

Naprawdę - nie ma w tym aż tyle, tylko inne słowa na to samo.

[późne dodanie]


W rzeczywistości, jak zauważył Brian Neal w komentarzu do tego pytania , standard C ++ nigdy nie używa terminu „metoda” w odniesieniu do funkcji składowych. Niektóre osoby mogą uznać to za wskazówkę, że C ++ nie jest tak naprawdę językiem obiektowym; wolę jednak traktować to jako wskazówkę, że całkiem sprytna grupa ludzi nie uważała, że ​​istnieje szczególnie silny powód, aby używać innego terminu.


14
Metoda jest specjalnym typem funkcji z przekazanym niejawnym argumentem (instancja klasy, dla której metoda jest zdefiniowana). Jest to ważne, ponieważ funkcja, ściśle mówiąc, nie powinna używać ani modyfikować niczego, co nie znajduje się na liście argumentów.
ty1824

4
@ ty1824 nie zawsze jest tak, że metody są przekazywane niejawne argumenty. W Pythonie selfargument jest jawny. I wiele języków ma metody statyczne, które nie są przekazywane instancji.
Max Heiber

1
@mheiber to niektóre ważne punkty. Jeśli chodzi o siebie, masz rację, jest to wyraźnie określone . Kluczem jest to, że wywołanie jest niejawne, na podstawie oryginalnego odwołania do obiektu. Istnieją języki, które obsługują przesłonięcie a thislub self, ale te konstrukcje są zwykle nazywane funkcjami, a nie metodami.
ty1824

1
@mheiber Jeśli chodzi o metody statyczne - java zaimplementowała je jako obejście, aby funkcje mogły zostać zaimplementowane bez konieczności posiadania kontekstu. I tak posunąłbym się do stwierdzenia, że ​​„metoda statyczna” jest wprowadzającym w błąd terminem i powinien zostać zastąpiony ... w idealnym świecie teoretycznym :)
ty1824

1
@ ty1824 C ++, Scala, Python, Ruby, JavaScript i Scala mają wszystkie metody statyczne, więc nie sądzę, że to tylko Java. Też ich nie lubię: sprowadzają się do używania obiektów (wiązek stanu) tak, jakby były przestrzeniami nazw.
Max Heiber,

99

Ogólnie: metody są funkcjami należącymi do klasy, funkcje mogą znajdować się w dowolnym innym zakresie kodu, więc można stwierdzić, że wszystkie metody są funkcjami, ale nie wszystkie funkcje są metodami:

Weź następujący przykład python:

class Door:
  def open(self):
    print 'hello stranger'

def knock_door:
  a_door = Door()
  Door.open(a_door)

knock_door()

Podany przykład pokazuje klasę o nazwie „Door”, która ma metodę lub akcję o nazwie „open”, nazywa się to metodą, ponieważ została zadeklarowana w klasie. Jest jeszcze inna część kodu z „def” tuż poniżej, która definiuje funkcję, jest to funkcja, ponieważ nie jest zadeklarowana w klasie, funkcja ta wywołuje metodę, którą zdefiniowaliśmy w naszej klasie, jak widać, a na końcu funkcja jest nazywany sam.

Jak widać, możesz wywołać funkcję w dowolnym miejscu, ale jeśli chcesz wywołać metodę, musisz przekazać nowy obiekt tego samego typu co klasa, którą metoda jest zadeklarowana (Class.method (obiekt)) lub musisz wywołać metoda wewnątrz obiektu (object.Method ()), przynajmniej w pythonie.

Pomyśl o metodach jako o rzeczach, które może wykonać tylko jedna istota, więc jeśli masz klasę Psa, sensowne byłoby posiadanie funkcji kory tylko w tej klasie, a byłaby to metoda, jeśli masz również klasę Osoby, sensowne byłoby napisz funkcję „feed”, ponieważ nie należy ona do żadnej klasy, ponieważ zarówno ludzie, jak i psy mogą być karmieni, a ty możesz nazwać tę funkcję, ponieważ nie należy ona do żadnej konkretnej klasy.


2
Ta odpowiedź - głównie pierwsze zdanie - jest zdecydowanie najbardziej zwięzłą i ogólnie najlepszą odpowiedzią na pytanie.
yourcomputergenius

61

Prosty sposób na zapamiętanie:

  • F namaszczenie → F ree (Free nie znaczy należeć do obiektu lub klasy)
  • M ethod → M żaru (członek przedmiotu lub grupy)

skoro zwykle są wymienne, dlaczego potrzebujesz mnemonika?
Sapphire_Brick

44

Bardzo ogólna definicja głównej różnicy między funkcją a metodą :

Funkcje są zdefiniowane poza klasami, podczas gdy Metody są zdefiniowane wewnątrz klas i ich części.


30

Jeśli masz ochotę przeczytać tutaj, to „Moje wprowadzenie do metod OO”

Ideą paradygmatu zorientowanego obiektowo jest „zagrożenie”, na które oprogramowanie składa się… cóż „obiekty”. Obiekty w świecie rzeczywistym mają właściwości, na przykład jeśli masz pracownika, pracownik ma imię, identyfikator pracownika, stanowisko, należy do działu itp.

Obiekt wie również, jak radzić sobie z jego atrybutami i wykonywać na nich pewne operacje. Powiedzmy, że jeśli chcemy wiedzieć, co robi teraz pracownik, zapytamy go.

employe whatAreYouDoing.

To „whatAreYouDoing” to „wiadomość” wysłana do obiektu. Obiekt wie, jak odpowiedzieć na te pytania, mówi się, że ma „metodę” rozwiązania pytania.

Zatem sposób, w jaki obiekty muszą ujawniać swoje zachowanie, nazywa się metodami. Metody są więc przedmiotem artefaktu, który musi coś „zrobić”.

Inne możliwe metody to

employee whatIsYourName
employee whatIsYourDepartmentsName

itp.

Funkcje z drugiej strony to sposoby, w jakie język programowania musi obliczać niektóre dane, na przykład możesz mieć funkcję addValues ​​(8, 8), która zwraca 16

// pseudo-code
function addValues( int x, int y )  return x + y 
// call it 
result = addValues( 8,8 )
print result // output is 16...

Ponieważ pierwsze popularne języki programowania (takie jak fortran, c, pascal) nie obejmowały paradygmatu OO, wywołują tylko te „funkcje” artefaktów.

na przykład poprzednią funkcją w C byłoby:

int addValues( int x, int y ) 
{
   return x + y;
}

Powiedzenie, że obiekt ma „funkcję” do wykonania pewnych czynności, nie jest „naturalne”, ponieważ funkcje są bardziej związane z matematyką, podczas gdy pracownik ma mało matematyki, ale możesz mieć metody, które działają dokładnie tak samo jak funkcje, na przykład w Javie byłaby to równoważna funkcja addValues.

public static int addValues( int x, int y ) {
    return x + y;
}

Wygląda znajomo? Jest tak, ponieważ Java ma swoje korzenie w C ++, a C ++ w C.

Na koniec jest tylko koncepcja, we wdrażaniu mogą wyglądać tak samo, ale w dokumentacji OO są one nazywane metodami.

Oto przykład wcześniejszego obiektu Employee w Javie.

public class Employee {

    Department department;
    String name;

    public String whatsYourName(){
        return this.name;
    }
    public String whatsYourDeparmentsName(){
         return this.department.name();
    }
    public String whatAreYouDoing(){
        return "nothing";
    } 
    // Ignore the following, only set here for completness
    public Employee( String name ) {
        this.name = name;
    }

}

// Usage sample.
Employee employee = new Employee( "John" ); // Creates an employee called John

// If I want to display what is this employee doing I could use its methods.
// to know it.
String name = employee.whatIsYourName():
String doingWhat = employee.whatAreYouDoint();

// Print the info to the console.

 System.out.printf("Employee %s is doing: %s", name, doingWhat );

Output:
Employee John is doing nothing.

Różnica polega zatem na „domenie”, w której jest stosowana.

AppleScript ma pomysł na „naturalny język”, jak kiedyś OO. Na przykład Smalltalk. Mam nadzieję, że po przeczytaniu tego zrozumienie metod w obiektach może okazać się łatwiejsze.

UWAGA: Nie należy kompilować kodu, a jedynie jako przykład. Zmodyfikuj post i dodaj przykład w języku Python.


3
Brawo! Doskonała prezentacja tego, w jaki sposób metody są poleceniami dla obiektów. Jest to klucz do zrozumienia OO, a brak retoryki, którą okazujesz w tej odpowiedzi, jest powodem, dla którego OO jest tak często nadużywane w branży. Doskonały post.
moffdub

18

W świecie OO oba są powszechnie używane w znaczeniu tego samego.

Z czystego punktu widzenia matematyki i CS funkcja zawsze zwraca ten sam wynik, gdy zostanie wywołana z tymi samymi argumentami (f (x, y) = (x + y)). Z drugiej strony metoda jest zwykle kojarzona z instancją klasy. Znów jednak większość współczesnych języków OO nie używa już terminu „funkcja”. Wiele metod statycznych może być bardzo podobnych do funkcji, ponieważ zazwyczaj nie mają stanu (nie zawsze prawdziwe).


17

Powiedzmy, że funkcja jest blokiem kodu (zwykle z własnym zakresem, a czasem z własnym zamknięciem), który może otrzymywać pewne argumenty i może również zwracać wynik.

Metoda jest funkcją należącą do obiektu (w niektórych systemach obiektowych bardziej poprawne jest stwierdzenie, że jest własnością klasy). Bycie „własnością” obiektu / klasy oznacza, że ​​odwołujesz się do metody przez obiekt / klasę; na przykład w Javie, jeśli chcesz wywołać metodę „open ()” należącą do obiektu „door”, musisz napisać „door.open ()”.

Zazwyczaj metody zyskują również dodatkowe atrybuty opisujące ich zachowanie w obiekcie / klasie, na przykład: widoczność (związana z obiektową koncepcją enkapsulacji), która określa, z których obiektów (lub klas) można wywołać metodę.

W wielu językach obiektowych wszystkie „funkcje” należą do jakiegoś obiektu (lub klasy), dlatego w tych językach nie ma funkcji, które nie są metodami.


1
Uwierzyłem, że metody mogą być własnością obiektu lub klasy, ponieważ Javascript (o którym wspomniałeś w swoim pytaniu) jest jednym z języków, który osłabia ogólną tendencję języków zorientowanych obiektowo poprzez posiadanie metod należących do obiektów, a nie klas (chociaż podobne struktury do klasy istnieją).
Mike Tunnicliffe


13

Funkcja jest pojęciem matematycznym. Na przykład:

f(x,y) = sin(x) + cos(y)

mówi, że funkcja f () zwróci sinus pierwszego parametru dodanego do cosinusa drugiego parametru. To tylko matematyka. Tak się składa, że ​​sin () i cos () są również funkcjami. Funkcja ma inną właściwość: wszystkie wywołania funkcji o tych samych parametrach powinny zwracać ten sam wynik.

Z drugiej strony metoda jest funkcją związaną z obiektem w języku zorientowanym obiektowo. Ma jeden domyślny parametr: obiekt, na który działa (i jego stan).

Jeśli więc masz obiekt Z metodą g (x), możesz zobaczyć:

Z.g(x) = sin(x) + cos(Z.y)

W tym przypadku przekazywany jest parametr x, taki sam jak w przykładzie funkcji wcześniej. Jednak parametr do cos () jest wartością, która żyje w obiekcie Z. Z, a dane, które w nim żyją (Zy) są niejawnymi parametrami metody g () Z.


13

Funkcja lub metoda to nazwany fragment kodu, który można wywołać, który wykonuje niektóre operacje i opcjonalnie zwraca wartość.

W języku C używana jest funkcja terminu. Ludzie Java i C # powiedzieliby, że jest to metoda (w tym przypadku funkcja jest zdefiniowana w klasie / obiekcie).

A C ++ programista może wywołać ją w zależności czy piszą proceduralną styl kodu C ++ lub robią obiektowego sposób C ++, tylko też C / C ++ programista prawdopodobnie nazywają to funkcja, ponieważ termin „metoda” jest funkcją lub czasami metoda ( rzadziej stosowane w literaturze C / C ++).

Korzystasz z funkcji, po prostu wywołując jej nazwę, np.

result = mySum(num1, num2);


Wywołalibyśmy metodę, odwołując się najpierw do jej obiektu, na przykład:

result = MyCalc.mySum(num1,num2);

13

Historycznie mogła istnieć subtelna różnica w tym, że „metoda” jest czymś, co nie zwraca wartości, i „funkcją”, która to robi. Każdy język ma swój własny słownik terminów o szczególnym znaczeniu.

W „C” słowo „funkcja” oznacza procedurę programu .

W Javie termin „funkcja” nie ma żadnego specjalnego znaczenia. Natomiast „metoda” oznacza jedną z procedur tworzących implementację klasy.

W języku C # byłoby to tłumaczone jako:

public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function

Ale tak naprawdę, powtarzam, że tak naprawdę nie ma różnicy w 2 koncepcjach. Jeśli użyjesz terminu „funkcja” w nieformalnych dyskusjach o Javie, ludzie założą, że masz na myśli „metodę” i będą kontynuować. Nie używaj go w odpowiednich dokumentach lub prezentacjach na temat Javy, bo będziesz wyglądać głupio.


Właściwie, w twoim przykładzie oba są method... albo nazwałbym to procedurei function.
Yousha Aleayoub,

9

Funkcja to zestaw logiki, za pomocą którego można manipulować danymi.

Metoda natomiast służy do manipulowania danymi obiektu, do którego należy. Tak więc technicznie, jeśli masz funkcję, która nie jest całkowicie związana z twoją klasą, ale została zadeklarowana w klasie, nie jest to metoda; To się nazywa zły projekt.


8

Metody klasy działają na instancji klasy, zwanej obiektem.

class Example
{
   public int data = 0; // Each instance of Example holds its internal data. This is a "field", or "member variable".

   public void UpdateData() // .. and manipulates it (This is a method by the way)
   {
      data = data + 1;
   }

   public void PrintData() // This is also a method
   {
      Console.WriteLine(data);
   }
}

class Program
{
   public static void Main()
   {
       Example exampleObject1 = new Example();
       Example exampleObject2 = new Example();

       exampleObject1.UpdateData();
       exampleObject1.UpdateData();

       exampleObject2.UpdateData();

       exampleObject1.PrintData(); // Prints "2"
       exampleObject2.PrintData(); // Prints "1"
   }
}

8

W językach OO, takich jak Object Pascal lub C ++, „metoda” jest funkcją powiązaną z obiektem. Na przykład obiekt „pies” może mieć funkcję „szczekania”, co można uznać za „metodę”. Natomiast funkcja „StrLen” jest samodzielna (zapewnia długość łańcucha podanego jako argument). Jest to zatem tylko „funkcja”. JavaScript jest technicznie zorientowany obiektowo, ale napotyka wiele ograniczeń w porównaniu z pełnoprawnym językiem, takim jak C ++, C # lub Pascal. Niemniej jednak rozróżnienie powinno nadal obowiązywać.

Kilka dodatkowych faktów: C # jest w pełni zorientowany obiektowo, więc nie można tworzyć samodzielnych „funkcji”. W języku C # każda funkcja jest powiązana z obiektem, a zatem jest technicznie „metodą”. Ciekawostką jest to, że niewiele osób w języku C # nazywa je „metodami” - po prostu używają terminu „funkcje”, ponieważ nie ma żadnego rzeczywistego rozróżnienia.

Wreszcie - tak, aby żaden guru Pascala nie wskoczył na mnie tutaj - Pascal rozróżnia także „funkcje” (które zwracają wartość) i „procedury”, które nie. C # nie czyni tego rozróżnienia wyraźnie, chociaż możesz oczywiście wybrać wartość, czy nie.


8

Ponieważ wspomniałeś o Pythonie, poniższe informacje mogą być użyteczną ilustracją zależności między metodami i obiektami w większości współczesnych języków obiektowych. W skrócie to, co nazywają „metodą”, jest po prostu funkcją, która dostaje dodatkowy argument (jak wskazały inne odpowiedzi), ale Python czyni to bardziej wyraźnym niż większość języków.

# perfectly normal function
def hello(greetee):
  print "Hello", greetee

# generalise a bit (still a function though)
def greet(greeting, greetee):
  print greeting, greetee

# hide the greeting behind a layer of abstraction (still a function!)
def greet_with_greeter(greeter, greetee):
  print greeter.greeting, greetee

# very simple class we can pass to greet_with_greeter
class Greeter(object):
  def __init__(self, greeting):
    self.greeting = greeting

  # while we're at it, here's a method that uses self.greeting...
  def greet(self, greetee):
    print self.greeting, greetee

# save an object of class Greeter for later
hello_greeter = Greeter("Hello")

# now all of the following print the same message
hello("World")
greet("Hello", "World")
greet_with_greeter(hello_greeter, "World")
hello_greeter.greet("World")

Teraz porównaj funkcję greet_with_greeteri metodę greet: jedyną różnicą jest nazwa pierwszego parametru (w funkcji nazwałem ją „powitaniem”, w metodzie nazwałem ją „ja”). Mogę więc użyć tej greetmetody dokładnie w taki sam sposób, jak korzystam z greet_with_greeterfunkcji (używając do tego składni „kropka”, ponieważ zdefiniowałem ją w klasie):

Greeter.greet(hello_greeter, "World")

Więc skutecznie przekształciłem metodę w funkcję. Czy mogę zamienić funkcję w metodę? Cóż, ponieważ Python pozwala bawić się w klasy po ich zdefiniowaniu, spróbujmy:

Greeter.greet2 = greet_with_greeter
hello_greeter.greet2("World")

Tak, funkcja greet_with_greeterjest teraz znana również jako metoda greet2. To pokazuje jedyną prawdziwą różnicę między metodą a funkcją: kiedy wywołujesz metodę „na” obiekcie przez wywołanie object.method(args), język magicznie go zamienia method(object, args).

(Puryści OO mogą argumentować, że metoda jest czymś innym niż funkcja, a jeśli przejdziesz do zaawansowanego Pythona lub Ruby - lub Smalltalk! - zaczniesz rozumieć ich sens. Również niektóre języki dają metodom specjalny dostęp do bitów obiektu. Ale główną różnicą pojęciową jest nadal ukryty dodatkowy parametr).


7

dla mnie: funkcja metody i funkcja jest taka sama, jeśli zgadzam się, że:

  • funkcja może zwrócić wartość
  • może oczekiwać parametrów

Tak jak każdy fragment kodu, możesz mieć obiekty, które wstawiasz i możesz mieć obiekt, który powstaje w wyniku. Robiąc to, mogą zmienić stan obiektu, ale nie zmieniłoby to dla mnie ich podstawowego funkcjonowania.

Może występować rozróżnienie definicji w wywoływaniu funkcji obiektów lub innych kodów. Ale czy to nie jest coś do słownych różnic i dlatego ludzie je wymieniają? Wymienia przykład obliczeń, z którymi byłbym ostrożny. ponieważ zatrudniam, do moich obliczeń zatrudniam:

new Employer().calculateSum( 8, 8 );

W ten sposób mogę polegać na tym, że pracodawca jest odpowiedzialny za obliczenia. Jeśli chce więcej pieniędzy, uwalniam go i pozwalam, by funkcja śmieciarza polegająca na usuwaniu niewykorzystanych pracowników zrobiła resztę i pozyskała nowego pracownika.

Nawet twierdzenie, że metoda jest funkcją obiektową, a funkcja jest niepowiązana, nie pomoże mi obliczenie. Sam deskryptor funkcji, a najlepiej dokumentacja funkcji, powie mi, czego potrzebuje i co może zwrócić. Reszta, jak manipulowanie stanem jakiegoś obiektu, nie jest dla mnie tak naprawdę przejrzysta. Oczekuję, że zarówno funkcje, jak i metody dostarczą i zmanipulują to, o co się twierdzą, bez konieczności szczegółowego wiedzieć, jak to robią. Nawet funkcja czysto obliczeniowa może zmienić stan konsoli lub dołączyć do pliku dziennika.


5

Nie komplikujmy, co powinna być bardzo prostą odpowiedzią. Metody i funkcje są tym samym. Nazywasz funkcję funkcją, gdy znajduje się ona poza klasą, a funkcję wywołujesz, gdy jest zapisana w klasie.


4

Z mojego zrozumienia, metodą jest każda operacja, którą można wykonać na klasie. Jest to ogólny termin używany w programowaniu.

W wielu językach metody są reprezentowane przez funkcje i podprogramy. Główne rozróżnienie, którego używa większość języków, polega na tym, że funkcje mogą zwracać wartość wywołującemu, a podprogram może tego nie robić. Jednak wiele współczesnych języków ma tylko funkcje, ale te opcjonalnie nie mogą zwrócić żadnej wartości.

Załóżmy na przykład, że chcesz opisać kota i chciałbyś, aby mógł ziewać. Utworzyłbyś klasę Cat za pomocą metody Yawn, która najprawdopodobniej byłaby funkcją bez wartości zwracanej.


4

Do aproksymacji pierwszego rzędu metoda (w stylu OO w języku C ++) jest innym słowem dla funkcji składowej, która jest częścią klasy.

W językach takich jak C / C ++ możesz mieć funkcje, które nie są członkami klasy; nie nazywasz funkcji niepowiązanej z klasą metodą.


4

Funkcja jest pojęciem należącym głównie do programowania zorientowanego na procedury, w którym funkcja jest bytem, ​​który może przetwarzać dane i zwraca twoją wartość

Metoda jest koncepcją programowania obiektowego, w której metoda należy do klasy, która głównie przetwarza elementy klasowe.


3

Ludzie IMHO chcieli po prostu wymyślić nowe słowo dla łatwiejszej komunikacji między programistami, gdy chcieli odwoływać się do funkcji wewnątrz obiektów.

Jeśli mówisz o metodach, masz na myśli funkcje wewnątrz klasy. Jeśli mówisz o funkcjach, masz na myśli po prostu funkcje poza klasą.

Prawda jest taka, że ​​oba słowa służą do opisu funkcji. Nawet jeśli użyłeś go niewłaściwie, nic złego się nie stanie. Oba słowa dobrze opisują, co chcesz osiągnąć w kodzie.

Funkcja to kod, który musi odgrywać rolę ( funkcję ) robienia czegoś. Metoda to metoda rozwiązania problemu.

Robi to samo. To jest to samo. Jeśli chcesz być bardzo precyzyjny i postępować zgodnie z konwencją, możesz wywoływać metody jako funkcje wewnątrz obiektów.


2

Nie jestem ekspertem, ale to wiem:

  1. Funkcja jest terminem języka C, odnosi się do fragmentu kodu, a nazwa funkcji będzie identyfikatorem tej funkcji.

  2. Metoda jest terminem OO, zwykle ma ten wskaźnik w parametrze funkcji. Nie możesz wywołać tego fragmentu kodu, takiego jak C, musisz użyć obiektu, aby go wywołać.

  3. Metody wywoływania są również różne. Wywołaj tutaj znaczenie, aby znaleźć adres tego fragmentu kodu. C / C ++, czas połączenia użyje symbolu funkcji do zlokalizowania.

  4. Objecive-C jest inny. Wywołanie oznacza funkcję C, aby użyć struktury danych do znalezienia adresu. Oznacza to, że wszystko jest znane w czasie wykonywania.


2

Wiem, że wiele innych już odpowiedziało, ale uważam, że podążanie jest prostą, ale skuteczną odpowiedzią na jedną linię. Chociaż nie wygląda to dużo lepiej niż inne odpowiedzi tutaj, ale jeśli przeczytasz go uważnie, ma wszystko, co musisz wiedzieć o metodzie vs funkcji.

Metoda jest funkcją, która ma zdefiniowany odbiornik, w kategoriach OOP, metoda jest funkcją na instancji obiektu.


2

Różnica między metodami i funkcjami

Z przeczytania tego dokumentu na Microsoft

Elementy zawierające kod wykonywalny są wspólnie znane jako elementy funkcji klasy. W poprzedniej sekcji opisano metody, które są podstawowym rodzajem elementów funkcji. W tej sekcji opisano inne rodzaje elementów funkcji obsługiwane przez język C #: konstruktory, właściwości, indeksatory, zdarzenia, operatory i finalizatory.

Zatem metody są podzbiorem funkcji. Każda metoda jest funkcją, ale nie każda funkcja jest metodą, na przykład constructornie można powiedzieć, że jest to metoda, ale jest to funkcja.


Właściwości, indeksatory i zdarzenia nie są funkcjami. Funkcje pobierające, ustawiające (dla właściwości i indeksujące), sumatory i usuwające (dla zdarzeń) są funkcjami. Członkowie funkcji to członkowie, którzy są powiązani z jedną lub większą liczbą funkcji, ale niekoniecznie będąc funkcją.
Jon Hanna

2

Funkcja - funkcja w niezależnym fragmencie kodu, która zawiera pewną logikę i musi być wywoływana niezależnie i jest zdefiniowana poza klasą.

Metoda - metoda jest niezależnym fragmentem kodu, który jest wywoływany w odniesieniu do jakiegoś obiektu i jest definiowany wewnątrz klasy.


Jak nazywasz fragment kodu w klasie statycznej, który jest również statyczny, czy jest to metoda czy funkcja? Funkcja / metoda statyczna klasy nie potrzebuje obiektu klasy, w której jest zadeklarowana.
Wolfgang Roth

1

Oto wyjaśnienie metody vs. funkcji z wykorzystaniem przykładów JavaScript:

test(20, 50); jest funkcją definiującą i używaną do uruchomienia niektórych kroków lub zwrotu czegoś, co można gdzieś zapisać / wykorzystać.

Możesz ponownie użyć kodu: Zdefiniuj kod raz i użyj go wiele razy.

Możesz użyć tego samego kodu wiele razy z różnymi argumentami, aby uzyskać różne wyniki.

var x = myFunction(4, 3);   // Function is called, return value will end up in x

function myFunction(a, b) {
    return a * b;          // Function returns the product of a and b
}

var test = something.test(); tutaj test () może być metodą jakiegoś obiektu lub niestandardowo zdefiniowanego prototypu dla obiektów wbudowanych, oto więcej wyjaśnień:

Metody JavaScript to akcje, które można wykonać na obiektach.

Metoda JavaScript jest właściwością zawierającą definicję funkcji.

Wbudowana właściwość / metoda dla ciągów w javascript:

var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!

Przykład niestandardowy:

function person(firstName, lastName, age, eyeColor) {
    this.firstName = firstName;  
    this.lastName = lastName;
    this.age = age;
    this.eyeColor = eyeColor;
    this.changeName = function (name) {
        this.lastName = name;
    };
}

something.changeName("SomeName"); //This will change 'something' objject's name to 'SomeName'

Możesz na przykład zdefiniować właściwości String, Array itp

String.prototype.distance = function (char) {
    var index = this.indexOf(char);

    if (index === -1) {
        console.log(char + " does not appear in " + this);
    } else {
        console.log(char + " is " + (this.length - index) + " characters from the end of the string!");
    }
};

var something = "ThisIsSomeString"

// now use distance like this, run and check console log

something.distance("m");

Niektóre odnośniki: Metoda obiektu Javascript , Funkcje , Więcej informacji o prototypie


Nie publikuj identycznych odpowiedzi na wiele pytań. Opublikuj jedną dobrą odpowiedź, a następnie głosuj / oznacz, aby zamknąć pozostałe pytania jako duplikaty. Jeśli pytanie nie jest duplikatem, dopasuj swoje odpowiedzi do pytania.
Paul Roub

Dziękuję za opinie, nie dostosowałem innej odpowiedzi, usunąłem tę odpowiedź. :-)
Lahar Shah,

1

TL; DR

Funkcja to fragment kodu do uruchomienia.
Metoda jest funkcją wewnątrz obiektu.

Przykład funkcji:


function sum(){
  console.log("sum")l
}

Przykład metody:

const obj = {
a:1,
b:2,
sum(){
  }
}

Dlatego mówimy, że słowo kluczowe „this” wewnątrz funkcji nie jest zbyt przydatne, chyba że użyjemy go z wywołaniem, zastosowaniem lub powiązaniem. Ponieważ wywołanie, zastosowanie, powiązanie wywoła tę funkcję jako metodę wewnątrz obiektu ==> w zasadzie to konwertuje funkcję na metodę


1

Często są one wymienne, ale metoda zwykle odnosi się do podprogramu wewnątrz klasy, a funkcja zwykle odnosi się do podprogramu poza klasą. na przykład w Ruby:

# function
def putSqr(a)
   puts a ** 2
end


class Math2
   # method
   def putSqr(a)
      puts a ** 2
   end
end

W Javie, gdzie wszystko (oprócz instrukcji pakiet i import) musi znajdować się w klasie, ludzie prawie zawsze nazywają je „metodami”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.