Яка різниця між методом і функцією?


1739

Чи може хтось надати просте пояснення методів проти функцій у контексті OOP?



12
Коли значення властивості є функцією, ми називаємо це методом
кодером

2
Що є протилежним методу? Це моє запитання. "Функція" - це батьківська концепція. Метод - це тип функції. Як називається тип функції, яка не є методом, але її можна назвати безпосередньо іменем?
Олександр Міллс

Цікаво було б побачити ще одне пояснення, що окреслює різницю між методами та функціями в r . Цікаво, що метод зазвичай містить функцію . Якщо метод є об'єктно-залежною функцією, то перевірка функції класу об'єктів if(class(object)) { ... } else {stop()}буде концептуально еквівалентна методу?
Конрад

Власна термінологія справді може залежати від мови, тому вона може означати дещо різні речі в різних контекстах. Тим не менше, оскільки програмісти, які працюють однією мовою над іншою, більше звикли до певних термінологій. На програмістів також впливає використання ними термінів (чи правильних чи неправильних) їхніх колег. Ці терміни часто використовуються як взаємозамінні. Дивіться, наприклад, деякі коментарі нижче.
jvriesem

Відповіді:


1830

Функція являє собою фрагмент коду , який називається по імені. Можна передавати дані для роботи (тобто параметри), а також необов'язково повертати дані (повернене значення). Усі дані, передані функції, передаються явно.

Метод являє собою фрагмент коду , який називається по імені, пов'язане з об'єктом. У більшості аспектів він ідентичний функції, за винятком двох ключових відмінностей:

  1. Метод неявно передає об’єкт, на який він викликався.
  2. Метод здатний оперувати даними, що містяться в класі (пам'ятаючи, що об’єкт - це екземпляр класу - клас - це визначення, об'єкт - це екземпляр цих даних).

(це спрощене пояснення, ігнорування питань сфери застосування тощо)


249
Для 1) слід також додати, що методи в C ++ називаються функціями- членами . Таким чином, різниця між функціями та методами в цьому контексті аналогічна різниці між функціями та функціями-членами в C ++. Крім того, такі мови, як Java, мають лише методи. У цьому випадку функції були б аналогічними статичним методам, і методи мали б однакове значення. Для 2) слід додати, що метод здатний оперувати приватними даними екземпляра (члена), оголошених як частина класу. Будь-який код може отримати доступ до даних публічних екземплярів.
Раффі Хатчадуріан

45
функція - математична конструкція. Я б сказав, що всі методи - це функції, але не всі функції - це методи
Тайлер Гілліс

28
Походячи з функціонального фону програмування, я відчуваю, що існує глибока різниця між функцією та методом. В основному методи мають побічні ефекти, і функції повинні бути чистими, таким чином надаючи досить приємну властивість референсної прозорості
HHC

26
@TylerGillies та HHC, я погоджуюся, що це може бути непогано, якби "функція" та "метод" означали те, що ви хотіли, щоб вони хотіли, але ваші визначення не відображають деякі дуже поширені вживання цих термінів.
Пол Дрейпер

9
За цим визначенням статичний метод насправді не вважатиметься методом, оскільки він не має нічого спільного з конкретним екземпляром?
Carcigenicate

961

Метод на об’єкті.
Функція не залежить від об'єкта.

Для Java та C # існують лише методи.
Для C існують лише функції.

Для C ++ та Python це залежатиме від того, ви чи ні в класі.


39
Настав час додати C #.
Росді Касім

7
@RosdiKasim Для C # існують лише методи. (оскільки навіть статичні методи потрібно асоціювати з об’єктом)
Лінн Кришиться

38
Як щодо статичних методів у класі? Вони були б незалежні від об'єкта (в Java). Не було б це тоді функцією?
Squeazer

12
@Squeazer Існує питання про те, що в останній час stackoverflow.com/questions/30402169 / ... Специфікація мови Java тільки відрізняє їх як «метод класу» (статичний) і «методу примірника». Тому вони все-таки всі методи.
xji

13
У Java є лямбда-вирази, які є функціями, які не є методами
Max Heiber

228

'метод' - це об'єктно-орієнтоване слово для функції . Це майже все, що там є (т. Е. Немає реальної різниці).

На жаль, я думаю, що багато відповідей тут увічнюють чи просувають думку про те, що є якась складна, змістовна різниця.

Дійсно - у цьому все не так вже й багато, просто різні слова для одного і того ж.

[пізнє додавання]


Насправді, як зазначив Брайан Ніл у коментарі до цього питання , стандарт C ++ ніколи не використовує термін "метод" при переході до функцій членів. Деякі люди можуть сприймати це як ознаку того, що C ++ насправді не є об'єктно-орієнтованою мовою; проте я вважаю за краще сприймати досить розумну групу людей, що не має особливо вагомих причин використовувати інший термін.


14
Метод - це особливий тип функції з переданим неявним аргументом (екземпляр класу, на якому визначено метод). Це важливо, оскільки функція, строго кажучи, не повинна використовувати або змінювати нічого, що не є у списку аргументів.
ty1824

4
@ ty1824 не завжди буває так, що методи передаються неявними аргументами. У Python selfаргумент явний. І багато мов мають статичні методи, які не передаються екземпляром.
Макс Хайбер

1
@mheiber - це деякі дійсні моменти. Що стосується себе, ви праві, це чітко визначено . Ключовим є те, що виклик неявний, виходячи з оригінальної посилання на об'єкт. Є мови, які підтримують переопределення a thisабо self, але ці конструкції зазвичай називають функціями, а не методами.
ty1824

1
@mheiber Що стосується статичних методів - java реалізував їх як вирішення, щоб функції можна було реалізовувати, не вимагаючи контексту. Я б пішов так далеко, щоб запропонувати, що "статичний метод" є оманливим терміном і його слід замінити ... в ідеальному теоретичному світі :)
ty1824

1
@ ty1824 C ++, Scala, Python, Ruby, JavaScript та Scala мають статичні методи, тому я не думаю, що це лише річ Java. Мені вони також не подобаються: вони складаються з використання об'єктів (державних наборів) так, ніби вони були просторами імен.
Макс Хайбер

99

Взагалі: методи - це функції, що належать до класу, функції можуть бути в будь-якій іншій області коду, щоб ви могли констатувати, що всі методи є функціями, але не всі функції - це методи:

Візьмемо наступний приклад пітона:

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

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

knock_door()

Наведений приклад показує вам клас під назвою "Двері", який має метод або дію під назвою "відкрити", його називають методом, оскільки він був оголошений всередині класу. Існує ще одна частина коду з "def" трохи нижче, яка визначає функцію, це функція, оскільки вона не оголошена всередині класу, ця функція викликає метод, який ми визначили всередині нашого класу, як ви можете бачити, і нарешті функція виконується покликаний сам по собі.

Як ви бачите, ви можете викликати функцію куди завгодно, але якщо ви хочете викликати метод, вам потрібно передати новий об'єкт того ж типу, що і клас, декларується метод (Class.method (об'єкт)) або вам потрібно викликати метод всередині об'єкта (object.Method ()), принаймні в python.

Розгляньте методи як речі, які може зробити лише одна сутність, тому, якщо у вас є клас собаки, було б сенсом функціонувати кора лише всередині цього класу, і це був би метод, якщо у вас є також клас Особи, це може мати сенс написати функцію "feed", яка не належить до жодного класу, оскільки можна годувати і людей, і собак, і ви можете назвати цю функцію, оскільки вона не належить до жодного класу, зокрема.


2
Ця відповідь - головним чином, її перше речення --- - це самий стислий і загальний найкращий варіант відповіді на питання.
вашкомп'ютергеній

61

Простий спосіб запам'ятати:

  • Ф ікція → F ree (Вільні засоби не належать до об’єкта чи класу)
  • М етод → M вугіллячко (член об'єкта або класу)

Оскільки зазвичай є взаємозамінні, навіщо вам мнемоніка?
Sapphire_Brick

44

Дуже загальне визначення основної різниці між функцією та методом :

Функції визначаються поза класами, в той час як Методи визначаються всередині та в частині класів.


30

Якщо ви хочете прочитати тут, - "Моє знайомство з методами ОО"

Ідея об'єктно-орієнтованої парадигми полягає в тому, щоб "загрожувати" програмному забезпеченню, складеному з "добре" об'єктів. Об'єкти в реальному світі мають властивості, наприклад, якщо у вас є працівник, у працівника є прізвище, ідентифікатор працівника, посада, він належить до департаменту тощо.

Об'єкт також знає, як поводитися з його атрибутами і виконувати над ними деякі операції. Скажімо, якщо ми хочемо знати, що працівник робить зараз, ми б запитали його.

employe whatAreYouDoing.

Це "whatAreYouDoing" - це "повідомлення", надіслане об'єкту. Об'єкт знає, як відповісти на це питання, кажуть, що він має "метод" для вирішення питання.

Отже, те, як об’єкти повинні викривати свою поведінку, називають методами. Методи, таким чином, об'єкт артефакту повинен щось "зробити".

Інші можливі методи є

employee whatIsYourName
employee whatIsYourDepartmentsName

тощо.

Функції з іншого боку - це способи, якими мова програмування повинна обчислювати деякі дані, наприклад, у вас може бути функція addValues ​​(8, 8), яка повертає 16

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

Оскільки перші популярні мови програмування (такі як fortran, c, pascal) не охоплювали парадигми ОО, вони лише викликають ці артефакти "функції".

наприклад, попередня функція в C була б:

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

Неприродно говорити, що об’єкт має "функцію" для виконання якоїсь дії, оскільки функції більше пов'язані з математичними речами, тоді як у Працівника мало математики, але ви можете мати методи, які виконують точно так само, як функції, наприклад, у Java це буде еквівалентною функцією addValues.

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

Виглядає знайомо? Це тому, що Java має коріння на C ++ і C ++ на C.

Зрештою, це лише концепція, в реалізації вони можуть виглядати однаково, але в документації на ОО це називають методом.

Ось приклад раніше об'єкта Employee на Java.

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.

Різниця тоді полягає в тому, що "домен", де він застосований.

AppleScript має уявлення про "природну мову" матфору, яку в певний момент мав ОО. Наприклад, Smalltalk. Сподіваюся, вам може бути розумно легше зрозуміти методи в об'єктах після прочитання цього.

ПРИМІТКА. Код не слід компілювати, а лише слугувати прикладом. Не соромтеся змінювати публікацію та додавати приклад Python.


3
Браво! Блискуче викладення того, як методи - це команди для об'єктів. Це є ключовим для розуміння ОО та відсутності риторики, яку ви проявляєте у цій відповіді, чому OO так зловживають сьогодні у галузі. Відмінний пост.
moffdub

18

У світі OO обидва вживаються для того, щоб означати одне і те ж.

З точки зору чистої математики та CS, функція завжди повертає той самий результат, коли викликається з однаковими аргументами (f (x, y) = (x + y)). Метод з іншого боку, як правило, асоціюється з екземпляром класу. Знову ж таки, більшість сучасних мов OO більше не використовують термін "функція". Багато статичних методів можуть бути дуже схожими на функції, оскільки вони, як правило, не мають стану (не завжди правдивого).


17

Скажімо, функція - це блок коду (як правило, з власною областю, а іноді і з власним закриттям), який може отримувати деякі аргументи, а також може повертати результат.

Метод - це функція, яка належить об'єкту (у деяких об'єктно-орієнтованих системах правильніше сказати, що ним належить клас). Бути "належним" об'єктом / класом означає, що ви посилаєтесь на метод через об'єкт / клас; Наприклад, у Java, якщо ви хочете викликати метод "open ()", що належить об'єкту "door", вам потрібно написати "door.open ()".

Зазвичай методи також отримують деякі додаткові атрибути, що описують їх поведінку в межах об'єкта / класу, наприклад: видимість (пов'язана з об'єктно-орієнтованою концепцією інкапсуляції), яка визначає, з яких об'єктів (або класів) може бути використаний метод.

У багатьох об'єктно-орієнтованих мовах всі "функції" належать до якогось об'єкта (або класу), тому в цих мовах немає функцій, які не є методами.


1
Я заперечував, що методами може належати об’єкт або клас, оскільки Javascript (про який ви згадували у своєму запитанні) є однією з мов, яка перешкоджає загальній тенденції об'єктно-орієнтованих мов, використовуючи методи, що належать об'єктам, а не класам (хоча подібні структури до класи існують).
Майк Туннікліфф

15

Методи - це функції занять. У звичайному жаргоні люди обмінюються методом і функціонують на всьому протязі. В основному ви можете думати про них як про одне і те ж (не впевнений, що глобальні функції називаються методами).

http://en.wikipedia.org/wiki/Method_(computer_science)


13

Функція - це математичне поняття. Наприклад:

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

говорить, що функція f () поверне sin sin першого параметра, доданого до косинусу другого параметра. Це просто математика. Як це буває sin () і cos () - це також функції. Функція має ще одну властивість: усі виклики до функції з однаковими параметрами повинні повертати однаковий результат.

Метод, з іншого боку, - це функція, яка пов'язана з об'єктом об'єктно-орієнтованою мовою. Він має один неявний параметр: об'єкт, на який діє (і це стан).

Отже, якщо у вас є об'єкт Z методом g (x), ви можете побачити наступне:

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

У цьому випадку передається параметр x, такий самий, як у прикладі функції раніше. Однак параметр cos () - це значення, яке живе всередині об'єкта Z. Z, а дані, що живуть всередині нього (Zy), - неявні параметри методу g ().


13

Функція або метод - це іменований фрагмент коду, який можна викликати, який виконує деякі операції і необов'язково повертає значення.

У мові С використовується термін функція. Java & C # люди скажуть, що це метод (і функція в цьому випадку визначається в класі / об'єкті).

A C ++ програміст може назвати це функція або іноді метод ( в залежності від того, якщо вони пишуть процедурний стиль C ++ код або роблять об'єктно - орієнтований спосіб C ++, також C / C ++ тільки програміст, ймовірно , назвати це функція , так як термін «метод» є рідше використовується в літературі C / C ++).

Ви використовуєте функцію, просто називаючи її ім'ям,

result = mySum(num1, num2);


Ви б назвали метод, посилаючись спочатку на його об'єкт,

result = MyCalc.mySum(num1,num2);

13

Історично, можливо, існувала тонка різниця: "метод" - це те, що не повертає значення, і "функція", яка це робить. Кожна мова має свій лексикон термінів із спеціальним значенням.

У "С" слово "функція" означає програмну процедуру .

У Java термін "функція" не має особливого значення. Тоді як "метод" означає одну з процедур, яка формує реалізацію класу.

В C #, що перекладається як:

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

Але дійсно, я повторюю, що різниці в двох поняттях дійсно немає. Якщо ви використовуєте термін "функція" в неофіційних дискусіях про Java, люди вважають, що ви мали на увазі "метод" і продовжуєте діяти. Не використовуйте його в належних документах або презентаціях щодо Java, інакше ви виглядатимете дурно.


Власне, у вашому прикладі обидва є method... або я б це назвав procedureі function.
Yousha Aleayoub

9

Функція - це набір логіки, за допомогою якої можна маніпулювати даними.

Хоча, Метод - це функція, яка використовується для маніпулювання даними об'єкта, де він належить. Так технічно, якщо у вас є функція, яка не повністю пов'язана з вашим класом, але була оголошена в класі, це не є методом; Це називається поганим дизайном.


8

Методи класу діють на екземпляр класу, який називається об'єктом.

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

У мовах ОО, таких як Object Pascal або C ++, "метод" - це функція, пов'язана з об'єктом. Так, наприклад, об’єкт "Собака" може мати функцію "гавкання", і це вважатиметься "Методом". На відміну від цього, функція "StrLen" стоїть окремо (вона забезпечує довжину рядка, подану як аргумент). Таким чином, це просто "функція". Javascript також технічно об'єктно орієнтований, але стикається з багатьма обмеженнями в порівнянні з повнорозмірною мовою, як C ++, C # або Pascal. Тим не менш, розмежування все ж має бути справедливим.

Кілька додаткових фактів: C # повністю орієнтований на об'єкт, тому ви не можете створювати окремі "функції". У C # кожна функція пов'язана з об'єктом і, таким чином, технічно є "методом". Найголовніше те, що мало хто в C # називає їх "методами" - вони просто використовують термін "функції", оскільки реального розрізнення не слід робити.

Нарешті - так що будь-який гуру Паскаля не перескакує на мене тут - Паскаль також розрізняє "функції" (які повертають значення) та "процедури", які цього не роблять. C # не робить цього розрізнення явно, хоча ви, звичайно, можете вибрати повернути значення чи ні.


8

Оскільки ви згадали про Python, наступне може бути корисною ілюстрацією взаємозв'язку методів та об'єктів у більшості сучасних об'єктно-орієнтованих мов. У двох словах, те, що вони називають "методом", - це лише функція, яка отримує додатковий аргумент (як вказували інші відповіді), але Python робить це більш явним, ніж більшість мов.

# 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")

Тепер порівняємо функцію greet_with_greeterта метод greet: єдина відмінність - це назва першого параметра (у функції я назвав його «вітаю», у методі я назвав його «само»). Таким чином, я можу використовувати greetметод точно так само, як і я використовую greet_with_greeterфункцію (використовуючи синтаксис "крапка", щоб потрапити на неї, оскільки я визначив її всередині класу):

Greeter.greet(hello_greeter, "World")

Тому я ефективно перетворив метод на функцію. Чи можна перетворити функцію на метод? Отже, оскільки Python дозволяє вам возитися з класами після їх визначення, спробуємо:

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

Так, greet_with_greeterтепер функція також відома як метод greet2. Це показує єдину реальну різницю між методом і функцією: коли ви викликаєте метод "на" об'єкт, викликаючи object.method(args), мова магічно перетворює його method(object, args).

(Пуристи OO можуть стверджувати, що метод є чимось відмінним від функції, і якщо ви потрапите в розширений Python або Ruby - або Smalltalk! - ви почнете бачити їхню точку. Також деякі мови надають методам спеціальний доступ до бітів об'єкта. Але Основна концептуальна відмінність все ще прихований додатковий параметр.)


7

для мене: функція методу і функції однакова, якщо я згоден, що:

  • функція може повернути значення
  • може очікувати параметрів

Як і будь-який фрагмент коду, у вас можуть бути об'єкти, які ви вводите, і у вас може бути об'єкт, який виходить в результаті. Під час цього вони можуть змінити стан об'єкта, але це не змінить їх основного функціонування для мене.

Можливо, існує визначення, що відрізняється у виклику функцій об'єктів чи інших кодів. Але чи не це щось для словесних розбіжностей, і саме тому люди їх обмінюють? Згадується приклад обчислення, з яким я був би обережний. тому що я наймаю найманих працівників, щоб робити свої розрахунки:

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

Роблячи це таким чином, я можу покластися на те, що роботодавець несе відповідальність за розрахунки. Якщо він хоче більше грошей, я звільняю його і дозволю функції збору сміття утилізувати невикористаних працівників, а решту і отримати нового працівника.

Навіть стверджуючи, що метод є функцією об'єктів, а функція не пов'язана з обчисленнями, мені не допоможе. Дескриптор функції сам, а в ідеалі документація функції підкаже мені, що йому потрібно і що може повернути. Решта, як маніпулювання станом якогось об'єкта, для мене не дуже прозорі. Я очікую, що і функції, і методи доставлять та маніпулюють тим, про що вони заявляють, не потребуючи детального знання, як вони це роблять. Навіть чиста обчислювальна функція може змінити стан консолі або долучити до журналу.


5

Не будемо надто ускладнювати, що має бути дуже простою відповіддю. Методи та функції - те саме. Ви називаєте функцію функцією, коли вона знаходиться поза класом, а ви називаєте функцію методом, коли вона записується всередині класу.


4

З мого розуміння, метод - це будь-яка операція, яку можна виконати на уроці. Це загальний термін, що використовується в програмуванні.

У багатьох мовах методи представлені функціями та підпрограмами. Основна відмінність, яку для цих мов використовують більшість мов, полягає в тому, що функції можуть повертати абоненту значення, а підпрограма може не робити. Однак багато сучасних мов мають лише функції, але вони необов'язково не можуть повернути жодного значення.

Наприклад, скажімо, ви хочете описати кішку, і ви хотіли б, щоб вона могла позіхати. Ви створили б клас Cat методом Яун, який, швидше за все, був би функцією без зворотного значення.


4

Для наближення першого порядку метод (у стилі O ++ стиль OO) - це інше слово для функції члена, тобто функції, що є частиною класу.

На таких мовах, як C / C ++, ви можете мати функції, які не є членами класу; ви не називаєте функцію, не пов'язану з класом, методом.


4

Функція - це концепція, що в основному належить до процедур орієнтованого програмування де функцією є сутність, яка може обробляти дані та повертати вам значення

Метод - це концепція об'єктно-орієнтованого програмування, де метод є членом класу, який здебільшого виконує обробку на членах класу.


3

Люди ІМХО просто хотіли вигадати нове слово для полегшення спілкування між програмістами, коли вони хотіли посилатися на функції всередині об’єктів.

Якщо ви говорите методи, ви маєте на увазі функції всередині класу. Якщо ви говорите функції, ви маєте на увазі просто функції поза класом.

Правда полягає в тому, що обидва слова використовуються для опису функцій. Навіть якщо ви неправильно використовували, нічого поганого не відбувається. Обидва слова добре описують, чого ви хочете досягти у своєму коді.

Функція - це код, який повинен грати роль ( функцію ) робити щось. Метод - це метод вирішення проблеми.

Це робить те саме. Це те саме. Якщо ви хочете бути дуже точними та йти разом з умовою, ви можете викликати методи як функції всередині об'єктів.


2

Я не експерт, але це те, що я знаю:

  1. Функція - це термін мови С, він позначає фрагмент коду, а ім'я функції буде ідентифікатором для використання цієї функції.

  2. Метод - термін OO, зазвичай він має цей покажчик у параметрі функції. Ви не можете викликати такий фрагмент коду, як C, для його виклику потрібно використовувати об'єкт.

  3. Методи виклику також різні. Тут посилайтесь на значення, щоб знайти адресу цього фрагмента коду. C / C ++, час з'єднання буде використовувати символ функції для знаходження.

  4. Objecive-C відрізняється. Викликати значення функції C для використання структури даних для пошуку адреси. Це означає, що все відомо в час виконання.


2

Я знаю, що багато інших вже відповіли, але я виявив, що це проста, але ефективна відповідь на один рядок. Хоча це виглядає не набагато краще, ніж відповіді інших, але якщо ви уважно прочитаєте, у ньому є все, що вам потрібно знати про метод проти функції.

Метод - це функція, яка має визначений приймач, в термінах OOP метод - це функція на екземплярі об'єкта.


2

Різниця між методами та функціями

З читання цього документа в Microsoft

Учасники, що містять виконуваний код, спільно називаються членами функції класу. У попередньому розділі описані методи, які є основним видом членів функції. У цьому розділі описані інші види членів функції, які підтримуються C #: конструктори, властивості, індексатори, події, оператори та фіналізатори.

Отже методи - це підмножина функцій. Кожен метод є функцією, але не кожна функція є методом, наприклад, constructorне можна сказати як метод, але це функція.


Властивості, індекси та події не є функціями. Геттери, сеттери (для властивостей та індексаторів), суматори та видалення (для подій) - це функції. Учасники функції - це члени, які асоціюються з однією або декількома функціями, але не обов'язково функцією.
Джон Ханна

2

Функція - функція в незалежному фрагменті коду, яка включає певну логіку і повинна бути викликана незалежно та визначена поза класом.

Метод - метод - це незалежний фрагмент коду, який викликається посиланням на якийсь об'єкт і визначається всередині класу.


Як ви називаєте фрагмент коду в статичному класі, тобто статичному, це метод чи функція? Статична функція / метод класу не потребує об'єкта класу, в якому він оголошений.
Вольфганг Рот,

1

Ось декілька пояснень методу проти функції з використанням прикладів JavaScript:

test(20, 50); є визначення функції та використання для виконання деяких кроків або повернення чогось назад, що можна десь зберігати / використовувати.

Ви можете повторно використовувати код: Визначте код один раз і використовуйте його багато разів.

Ви можете використовувати один і той же код багато разів з різними аргументами, щоб отримати різні результати.

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(); тут тест () може бути методом якогось об'єкта або визначеним на замовлення прототипом для вбудованих об'єктів, ось додаткове пояснення:

Методи JavaScript - це дії, які можна виконувати над об'єктами.

Метод JavaScript - це властивість, що містить визначення функції.

Вбудована властивість / метод для рядків у javascript:

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

Спеціальний приклад:

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'

Можна, наприклад, визначити властивості для String, Array тощо

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");

Деякі посилання: Метод об’єкта Javascript , функції , додаткова інформація про прототип


Не публікуйте однакових відповідей на кілька запитань. Опублікуйте одну добру відповідь, а потім проголосуйте / позначте, щоб закрити інші питання як дублікати. Якщо питання не є дублікатом, підготуйте свої відповіді на питання.
Пол Руб

Дякую за відгук, іншої відповіді я не адаптував, я видалив цю відповідь. :-)
Лахар Шах

1

TL; DR

Функція - це фрагмент коду, який потрібно запустити.
Метод - це функція всередині об'єкта.

Приклад функції:


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

Приклад способу:

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

Тому ми говоримо, що ключове слово "це" всередині функції не є дуже корисним, якщо ми не використовуємо його для виклику, застосування або прив'язки. перетворює функцію в метод


1

Вони часто взаємозамінні, але метод зазвичай посилається на підпрограму всередині класу, а функція зазвичай посилається на підпрограму поза класом. наприклад, у Ruby:

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


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

У Java, де все (крім заяв про пакунки та імпорт) має бути всередині класу, люди майже завжди називають їх "методами".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.