В чем разница между методом и функцией?

1745

Может ли кто-нибудь дать простое объяснение методов и функций в контексте ООП?

willc2
источник
12
Когда значением свойства является функция, мы называем это методом
кодер
2
Что является противоположностью метода? Это мой вопрос. «Функция» является родительским понятием. Метод - это тип функции. Как называется тип функции, которая не является методом, но может вызываться напрямую по имени?
Александр Миллс
Было бы интересно увидеть другое объяснение, описывающее разницу между методами и функциями в r . Это интересно, так как метод обычно содержит функцию . Если метод является объектно-зависимой функцией, то проверка функции для класса объекта if(class(object)) { ... } else {stop()}будет концептуально эквивалентна методу?
Конрад
Правильная терминология действительно может зависеть от языка, поэтому она может означать немного разные вещи в разных контекстах. Тем не менее, поскольку программисты, работающие с одним языком над другим, более привыкли к определенной терминологии. Программисты также находятся под влиянием использования их коллегами терминов (правильных или неправильных). Эти термины часто используются взаимозаменяемо. Посмотрите некоторые комментарии ниже, например.
jvriesem

Ответы:

1833

Функция представляет собой фрагмент кода , который называется по имени. Это может быть передано данные для работы (т.е. параметры) и может дополнительно возвращать данные (возвращаемое значение). Все данные, которые передаются в функцию, передаются явно.

Метод представляет собой фрагмент кода , который называется по имени, связанное с объектом. В большинстве случаев она идентична функции, за исключением двух ключевых отличий:

  1. Метод неявно передается объект, на котором он был вызван.
  2. Метод может работать с данными, содержащимися в классе (помня, что объект является экземпляром класса - класс является определением, объект является экземпляром этих данных).

(это упрощенное объяснение, игнорирующее вопросы объема и т. д.)

Эндрю Эджкомб
источник
249
Для 1) вы также должны добавить, что методы в C ++ называются функциями- членами . Таким образом, разница между функциями и методами в этом контексте аналогична разнице между функциями и функциями-членами в C ++. Кроме того, языки, подобные Java, имеют только методы. В этом случае функции будут аналогичны статическим методам, а методы будут иметь одинаковое значение. Для пункта 2) следует добавить, что метод может работать с данными частного экземпляра (члена), объявленными как часть класса. Любой код может получить доступ к общедоступным данным экземпляра.
Раффи Хачадурян
46
функция - это математическая конструкция. Я бы сказал, что все методы являются функциями, но не все функции являются методами
Тайлер Джиллис
29
Исходя из опыта функционального программирования, я чувствую глубокое различие между функцией и методом. В основном методы имеют побочные эффекты, и эти функции должны быть чистыми, что дает довольно приятное свойство ссылочной прозрачности
HHC
26
@TylerGillies и HHC, я согласен, было бы неплохо, если бы «функция» и «метод» означали то, что вы хотели, но ваши определения не отражают очень распространенное использование этих терминов.
Пол Дрэйпер
9
По этому определению разве статический метод не будет считаться методом, потому что он не имеет ничего общего с конкретным экземпляром?
Carcigenicate
963

Метод на объекте.
Функция не зависит от объекта.

Для Java и C # есть только методы.
Для C есть только функции.

Для C ++ и Python это будет зависеть от того, находитесь ли вы в классе.

Аарон
источник
39
Настало время добавить C #.
Росди Касим
7
@RosdiKasim Для C # есть только методы. (поскольку даже статические методы должны быть связаны с объектом)
Линн Крамблинг
38
Как насчет статических методов в классе? Они будут независимы от объекта (в Java). Разве это не было бы функцией тогда?
Squeazer
12
@Squeazer Есть вопрос о том, что в последнее время stackoverflow.com/questions/30402169/… Спецификация языка Java просто различает их как «метод класса» (статический) и «метод экземпляра». Так что они все еще методы.
xji
15
У Java есть лямбда-выражения, которые являются функциями, которые не являются методами
Макс Хейбер
228

'method' - это объектно-ориентированное слово для 'function' . Это в значительной степени все, что есть (т.е. никакой реальной разницы).

К сожалению, я думаю, что многие ответы здесь увековечивают или продвигают идею о том, что есть какое-то сложное, значимое различие.

На самом деле - здесь не так уж много, просто разные слова для одного и того же.

[позднее добавление]


Фактически, как отметил Брайан Нил в комментарии к этому вопросу , стандарт C ++ никогда не использует термин «метод» при обращении к функциям-членам. Некоторые люди могут принять это как признак того, что C ++ на самом деле не является объектно-ориентированным языком; однако я предпочитаю воспринимать это как признак того, что довольно умная группа людей не думала, что есть особенно веская причина использовать другой термин.

Майкл Берр
источник
14
Метод - это особый тип функции с передаваемым неявным аргументом (экземпляр класса, для которого определен метод). Это важно, так как функция, строго говоря, не должна использовать или изменять что-либо, отсутствующее в списке аргументов.
ty1824
4
@ ty1824 это не всегда так, что методы передают неявные аргументы. В Python selfаргумент является явным. И во многих языках есть статические методы, которым не передается экземпляр.
Макс Хейбер
1
@ Mheiber это некоторые действительные точки. Что касается себя, вы правы, это явно определено . Ключ в том, что вызов неявный, основанный на исходной ссылке на объект. Существуют языки, которые поддерживают переопределение thisили self, но тогда эти конструкции обычно называют функциями, а не методами.
ty1824
1
@mheiber Что касается статических методов - java реализовал их как обходной путь, чтобы функции могли быть реализованы без контекста. Я бы сказал, что «статический метод» является вводящим в заблуждение термином и должен быть заменен ... в идеальном теоретическом мире :)
ty1824
1
@ ty1824 C ++, Scala, Python, Ruby, JavaScript и Scala имеют статические методы, поэтому я не думаю, что это просто Java. Мне они тоже не нравятся: они равносильны использованию объектов (связок состояния), как если бы они были пространствами имен.
Макс Хейбер
99

В общем: методы - это функции, принадлежащие классу, функции могут быть в любой другой области кода, поэтому вы можете утверждать, что все методы являются функциями, но не все функции являются методами:

Возьмите следующий пример с python:

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

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

knock_door()

В приведенном примере показан класс с именем «Дверь», в котором есть метод или действие с именем «open», он называется методом, потому что он был объявлен внутри класса. Ниже есть еще одна часть кода с «def», которая определяет функцию, это функция, потому что она не объявлена ​​внутри класса, эта функция вызывает метод, который мы определили внутри нашего класса, как вы можете видеть, и, наконец, функция работает называется само по себе.

Как вы можете видеть, вы можете вызывать функцию где угодно, но если вы хотите вызвать метод, либо вы должны передать новый объект того же типа, что и класс, метод объявлен (Class.method (object)), либо вы должны вызвать метод внутри объекта (object.Method ()), по крайней мере, в Python.

Думайте о методах как о вещах, которые может выполнять только одна сущность, поэтому, если у вас есть класс Dog, имеет смысл иметь функцию лая только внутри этого класса, и это будет метод, если у вас есть также класс Person, он может иметь смысл написать функцию «feed», поскольку она не принадлежит ни одному классу, так как можно кормить как людей, так и собак, и вы можете вызывать эту функцию, поскольку она не принадлежит ни к какому классу в частности.

Густаво Рубио
источник
2
Этот ответ - в основном его первое предложение - безусловно, самый краткий и в целом лучший ответ на вопрос.
yourcomputergenius
61

Простой способ запомнить:

  • F unction → F ree (Свободный означает, что не принадлежит объекту или классу)
  • M ethod → M ember (член объекта или класса)
Дык филан
источник
поскольку обычно они взаимозаменяемы, зачем вам мнемоника?
Sapphire_Brick
44

Очень общее определение основного различия между функцией и методом :

Функции определяются вне классов, а методы - внутри и внутри классов.

Jorgesys
источник
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.

В конце концов это просто концепция, в реализации они могут выглядеть одинаково, но в документации ОО это называется методом.

Вот пример ранее работающего объекта в 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
Браво! Блестящее изложение того, как методы являются командами для объектов. Это является ключом к пониманию ОО, а отсутствие риторики, которую вы демонстрируете в этом ответе, является причиной того, что ОО так злоупотребляют в отрасли сегодня. Отличный пост.
moffdub
18

В мире ОО эти два понятия обычно означают одно и то же.

С точки зрения чистой математики и CS, функция всегда будет возвращать один и тот же результат при вызове с одинаковыми аргументами (f (x, y) = (x + y)). С другой стороны, метод, как правило, связан с экземпляром класса. Тем не менее, большинство современных ОО-языков больше не используют термин «функция» по большей части. Многие статические методы могут быть очень похожи на функции, так как они обычно не имеют состояния (не всегда true).

TheSoftwareJedi
источник
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 () и cos () также являются функциями. Функция имеет другое свойство: все вызовы функции с одинаковыми параметрами должны возвращать один и тот же результат.

Метод, с другой стороны, является функцией, которая связана с объектом на объектно-ориентированном языке. У него есть один неявный параметр: объект, на который воздействуют (и это состояние).

Итак, если у вас есть объект Z с методом g (x), вы можете увидеть следующее:

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

В этом случае передается параметр x, такой же, как в предыдущем примере функции. Однако параметр cos () - это значение, которое живет внутри объекта Z. Z, а данные, которые живут внутри него (Zy), являются неявными параметрами для метода g ().

Брэдли Мазурек
источник
13

Функция или метод - это именованный вызываемый фрагмент кода, который выполняет некоторые операции и при необходимости возвращает значение.

В языке Си используется термин функция. Java & C # люди сказали бы, что это метод (и функция в этом случае определяется внутри класса / объекта).

Программист 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.
Юша Алеауб
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: единственное отличие - это имя первого параметра (в функции, которую я назвал «приветствующий», в методе, которую я назвал «self»). Таким образом, я могу использовать 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).

(ОО-пуристы могут утверждать, что метод является чем-то отличным от функции, и если вы попадаете в продвинутый Python или Ruby - или Smalltalk! - вы начнете понимать их точку зрения. Также некоторые языки предоставляют методам специальный доступ к битам объекта. основным концептуальным отличием остается скрытый дополнительный параметр.)

Сэм Стоукс
источник
7

для меня: функция метода и функция одинаковы, если я согласен с тем, что:

  • функция может возвращать значение
  • может ожидать параметры

Как и любой фрагмент кода, у вас могут быть объекты, которые вы вставляете, и у вас может быть объект, который получается в результате. При этом они могут изменить состояние объекта, но это не изменит их основное функционирование для меня.

Может быть определение различий в вызове функций объектов или других кодов. Но разве это не для словесных различий, и поэтому люди обмениваются ими? Упомянутый пример вычисления, с которым я был бы осторожен. потому что я нанимаю сотрудников для моих расчетов:

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

Делая это таким образом, я могу рассчитывать на то, что работодатель будет нести ответственность за расчеты. Если он хочет больше денег, я освобождаю его и позволяю функции сборщика мусора избавляться от неиспользованных сотрудников делать все остальное и получать нового сотрудника.

Даже спор о том, что метод является функцией объектов, а функция не связана с вычислениями, мне не поможет. Сам дескриптор функции и в идеале документация функции скажет мне, что ей нужно и что она может вернуть. Все остальное, как манипулирование состоянием какого-либо объекта, не совсем прозрачно для меня. Я ожидаю, что и функции и методы доставят и манипулируют тем, на что они претендуют, без необходимости подробно знать, как они это делают. Даже чисто вычислительная функция может изменить состояние консоли или добавить в файл журнала.

Дирк Шумахер
источник
5

Давайте не будем слишком усложнять то, что должно быть очень простым ответом. Методы и функции - это одно и то же. Вы вызываете функцию как функцию, когда она находится вне класса, и вызываете функцию как метод, когда она написана внутри класса.

SamyCode
источник
4

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

Во многих языках методы представлены функциями и подпрограммами. Основное различие, которое большинство языков используют для них, состоит в том, что функции могут возвращать значение обратно вызывающей стороне, а подпрограмма - нет. Однако многие современные языки имеют только функции, но они могут по выбору не возвращать никакого значения.

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

marcj
источник
4

В приближении первого порядка метод (в ОО стиле C ++) - это другое слово для функции-члена, то есть функции, являющейся частью класса.

В таких языках, как C / C ++, у вас могут быть функции, которые не являются членами класса; Вы не вызываете функцию, не связанную с классом, методом.

Капитан сегфо
источник
4

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

Метод - это концепция объектно-ориентированного программирования, где метод является членом класса, который в основном выполняет обработку для членов класса.

Акшай Хале
источник
3

ИМХО люди просто хотели придумать новое слово для облегчения общения между программистами, когда они хотели ссылаться на функции внутри объектов.

Если вы говорите методы, вы имеете в виду функции внутри класса. Если вы говорите «функции», вы имеете в виду просто функции вне класса.

Правда в том, что оба слова используются для описания функций. Даже если вы использовали это неправильно, ничего плохого не происходит. Оба слова хорошо описывают, чего вы хотите достичь в своем коде.

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

Это делает то же самое. Это то же самое. Если вы хотите быть очень точным и следовать соглашению, вы можете вызывать методы как функции внутри объектов.

Morfidon
источник
2

Я не эксперт, но вот что я знаю:

  1. Функция - это язык языка C, он ссылается на фрагмент кода, а имя функции будет идентификатором для использования этой функции.

  2. Метод - это термин OO, обычно он имеет указатель this в параметре функции. Вы не можете вызвать этот кусок кода, как C, вам нужно использовать объект для его вызова.

  3. Методы вызова также различны. Здесь используйте значение для поиска адреса этого фрагмента кода. C / C ++, время компоновки будет использовать символ функции для определения местоположения.

  4. Objecive-C отличается. Вызывать значение функции C для использования структуры данных для поиска адреса. Это означает, что все известно во время выполнения.

Marvin
источник
2

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

Метод - это функция, у которой есть определенный получатель, в терминах ООП метод - это функция для экземпляра объекта.

е-общество
источник
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(); здесь 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 Object Method , Функции , Больше информации о прототипе

Лахар Шах
источник
Пожалуйста, не публикуйте одинаковые ответы на несколько вопросов. Отправьте один хороший ответ, затем проголосуйте / пометьте, чтобы закрыть другие вопросы как дубликаты. Если вопрос не является дубликатом, адаптируйте свои ответы на вопрос.
Пол Руб 21
Спасибо за отзыв, я не адаптировал другой ответ, я удалил этот ответ. :-)
Лахар Шах
1

TL; DR

Функция - это кусок кода для запуска.
Метод - это функция внутри объекта.

Пример функции:


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

Пример метода:

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

Вот почему мы говорим, что ключевое слово «this» внутри функции не очень полезно, если только мы не используем его с call, apply или bind .. потому что call, apply, bind будет вызывать эту функцию как метод внутри object ==> в основном это преобразовывает функцию в метод

Йогендра Саксена
источник
1

Они часто взаимозаменяемы, но метод обычно ссылается на подпрограмму внутри класса, а функция обычно ссылается на подпрограмму вне класса. например, в Ruby:

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


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

В Java, где все (кроме операторов package и import) должно быть внутри класса, люди почти всегда называют их «методами».

Sapphire_Brick
источник