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

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

30.09.2008 23:45:10
Когда значением свойства является функция, мы называем это методом
coder 29.08.2014 19:21:37
Что является противоположностью метода? Это мой вопрос. «Функция» является родительским понятием. Метод - это тип функции. Как называется тип функции, которая не является методом, но может вызываться напрямую по имени?
Alexander Mills 22.09.2016 17:56:40
Было бы интересно увидеть другое объяснение, описывающее разницу между методами и функциями в r . Это интересно, так как метод обычно содержит функцию . Если метод является объектно-зависимой функцией, то проверка функции для класса объекта if(class(object)) { ... } else {stop()}будет концептуально эквивалентна методу?
Konrad 17.09.2017 19:18:36
30 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

1810
19.12.2016 10:27:06
Для 1), вы также должны добавить, что методы в C ++ называются функциями- членами . Таким образом, разница между функциями и методами в этом контексте аналогична разнице между функциями и функциями-членами в C ++. Кроме того, языки, подобные Java, имеют только методы. В этом случае функции будут аналогичны статическим методам, а методы будут иметь одинаковое значение. Для пункта 2) следует добавить, что метод может работать с данными частного экземпляра (члена), объявленными как часть класса. Любой код может получить доступ к общедоступным данным экземпляра.
Raffi Khatchadourian 13.06.2012 21:59:01
функция - это математическая конструкция. Я бы сказал, что все методы являются функциями, но не все функции являются методами
Tyler Gillies 9.05.2013 20:22:52
Исходя из опыта функционального программирования, я чувствую, что есть глубокая разница между функцией и методом. В основном методы имеют побочные эффекты, и функции должны быть чистыми, что дает довольно приятное свойство ссылочной прозрачности
HHC 2.07.2013 02:26:09
@TylerGillies и HHC, я согласен, было бы неплохо, если бы «функция» и «метод» означали то, что вы от них хотели, но ваши определения не отражают очень распространенное использование этих терминов.
Paul Draper 15.10.2013 05:07:30
По этому определению не будет ли статический метод фактически не считаться методом, потому что он не имеет ничего общего с конкретным экземпляром?
Carcigenicate 22.05.2015 16:44:17

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

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

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

952
22.03.2020 15:18:50
Настало время добавить C #.
Rosdi Kasim 21.03.2014 08:15:25
@RosdiKasim Для C # есть только методы. (поскольку даже статические методы должны быть связаны с объектом)
Lynn Crumbling 7.04.2014 13:14:30
Как насчет статических методов в классе? Они будут независимы от объекта (в Java). Разве это не было бы функцией тогда?
Squeazer 15.04.2014 08:00:25
@Squeazer Есть вопрос о том, что в последнее время stackoverflow.com/questions/30402169/… Спецификация языка Java отличается от них только как «метод класса» (статический) и «метод экземпляра». Таким образом, они все еще все методы.
xji 27.05.2015 08:31:54
У Java есть лямбда-выражения, которые являются функциями, которые не являются методами
Max Heiber 7.01.2016 04:07:51

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

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

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

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


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

223
23.05.2017 12:02:48
Метод - это особый тип функции с передаваемым неявным аргументом (экземпляр класса, для которого определен метод). Это важно, так как функция, строго говоря, не должна использовать или изменять что-либо, отсутствующее в списке аргументов.
ty1824 4.11.2014 09:39:18
@ ty1824 это не всегда так, что методы передают неявные аргументы. В Python selfаргумент является явным. И во многих языках есть статические методы, которым не передается экземпляр.
Max Heiber 7.01.2016 04:09:31
@ Mheiber это некоторые действительные точки. Что касается себя, вы правы, это явно определено . Ключ в том, что вызов неявный, основанный на исходной ссылке на объект. Есть языки, которые поддерживают переопределение thisили self, но эти конструкции обычно называют функциями, а не методами.
ty1824 7.01.2016 04:17:06
@mheiber Что касается статических методов - java реализовал их как обходной путь, чтобы функции могли быть реализованы без контекста. Я бы сказал, что «статический метод» является вводящим в заблуждение термином и должен быть заменен ... в идеальном теоретическом мире :)
ty1824 7.01.2016 04:20:35
@ ty1824 C ++, Scala, Python, Ruby, JavaScript и Scala имеют статические методы, поэтому я не думаю, что это просто Java. Мне они тоже не нравятся: они равносильны использованию объектов (связок состояния), как если бы они были пространствами имен.
Max Heiber 7.01.2016 04:49:28

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

Возьмите следующий пример с 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», поскольку она не принадлежит ни одному классу, так как можно кормить как людей, так и собак, и вы можете вызвать эту функцию, поскольку она не принадлежит ни к какому классу в частности.

97
17.11.2014 01:41:29
Этот ответ - в основном его первое предложение - безусловно, самый краткий и в целом лучший ответ на вопрос.
yourcomputergenius 31.08.2018 22:19:37

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

  • F unction → F ree (Свободный означает, что не принадлежит объекту или классу)
  • M ethod → M ember (член объекта или класса)
60
8.10.2017 00:07:41
поскольку обычно они взаимозаменяемы, зачем вам мнемоника?
Sapphire_Brick 24.12.2019 15:04:09

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

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

44
1.09.2016 06:54:36

Если вы чувствуете, что читаете здесь, это «Мое введение в ОО методы»

Идея, лежащая в основе объектно-ориентированной парадигмы, заключается в том, чтобы «угрожать» программному обеспечению из… хорошо «объектов». Объекты в реальном мире имеют свойства, например, если у вас есть Сотрудник, у сотрудника есть имя, идентификатор сотрудника, должность, он принадлежит отделу и т. Д. И т. Д.

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

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.

30
1.10.2008 00:35:47
Браво! Блестящее изложение того, как методы являются командами для объектов. Это является ключом к пониманию ОО, а отсутствие риторики, которую вы демонстрируете в этом ответе, является причиной того, что ОО так злоупотребляют в отрасли сегодня. Отличный пост.
moffdub 1.10.2008 01:17:49

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

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

18
30.09.2008 23:56:16

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

Метод - это функция, которой владеет объект (в некоторых объектно-ориентированных системах правильнее будет сказать, что он принадлежит классу). «Владение» объектом / классом означает, что вы обращаетесь к методу через объект / класс; например, в Java, если вы хотите вызвать метод "open ()", принадлежащий объекту "door", вам нужно написать "door.open ()".

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

Во многих объектно-ориентированных языках все «функции» принадлежат некоторому объекту (или классу), поэтому в этих языках нет функций, которые не являются методами.

17
1.10.2008 00:05:53
Я считал, что методы могут принадлежать объекту или классу, поскольку Javascript (который вы упомянули в своем вопросе) является одним из языков, который отражает общую тенденцию объектно-ориентированных языков, поскольку методы принадлежат объектам, а не классам (хотя структуры похожи на классы существуют).
Mike Tunnicliffe 1.10.2008 00:10:02

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

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

15
30.09.2008 23:52: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
1.10.2008 00:54:03

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

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

Программист на C ++ может назвать это функцией или иногда методом (в зависимости от того, пишут ли они код на языке C ++ процедурного стиля или делают объектно-ориентированный способ на C ++, программист, работающий только на C / C ++, скорее всего назовет его функцией, потому что термин «метод» реже используется в литературе C / C ++).

Вы используете функцию, просто вызывая ее имя, как,

result = mySum(num1, num2);


Вы бы вызвали метод, ссылаясь сначала на его объект, как,

result = MyCalc.mySum(num1,num2);
13
26.03.2015 23:10:18

Исторически сложилось так, что между «методом» было нечто, что не возвращает значения, и «функцией», которая делает это. В каждом языке есть свой собственный словарь терминов со специальным значением.

В «С» слово «функция» означает подпрограмму программы .

В Java термин «функция» не имеет особого значения. Принимая во внимание, что «метод» означает одну из подпрограмм, которая формирует реализацию класса.

В C # это будет переводиться как:

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

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

13
4.02.2016 10:33:11
На самом деле, в вашем примере оба method... или я бы назвал это procedureи function.
Yousha Aleayoub 11.03.2017 09:16:04

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

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

9
3.12.2008 09:47:08

Методы класса действуют на экземпляр класса, называемый объектом.

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
30.09.2008 23:57:38

В ОО-языках, таких как Object Pascal или C ++, «метод» - это функция, связанная с объектом. Так, например, объект «Собака» может иметь функцию «кора», и это будет считаться «Методом». Напротив, функция «StrLen» стоит отдельно (она предоставляет длину строки, предоставленной в качестве аргумента). Таким образом, это просто «функция». Javascript также технически ориентирован на объект, но сталкивается со многими ограничениями по сравнению с полноценным языком, таким как C ++, C # или Pascal. Тем не менее, это различие должно сохраняться.

Пара дополнительных фактов: C # полностью объектно-ориентирован, поэтому вы не можете создавать автономные «функции». В C # каждая функция связана с объектом и, таким образом, технически является «методом». Главное, что в C # мало кто называет их «методами» - они просто используют термин «функции», потому что не нужно проводить никаких различий.

Наконец, точно так же, как и все гуру Паскаля, не прыгайте на меня здесь. Паскаль также различает «функции» (которые возвращают значение) и «процедуры», которые этого не делают. C # не делает этого различия явно, хотя вы, конечно, можете выбрать, возвращать значение или нет.

8
30.09.2008 23:59:25

Поскольку вы упомянули 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! - вы начнете понимать их точку зрения. Также некоторые языки предоставляют методам специальный доступ к битам объекта. Но основным концептуальным отличием остается скрытый дополнительный параметр.)

8
1.10.2008 01:20:03

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

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

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

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

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

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

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

7
13.04.2012 09:50:07

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

5
14.12.2017 14:03:07

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

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

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

4
30.09.2008 23:53:50

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

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

4
1.10.2008 00:00:07

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

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

4
10.11.2015 14:23:44

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

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

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

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

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

3
27.06.2015 16:15:57

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

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

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

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

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

2
26.03.2015 23:10:58

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

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

2
23.04.2017 23:11:23

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

Из чтения этого документа на Microsoft

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

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

2
15.12.2017 18:42:27
Свойства, индексаторы и события не являются функциями. Получатели, установщики (для свойств и индексаторов), сумматоры и съемники (для событий) являются функциями. Члены функции - это члены, которые связаны с одной или несколькими функциями, но необязательно являются функцией.
Jon Hanna 12.01.2018 20:50:08

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

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

2
17.01.2019 08:35:50
Что вы называете фрагментом кода в статическом классе, который также является статическим, это метод или функция? Статическая функция / метод класса не нуждается в объекте класса, в котором он объявлен.
Wolfgang Roth 21.08.2019 07:11:22

Вот некоторые объяснения метода и функции с использованием примеров 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 , Функции , Больше информации о прототипе

1
28.09.2017 14:32:56
Пожалуйста, не публикуйте одинаковые ответы на несколько вопросов. Отправьте один хороший ответ, затем проголосуйте / пометьте, чтобы закрыть другие вопросы как дубликаты. Если вопрос не является дубликатом, адаптируйте свои ответы на вопрос.
Paul Roub 28.09.2017 14:17:40
Спасибо за отзыв, я не адаптировал другой ответ, я удалил этот ответ. :-)
Lahar Shah 28.09.2017 14:30:05

TL; DR

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

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


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

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

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

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

1
20.12.2019 07:11:11

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

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


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

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

1
24.12.2019 15:02:19