Чем отличается "метод" от "функции"
Неоднократно видел использование термина «метод» для обозначения функций-членов классов в противоположность термину «функция» для обозначения «свободных» функций нечленов. С другой стороны, в текстах о Си++, часто всё называют «функцией» и члены и нечлены.
Собственно, какова разница между терминами «метод» и «функция», почему в Си++ члены не называют «методами»?
![]()
И чего так много слов то? Все просто:
Метод всегда является функцией, а функция не всегда является методом.
Нет единой устоявшейся техники наименования сущностей в языках программирования и каждый язык, чтобы немного отличаться от других, по историческим причинам имеет свой набор названий и соглашений.
Так как программирование пришло с математики, то начальные корни нужно искать там. А там были функции и процедуры. Функция на основании своих аргументов генерирует какой-то результат. sin , cos — яркие примеры. Функция без аргументов — вырожденный вариант и обычно это константа. В математике обычно функции являются чистыми — то есть, у них нет побочных эффектов. То есть, вызов функции с одними и теми же аргументами дает один и тот же результат.
Параллельно существуют процедуры. Процедура — это последовательность действий, приводящая к определенному результату (да, обычная программа — это также может быть процедура, хотя. ). В паскале и фортране принято, что процедура не возвращает результат. Но я считаю, что это исключительно соглашение, потому что иначе нужно было бы делать как в C/C++ и вводить пустой тип (void).
почему в Си++ члены не называют «методами»?
Во многих языках 60-70 годов не было ООП в том понимании, которое известно сейчас. С++ изначально был просто «фронтом» (то есть надстройкой) над обычным Си. Был долгий период, когда это уже был не Си, но и ещё и не C++. Компилятора C++ не было, а был транслятор в Си. Видимо, поэтому там закрепилось функция класса/переменная класса. Сейчас Страуструп предлагает N4174, и если его примут, то грань между обычными функциями и функциями класса размоется ещё больше.
В других языках — Java и семейство, проектировались, когда уже ООП был немного сформированным. От обычных функций они решили отказаться и, видимо, чтобы не вызывать путаницу, обозвали все методами. Да, потом им пришлось функции все-таки вернуть назад, но, чтобы ничего не сломать, назвали это статическими методами.
Собственно, какова разница между терминами «метод» и «функция»
Правильный ответ — историческая. Как правильно называть сущности в разных языках, нужно уточнять в их документации.
многие автора книг по с++ называют функции класса методами. Как быть?
Тут все сложно. Например, Эккель так делает видимо потому, что он ещё и много книг о Java написал. Также не стоит забывать, что многие книги мы читаем в переводе, а они «исправляют», потому что переводчику так понятнее.
так можно ли называть функции класса с++ методами?
Это точно так же, как использовать мат/обсценную лексику в высшем обществе. Или пытаться объясниться с гопниками языком Тургенева и стихами Пушкина/Блока.
Чем отличаются понятия функции, процедуры и метода в программировании?

1 — в контексте парадигм, из данных понятий уникально одно Метод, как уже было сказано D3lphi, это нечто принадлежащее классу. класс, в свою очередь, это фундаментальное понятие ООП основанного на классах (шарм ситуации в том, что ООП бывает тоже разное ;))
в этом случае чаще принято уточнять что метод — это один из видов челнов класса (бывают еще поля, свойства, интерфейсы но это уже контекст конкретного языка) .. и как верно заметил Griboks — он реализуется функцией или процедурой
но .. есть много языков, где понятия метод нет вообще
а еще есть функциональное программирование .. эта парадигма частично присутствует во многих современных языках, однако есть языки, где любой код только функция
2 — из контекста языков:
понятие процедура в явном виде, чаще всего употребляют преподаватели, которые сами учились на языках типа Fortran, Pascal или родственных, и либо не имели другого опыта вообще, либо иной опыт был на много скромнее
сейчас доминируют языки, основывающиеся на Си синтаксисе, даже java и js в данном вопросе станут родственниками классического Си
а в нем нет понятия процедуры, только функции.. а на случай, когда функция не обязана возвращать какую либо величину, просто указывается тип возвращаемого значения void
смешение всего этого на примере C# — в этом языке, все есть объект. а любой исполняемый код это метод, и методы реализуются только функциями (в тч void функциями)
В чем разница между методом и функцией?
Может ли кто-нибудь дать простое объяснение методов и функций в контексте ООП?
31 ответ
функция — это фрагмент кода, который вызывается по имени. В него могут быть переданы данные для работы (т.е. параметры) и могут при необходимости возвращаться данные (возвращаемое значение). Все данные, которые передаются в функцию, передаются явно.
Метод — это фрагмент кода, который вызывается именем, связанным с объектом. Во многих отношениях она идентична функции, за исключением двух ключевых отличий:
- В метод неявно передается объект, для которого он был вызван.
- Метод может работать с данными, содержащимися в классе (помня, что объект является экземпляром класса — класс — это определение, объект — это экземпляр этих данных).
(это упрощенное объяснение, игнорирующее проблемы области действия и т. д.)
«метод» — это объектно-ориентированное слово, обозначающее «функция» . Это почти все (то есть никакой реальной разницы).
К сожалению, я думаю, что многие ответы здесь увековечивают или продвигают идею о том, что существует какое-то сложное, значимое различие.
На самом деле — в этом нет ничего особенного, просто разные слова для одного и того же.
Фактически, как отметил Брайан Нил в комментарии к этот вопрос, стандарт C ++ никогда не использует термин «метод» применительно к функциям-членам. Некоторые люди могут воспринять это как указание на то, что C ++ на самом деле не объектно-ориентированный язык; однако я предпочитаю воспринимать это как указание на то, что довольно умная группа людей не думала, что существует особо веская причина для использования другого термина.
Простой способ запомнить:
- Функция F → F ree («Свободно» означает, что она может быть где угодно, не обязательно быть в объекте или классе)
- M ethod → M ember (член объекта или класса)
Очень общее определение основного различия между функцией и методом :
Функции определены вне классов, а методы определены внутри классов и как их часть.
Функция — это концепция, в основном относящаяся к процедурно-ориентированному программированию , где функция — это объект, который может обрабатывать данные и возвращать вам значение.
Метод — это концепция объектно-ориентированного программирования , в которой метод является членом класса, который в основном выполняет обработку членов класса.
Я не специалист, но знаю следующее:
Функция — это термин языка C, он относится к фрагменту кода, и имя функции будет идентификатором для использования этой функции.
Метод — это объектно-ориентированный термин, обычно он имеет указатель this в параметре функции. Вы не можете вызывать этот фрагмент кода, например C, вам нужно использовать объект для его вызова.
Методы вызова также разные. Здесь вызывается значение, чтобы найти адрес этого фрагмента кода. C / C ++, время компоновки будет использовать символ функции для поиска.
Objecive-C другой. Invoke означает, что функция C использует структуру данных для поиска адреса. Это означает, что во время выполнения все известно.
Функция — это фрагмент кода, который нужно запустить.
Метод — это функция внутри объекта.
Вот почему мы говорим, что ключевое слово this внутри функции не очень полезно, если мы не используем его с вызовом, применением или привязкой . потому что вызов, применение, привязка вызовет эту функцию как метод внутри объекта ==> в основном это преобразует функцию в метод
Функция — это математическое понятие. Например:
Говорит, что функция f () вернет sin первого параметра, добавленного к косинусу второго параметра. Это просто математика. Оказалось, что sin () и cos () также являются функциями. У функции есть еще одно свойство: все вызовы функции с одинаковыми параметрами должны возвращать один и тот же результат.
С другой стороны, метод — это функция, связанная с объектом на объектно-ориентированном языке. У него есть один неявный параметр: объект, над которым действуют (и его состояние).
Итак, если у вас есть объект Z с методом g (x), вы можете увидеть следующее:
В этом случае передается параметр x, как и в предыдущем примере функции. Однако параметр cos () — это значение, которое живет внутри объекта Z. Z и данные, которые живут внутри него (Z.y), являются неявными параметрами для метода Z g ().
Исторически сложилось так, что могла существовать тонкая разница в том, что «метод» — это то, что не возвращает значения, и «функция», которая это делает. Каждый язык имеет свой собственный словарь терминов со специальным значением. .
В слове «C» слово «функция» означает программу .
В Java термин «функция» не имеет особого значения. В то время как «метод» означает одну из процедур, которая формирует реализацию класса.
В C # это можно перевести как:
Но на самом деле, я повторяю, что на самом деле нет никакой разницы в двух концепциях. Если вы используете термин «функция» в неформальных обсуждениях Java, люди подумают, что вы имели в виду «метод», и продолжите. Не используйте его в надлежащих документах или презентациях о Java, иначе вы будете выглядеть глупо.
Функция или метод — это именованный вызываемый фрагмент кода, который выполняет некоторые операции и, при необходимости, возвращает значение.
В языке C используется термин функция. Люди, использующие Java и C # , назвали бы это методом (а функция в этом случае определяется внутри класса / объекта).
Программист C ++ может называть это функцией или иногда методом (в зависимости от того, пишут ли они код на C ++ в процедурном стиле или используют объектно-ориентированный способ C ++, также программист, работающий только на C / C ++, скорее всего, назвал бы это функция, потому что термин «метод» реже используется в литературе по C / C ++).
Вы используете функцию, просто вызывая ее по имени
Вы могли бы вызвать метод, сначала сославшись на его объект, например,
Функция — это набор логики, который можно использовать для управления данными.
В то время как метод — это функция, которая используется для управления данными объекта, которому он принадлежит. Так что технически, если у вас есть функция, которая не полностью связана с вашим классом, но была объявлена в классе, это не метод; Это называется плохой дизайн.
Методы класса действуют на экземпляр класса, называемый объектом.
В объектно-ориентированных языках, таких как Object Pascal или C ++, «метод» — это функция, связанная с объектом. Так, например, объект «Собака» может иметь функцию «лай», и это будет считаться «методом». Напротив, функция «StrLen» стоит отдельно (она предоставляет длину строки, предоставленной в качестве аргумента). Таким образом, это просто «функция». Javascript технически также объектно-ориентирован, но сталкивается со многими ограничениями по сравнению с полноценным языком, таким как C ++, C # или Pascal. Тем не менее, различие все же должно сохраняться.
Еще пара фактов: C # полностью объектно-ориентирован, поэтому вы не можете создавать автономные «функции». В C # каждая функция привязана к объекту и, таким образом, технически является «методом». Самое интересное в том, что немногие в C # называют их «методами» — они просто используют термин «функции», потому что здесь нет никакого реального различия.
И, наконец, чтобы ни один гуру Паскаля не набросился на меня, Паскаль также различает «функции» (которые возвращают значение) и «процедуры», которые этого не делают. C # не делает этого различия явно, хотя вы, конечно, можете выбрать, возвращать значение или нет.
Поскольку вы упомянули Python, нижеследующее может быть полезной иллюстрацией взаимосвязи между методами и объектами в большинстве современных объектно-ориентированных языков. Вкратце, то, что они называют «методом», — это просто функция, которой передается дополнительный аргумент (как указывали другие ответы), но Python делает это более явным, чем большинство языков.
Теперь сравните функцию greet_with_greeter и метод greet : единственная разница — это имя первого параметра (в функции, которую я назвал «greeter», в методе я назвал «self»). Таким образом, я могу использовать метод greet точно так же, как я использую функцию greet_with_greeter (используя синтаксис «точка», чтобы добраться до нее, поскольку я определил ее внутри класса):
Итак, я фактически превратил метод в функцию. Могу ли я превратить функцию в метод? Что ж, поскольку Python позволяет вам связываться с классами после их определения, давайте попробуем:
Да, функция greet_with_greeter теперь также известна как метод greet2 . Это показывает единственное реальное различие между методом и функцией: когда вы вызываете метод «для» объекта, вызывая object.method(args) , язык волшебным образом превращает его в method(object, args) .
(Сторонники объектно-ориентированного подхода могут утверждать, что метод — это нечто отличное от функции, и если вы перейдете к продвинутому Python или Ruby — или Smalltalk! — вы начнете понимать их точку зрения. Также некоторые языки предоставляют методам особый доступ к частям объекта. Но основное концептуальное отличие по-прежнему заключается в скрытом дополнительном параметре.)
Для меня: функция метода и функция одинаковы, если я согласен с тем, что:
- функция может возвращать значение
- может ожидать параметры
Как и любой фрагмент кода, у вас могут быть объекты, которые вы вставляете, и у вас может быть объект, который появляется в результате. При этом они могут изменить состояние объекта, но для меня это не повлияет на их основные функции.
Могут быть различия в определении функций вызова объектов или других кодов. Но разве это не что-то для словесных различий, и поэтому люди их обменивают? Упомянутый пример вычисления, с которым я был бы осторожен. потому что нанимаю сотрудников для расчетов:
Поступая таким образом, я могу положиться на работодателя, который будет отвечать за расчеты. Если он хочет больше денег, я освобождаю его, а функция сборщика мусора по утилизации неиспользуемых сотрудников сделает все остальное и найду нового сотрудника.
Мне не поможет даже утверждение, что метод является функцией объекта, а функция — несвязанным вычислением. Сам дескриптор функции и, в идеале, документация по функции скажут мне, что ему нужно и что он может вернуть. Остальное, например, управление состоянием какого-либо объекта, для меня не совсем прозрачно. Я действительно ожидаю, что и функции, и методы доставляют и манипулируют тем, на что они претендуют, без необходимости подробно знать, как они это делают. Даже чистая вычислительная функция может изменить состояние консоли или добавить ее в файл журнала.
Насколько я понимаю, метод — это любая операция, которую можно выполнить с классом. Это общий термин, используемый в программировании.
Во многих языках методы представлены функциями и подпрограммами. Основное различие, которое используется для этого в большинстве языков, заключается в том, что функции могут возвращать значение обратно вызывающей стороне, а подпрограмма — нет. Однако во многих современных языках есть только функции, но они могут не возвращать никакого значения.
Например, вы хотите описать кошку и хотите, чтобы она могла зевать. Вы должны создать класс Cat с методом Yawn, который, скорее всего, будет функцией без какого-либо возвращаемого значения.
В первом приближении метод (в стиле C ++ OO) — это другое слово для функции-члена, то есть функции, которая является частью класса.
В таких языках, как C / C ++, у вас могут быть функции, не являющиеся членами класса; вы не вызываете функцию, не связанную с классом или методом.
ИМХО люди просто хотели придумать новое слово для облегчения общения между программистами, когда они хотели ссылаться на функции внутри объектов.
Если вы говорите о методах, вы имеете в виду функции внутри класса. Если вы говорите функции, вы имеете в виду просто функции вне класса.
На самом деле оба слова используются для описания функций. Даже если вы использовали его неправильно, ничего плохого не произойдет. Оба слова хорошо описывают то, чего вы хотите достичь в своем коде.
Функция — это код, который должен выполнять какую-либо роль ( функцию ) для чего-то. Метод — это метод для решения проблемы.
То же самое. Это то же самое. Если вы хотите быть очень точным и согласиться с соглашением, вы можете вызывать методы как функции внутри объектов.
Давайте не будем слишком усложнять то, что должно быть очень простым ответом. Методы и функции — это одно и то же. Вы вызываете функцию функцией, когда она находится вне класса, и вызываете функцию методом, когда она написана внутри класса.
Я знаю, что многие другие уже ответили, но я обнаружил, что следующий простой, но эффективный однострочный ответ. Хотя он не выглядит намного лучше, чем другие ответы здесь, но если вы внимательно его прочитаете, в нем есть все, что вам нужно знать о методе vs функции.
Метод — это функция, у которой есть определенный приемник, в терминах ООП метод — это функция для экземпляра объекта.
В C ++ иногда используется метод, чтобы отразить понятие функции-члена класса. Однако недавно я нашел утверждение в книге «Язык программирования C ++ 4-е издание» на странице 586 «Производные классы».
Виртуальную функцию иногда называют методом.
Это немного сбивает с толку, но он сказал иногда , так что примерно это имеет смысл, создатель C ++ склонен видеть методы как функции, которые могут быть вызваны для объектов и могут вести себя полиморфно.
Вот некоторые объяснения метода и функции на примерах JavaScript:
test(20, 50); — определение функции и ее использование для выполнения некоторых шагов или возврата чего-то, что можно где-то сохранить / использовать.
Вы можете повторно использовать код: определите код один раз и используйте его много раз.
Вы можете использовать один и тот же код много раз с разными аргументами для получения разных результатов.
var test = something.test(); здесь test () может быть методом некоторого объекта или настраиваемым прототипом для встроенных объектов. Вот дополнительные пояснения:
Методы JavaScript — это действия, которые можно выполнять с объектами.
Метод JavaScript — это свойство, содержащее определение функции.
В чем разница между методом и функцией?
может кто-нибудь дать простое объяснение методы и функции в контексте ООП?
30 ответов
A функции — это кусок кода, который называется по имени. Это могут быть переданные данные для работы (т. е. параметры) и могут опционально возвращать данные (возвращаемое значение). Все данные, передаваемые функции, передаются явно.
A метод — Это фрагмент кода, который вызывается именем, связанным с объектом. В большинстве случаев он идентичен функции, за исключением двух ключевых отличий:
- метод неявно сдали объект, на котором он был вызван.
- метод может работать с данными, содержащимися в классе (помня, что объект является экземпляром класса — класс является определением, объект является экземпляром этих данных).
(это упрощенное объяснение, игнорируя вопросы область etc.)
метод объекта.
Функция не зависит от объекта.
для Java существуют только методы.
Для C существуют только функции.
для C++ это будет зависеть от того, находитесь ли вы в классе.
‘method’ — объектно-ориентированное слово для ». Это в значительной степени все, что есть (т. е. нет реальной разницы).
к сожалению, я думаю, что многие ответы здесь увековечивают или продвигают идею о том, что есть какая-то сложная, значимая разница.
на самом деле-не так уж много, просто разные слова для одного и того же.
в самом деле, как Брайан Нил указано в комментарии этот вопрос, стандарт C++ никогда не использует термин «метод» при ссылке на функции-члены. Некоторые люди могут принять это как указание на то, что C++ на самом деле не является объектно-ориентированным языком; однако я предпочитаю считать это признаком того, что довольно умная группа людей не думала, что есть особенно веская причина использовать другой термин.
В общем: методы-это функции, принадлежащие классу, функции могут находиться в любой другой области кода, поэтому вы можете указать, что все методы являются функциями, но не все функции являются методами:
Возьмите следующий пример python:
в приведенном примере показан класс под названием «Door», который имеет метод или действие под названием» open», он называется методом, потому что он был объявлен внутри класса. Существует еще одна часть кода с «def» чуть ниже которой определяет функцию, это функция, потому что она не объявлена внутри класса, эта функция вызывает метод, который мы определили внутри нашего класса, как вы можете видеть, и, наконец, функция вызывается сама по себе.
Как вы можете видеть, вы можете вызвать функцию в любом месте, но если вы хотите вызвать метод, либо вы должны передать новый объект того же типа, что и класс, объявленный метод (Class.method (object)) или вы должны вызвать метод внутри объекта (object.Метод()), по крайней мере, в питон.
подумайте о методах как о вещах, которые может делать только одна сущность, поэтому, если у вас есть класс Dog, имеет смысл иметь функцию bark только внутри этого класса, и это будет метод, если у вас есть также класс Person, имеет смысл написать функцию «feed», поскольку она не принадлежит ни к одному классу, так как люди и собаки могут быть накормлены, и вы можете назвать это функцией, так как она не принадлежит ни к одному классу в частности.
очень общее определение основного различия между функции и метод:
функции определяются вне классов, в то время как методы определяются внутри и частью классов.
если вы хотите прочитать здесь «мое введение в методы OO»
идея объектно-ориентированной парадигмы состоит в том, чтобы» угрожать » программному обеспечению .. ну «объекты». Объекты в реальном мире имеют свойства, например, если у вас есть сотрудник, у сотрудника есть имя, идентификатор сотрудника, должность, он принадлежит отделу и т. д. так далее.
объект также знает, как обращаться со своими атрибутами и выполнять некоторые операции над ними. Скажем, если мы хотим знать что сейчас делает сотрудник, мы бы спросили его.
что «whatAreYouDoing» — это» сообщение», отправленное объекту. Объект знает, как ответить на эти вопросы, говорят, что у него есть «метод» для решения вопроса.
Итак, то, как объекты должны выставлять свое поведение, называются методами. Методы, таким образом, объект артефакта должен что-то» делать».
другие возможные методы
функции в с другой стороны, язык программирования должен вычислять некоторые данные, например, у вас может быть функция addValues (8 , 8), которая возвращает 16
поскольку первые популярные языки программирования (такие как fortran, c, pascal ) не охватывали парадигму OO, они только называют эти артефакты «функциями».
например, предыдущая функция в C будет такой:
не «естественно» говорить, что объект имеет «функцию» для выполнения некоторого действия, поскольку функции больше связаны с математическими вещами, в то время как у сотрудника мало математики, но у вас могут быть методы, которые делают то же самое, что и функции, например, в Java это будет эквивалентная функция addValues.
знакомо? Это потому, что Java имеет свои корни на C++ и C++ на C.
в конце это просто концепция, в реализации они могут выглядеть одинаково, но в документации OO они называются метод.
Heres пример ранее Employee объекта в Java.
разница тогда находится в» домене», где она применяется.
AppleScript имеют идею» естественного языка » matphor, что в какой-то момент ОО имел. Например, Smalltalk. Я надеюсь, что вам будет разумно легче понять методы в объектах после прочтения этого.
Примечание: код не должен компилироваться, просто служить примером. Не стесняйтесь изменить пост и добавить пример.
простой способ запомнить:
- F → соборование Free (свободный означает не принадлежит объекту или классу)
- Method → Member (член объекта или класса)
в мире OO эти два обычно используются для обозначения одного и того же.
с точки зрения чистой математики и CS функция всегда будет возвращать тот же результат при вызове с теми же аргументами ( f(x,y) = (x + y) ). С другой стороны, метод обычно связан с экземпляром класса. Опять же, большинство современных языков OO больше не используют термин «функция» по большей части. Многие статические методы могут быть очень похожи на функции, поскольку они обычно не имеют состояния (не всегда верный.)
предположим, что функция-это блок кода (обычно со своей собственной областью, а иногда и с собственным закрытием), который может получать некоторые аргументы и также может возвращать результат.
метод-это функция, принадлежащая объекту (в некоторых объектно-ориентированных системах правильнее сказать, что она принадлежит классу). Быть «владельцем» объекта / класса означает, что вы ссылаетесь на метод через объект / класс; например, в Java, если вы хотите вызвать метод » open ()», принадлежащий объект » дверь «нужно написать «дверь».открытый.»)(
обычно методы также получают некоторые дополнительные атрибуты, описывающие их поведение в объекте / классе, например: видимость (связанная с объектно-ориентированной концепцией инкапсуляции), которая определяет, из каких объектов (или классов) может быть вызван метод.
во многих объектно-ориентированных языках все «функции» принадлежат какому-либо объекту (или классу), поэтому в этих языках нет функций, которые не методы.
функция-это математическое понятие. Например:
говорит, что функция f () вернет sin первого параметра, добавленного к Косинусу второго параметра. Это просто математика. Как это происходит, sin () и cos () также являются функциями. Функция имеет другое свойство: все вызовы функции с одинаковыми параметрами должны возвращать один и тот же результат.
метод, с другой стороны, является функцией, которая связана с объектом в объектно-ориентированной язык. Он имеет один неявный параметр: объект, на который действует (и его состояние).
Итак, если у вас есть объект Z с методом g( x), вы можете увидеть следующее:
в этом случае передается параметр x, такой же, как в примере функции ранее. Однако параметр cos () — это значение, которое живет внутри объекта Z. Z, а данные, которые живут внутри него (Z. y), являются неявными параметрами метода Z g ().
функция или метод-это именованный вызвать кусок кода, который выполняет некоторые операции и при необходимости возвращает значение.
на C язык используется функция термина. Java & C# люди сказали бы, что это метод (и функция в этом случае определяется в классе/объекте).
A C++ программист может назвать это функцией или иногда методом (в зависимости от того, пишут ли они процедурный стиль кода C++ или делают объектно-ориентированный способ c++, также C / C++ только программист, вероятно, назовет его функцией, потому что термин «метод» реже используется в литературе C/C++).
вы используете функцию, просто называя ее имя, как,
Вы могли бы вызвать метод, обратившись к его объекту сначала, как,
методы являются функциями классов. На обычном жаргоне люди обмениваются методами и функциями. В основном вы можете думать о них как об одном и том же (не уверен, что глобальные функции называются методами).
словарь терминов С особым смыслом.
на «C» слово «функции» означает обычная программа.
на Java термин «функции» не имеет особого значения. Поскольку «метод» означает одну из подпрограмм, которая формирует реализацию класса.
на C# что бы перевести как:
но на самом деле, я повторяю, что на самом деле нет никакой разницы в 2 концепциях. Если вы используете термин » функция «в неофициальных дискуссиях о Java, люди будут считать, что вы имели в виду» метод » и продолжаете. Не используйте его в надлежащих документах или презентациях о Java, или вы будете выглядеть глупо.
методы класса на экземпляр класса называется объектом.
в языках OO, таких как Object Pascal или C++, «метод» — это функция, связанная с объектом. Так, например, объект » собака «может иметь функцию» лай», и это будет считаться»методом». Напротив, функция «StrLen» стоит отдельно (она предоставляет длину строки, предоставленной в качестве аргумента). Это так просто a » функция.»Javascript также технически объектно-ориентирован, но сталкивается со многими ограничениями по сравнению с полномасштабным языком, таким как C++, C# или Паскаль. Тем не менее это различие должно сохраняться.
несколько дополнительных фактов: C# полностью объектно-ориентирован, поэтому вы не можете создавать автономные «функции.»В C# каждая функция привязана к объекту и, таким образом, технически, «метод.»Кикер заключается в том, что немногие люди в C# называют их «методами» — они просто используют термин «функции», потому что нет никакого реального различия.
наконец-просто так любой Паскаль гуру не прыгать на меня здесь-Паскаль также различает » функции «(которые возвращают значение) и» процедуры», которые этого не делают. C# не делает это различие явно, хотя вы можете, конечно, выбрать, возвращать значение или нет.
поскольку вы упомянули Python, следующее Может быть полезной иллюстрацией взаимосвязи между методами и объектами в большинстве современных объектно-ориентированных языков. В двух словах то, что они называют «методом», — это просто функция, которая получает дополнительный аргумент (как указывали другие ответы), но Python делает это более явным, чем большинство языков.
теперь сравните функцию greet_with_greeter и метод greet : единственное различие-это имя первого параметр (в функции я назвал его «встречающий», в методе я назвал его «само»). Поэтому я могу использовать greet метод точно так же, как я использую greet_with_greeter функция (используя синтаксис» точки», чтобы добраться до него, так как я определил его внутри класса):
таким образом, я эффективно превратил метод в функцию. Можно ли превратить функцию в метод? Ну, поскольку Python позволяет вам возиться с классами после их определения, давайте попробуем:
да, функция greet_with_greeter Теперь также известен как метод greet2 . Это показывает единственное реальное различие между методом и функцией: когда вы вызываете метод «on» объект, вызывая object.method(args) язык волшебным образом превращает его в method(object, args) .
(ОО пуристы могут утверждать, что метод отличается от функции, и если вы попадаете в расширенный Python или Ruby — или Smalltalk! — вы начнете понимать их точку зрения. Также некоторые языки предоставляют методы специального доступа к битам объекта. Но основным концептуальным отличием по-прежнему является скрытый дополнительный параметр.)
функция-это набор логики, который может использоваться для управления данными.
While, Method-это функция, которая используется для управления данными объекта, которому он принадлежит. Поэтому технически, если у вас есть функция, которая не полностью связана с вашим классом, но была объявлена в классе, это не метод; это называется плохим дизайном.
функция-это набор логики, который может использоваться для управления данными. В то время как метод-это функция, которая используется для управления данными объекта, которому он принадлежит. Поэтому технически, если у вас есть функция, которая не полностью связана с вашим классом, но была объявлена в классе, это не метод; это называется плохим дизайном.
для меня: функция метода и функции одинакова, если я согласен с тем, что:
- функция может возвращать значение
- можно ожидать параметры
Как и любой фрагмент кода, у вас могут быть объекты, которые вы вставляете, и у вас может быть объект, который приходит в результате. Во время этого они могут изменить состояние объекта, но это не изменит их основное функционирование для меня.
может быть различие в определении вызов функций объектов или других кодов. Но разве это не что-то для словесных различий, и поэтому люди обмениваются ими? Упоминает пример вычисления, с которым я был бы осторожен. потому что я нанимаю работников для своих расчетов:—2—>
делая это таким образом, я могу положиться на работодателя, ответственного за расчеты. Если он хочет больше денег, я освобождаю его и позволяю функции коллектора по утилизации неиспользованных сотрудников сделать все остальное и получить новый работник.
даже утверждение, что метод является функцией объектов, а функция не связана с вычислением, не поможет мне. Сам дескриптор функции и, в идеале, документация функции скажут мне, что ей нужно и что она может вернуть. Остальное, как манипулирование состоянием какого-то объекта, для меня не совсем прозрачно. Я ожидаю, что и функции, и методы будут доставлять и манипулировать тем, что они утверждают, без необходимости знать подробно, как они это делают. Даже чистый вычислительная функция может изменить состояние консоли или добавить файл журнала.
в моем понимании метод-это любая операция, которая может быть выполнена по классу. Это общий термин, используемый в программировании.
во многих языках методы представлены функциями и подпрограммами. Основное различие, которое большинство языков используют для них, заключается в том, что функции могут возвращать значение вызывающему объекту, а подпрограмма-нет. Однако многие современные языки имеют только функции, но они могут необязательно не возвращать никакого значения.
например, допустим вы хотите описать кошку, и вам хотелось бы, чтобы она могла зевать. Вы создадите класс Cat с методом Yawn, который, скорее всего, будет функцией без какого-либо возвращаемого значения.
в приближении первого порядка метод (в стиле C++ OO) — это еще одно слово для функции-члена, то есть функции, которая является частью класса.
в таких языках, как C/C++, вы можете иметь функции, которые не являются членами класса; вы не вызываете функцию, не связанную с методом класса A.
IMHO люди просто хотели изобрести новое слово для облегчения общения между программистами, когда они хотели ссылаться на функции внутри объектов.
Если вы говорите, что методы вы имеете в виду функции внутри класса. Если вы говорите о функциях, вы имеете в виду просто функции вне класса.
правда в том, что оба слова используются для описания функций. Даже если вы использовали его неправильно, ничего плохого не случится. Оба слова хорошо описывают то, что вы хотите достичь в своей код.
— Это код, который должен играть роль (функция) что-то делать. Метод метод для решения проблемы.
Он делает то же самое. Это одно и то же. Если вы хотите быть супер точным и следовать соглашению, вы можете вызывать методы как функции внутри объектов.
функция-это концепция, в основном принадлежащая процедура ориентированного программирования где функция-это сущность, которая может обрабатывать данные и возвращает значение
метод-это понятие объектно-ориентированное программирование где метод является членом класса, который в основном выполняет обработку членов класса.
давайте не будем усложнять то, что должно быть очень простым ответом. Методы и функции-это одно и то же. Вы называете функцию функцией, когда она находится вне класса, и вы называете функцию методом, когда она записана внутри класса.
Я не эксперт, но это то, что я знаю:
функция-это термин языка C, он относится к фрагменту кода, и имя функции будет идентификатором для использования этой функции.
метод является термином OO, обычно он имеет указатель this в параметре функции. Вы не можете вызвать этот фрагмент кода, как C, вам нужно использовать объект для его вызова.
методы invoke также различны. Здесь вызвать смысл в том, чтобы найти адрес этого фрагмента кода. C / C++, время связывания будет использовать символ функции для поиска.
цель-с другой. Вызовите функцию C, чтобы использовать структуру данных для поиска адреса. Это означает, что все известно во время выполнения.
Я знаю, что многие другие уже ответили, но я обнаружил, что следующий простой, но эффективный однострочный ответ. Хотя это не выглядит намного лучше, чем другие ответы здесь, но если вы внимательно прочтете его, у него есть все, что вам нужно знать о методе vs function.
метод-это функция, которая имеет определенный приемник, в терминах ООП метод-это функция на экземпляре объекта.
вот некоторое объяснение метода против функции с использованием примеров JavaScript:
test(20, 50); функция определяет и использует для запуска некоторых шагов или возврата чего-то, что можно сохранить/использовать где-то.
вы можете повторно использовать код: определите код один раз и используйте его много раз.
вы можете использовать один и тот же код много раз с разными аргументами, чтобы получить разные результаты.
var test = something.test(); здесь test () может быть методом какого-либо объекта или пользовательским прототипом для встроенных объектов, вот еще объяснение:
методы JavaScript-это действия, которые могут выполняться над объектами.
метод JavaScript-это свойство, содержащее определение функции.