Метод и функция в чем разница
Перейти к содержимому

Метод и функция в чем разница

  • автор:

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

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

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

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

Из-за этих, весьма существенных, отличий метод и получил отдельный термин, в некотором смысле сокращение от «Метод (способ) взаимодействия с классом или объектом».

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

PS: Это касается любых языков программирования, поддерживающих концепцию объектно-ориентированного программирования.

Чем метод отличается от функции в Python?

Метод по сути это та же функция, но так как она определена внутри класса, и первым её аргументом является self , то она становится связанным методом bound method , получившим доступ к атрибутам связанного объекта (экземпляра класса).

# Обычная функция: def greet(name): print(f'Hello, name>') class Person: # Инициализатор класса, требующий присваивать значение атрибута name при инстанцировании объекта def __init__(self, name): self.name = name # Связанный метод, имеющий доступ к атрибуту name: def greet(self): print(f'Hello , self.name>. ') bob = Person('Bob') # Вызов связанного метода класса: bob.greet() # => Hello , Bob. # Вызов функции, не имеющий доступа к атрибутам объекта: greet(bob) # => Hello, # Вызов обычной функции, которой можно передать любое значение: greet('Bob') # => Hello, Bob greet(23) # => Hello, 23 greet('apple') # => Hello, apple 

20 марта 2024

В Python методы и функции имеют некоторые ключевые различия, которые важно понимать.

Функции в Python:

Функции в Python — это блок кода, который выполняет определенную задачу при вызове.

  • Функции могут быть определены с помощью ключевого слова def.
  • Они могут принимать аргументы и возвращать значения с помощью return.
  • Функции могут вызываться независимо от какого-либо объекта.

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

def add_numbers(a, b): return a + b result = add_numbers(5, 3) print(result) 

Методы в Python:

Методы — это функции, связанные с объектами. Они вызываются на конкретных объектах и могут изменять состояние объекта.

  • Методы определяются внутри классов и могут обращаться к данным объекта через ключевое слово self.
  • Методы могут выполнять операции над данными объекта.

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

class Person: def __init__(self, name): self.name = name def greet(self): print("Привет, меня зовут", self.name) person = Person("Alice") person.greet() #=> Привет, меня зовут Alice 

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

В примере метода greet(self) мы определяем метод greet внутри класса Person . Метод greet() используется для вывода приветствия с именем объекта Person . Метод вызывается на конкретном объекте person и обращается к его данным через self .

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

Чем отличаются понятия функции, процедуры и метода в программировании?

Периодически вижу все 3 определения. Это одно и то же или же что-то разное, и какое из понятий правильнее всего употреблять?

  • Вопрос задан более трёх лет назад
  • 85994 просмотра

Комментировать
Решения вопроса 2

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

Ответ написан более трёх лет назад
Нравится 30 5 комментариев

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

MaxLich, Ничего я не забыл. Это не имеет отношения к вопросу. Вопрос был: чем отличаются. А то что функция/процедура/метод имеет имя и список рациональных параметров это и так очевидно. Скобки — это вообще деталь реализации.

mashletov

«Процедура», имхо, устаревшее понятие. Просто функция, которая не возвращает ничего (void). Это еще во времена Delphi процедура имела отдельное ключевое слово.

D3lphi, Ну я-то про определения, которые Вы дали. Это не просто подпрограмма, а подпрограмма, имеющая имя. Инициализатор (в джаве), например, тоже блок кода, подпрограмма, но имени не имеет, и параметров тоже, поэтому это не функция/метод.

MaxLich, это не определения, а лишь то, чем эти понятия отличаются друг от друга.
Функция/процедура не обязана иметь имя — анонимные функции, как пример.

jenki

Всё это можно свести к понятию — подпрограмма. Бывает, читаешь книгу, там автор пишет о своём куске кода как о методе, потом его начинает называть функцией.

Ответ написан более трёх лет назад
Комментировать
Нравится 6 Комментировать
Ответы на вопрос 4

mindtester

# @mindtester
http://iczin.su/hexagram_48

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

как бы да, но. только на самом начальном этапе, что бы угомонить хаос в голове новичка ))

в дальнейшем, все интереснее все эти понятия контекстно зависимые, контекстом является парадигма программирования и/или конкретный язык

1 — в контексте парадигм, из данных понятий уникально одно Метод, как уже было сказано D3lphi, это нечто принадлежащее классу. класс, в свою очередь, это фундаментальное понятие ООП основанного на классах (шарм ситуации в том, что ООП бывает тоже разное ;))

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

но .. есть много языков, где понятия метод нет вообще

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

2 — из контекста языков:

понятие процедура в явном виде, чаще всего употребляют преподаватели, которые сами учились на языках типа Fortran, Pascal или родственных, и либо не имели другого опыта вообще, либо иной опыт был на много скромнее

сейчас доминируют языки, основывающиеся на Си синтаксисе, даже java и js в данном вопросе станут родственниками классического Си

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

смешение всего этого на примере C# — в этом языке, все есть объект. а любой исполняемый код это метод, и методы реализуются только функциями (в тч void функциями)

Функция и Методы в Java

Добрый день скажите Как создаётся функция в java дайте пару наглядных примеров, и какая разница между функцией и Методом, заранее спасибо.

Комментарии (7)

  • популярные
  • новые
  • старые

Для того, чтобы оставить комментарий Вы должны авторизоваться
21 ноября 2020, 21:11

Скажите А конструктор и Метод ? вчеём разница, в возврате згачения?? Метод возвращает а Конструктор нет ?? Зарание спасибо.

Justinian Judge в Mega City One Master
21 ноября 2020, 21:17

Конструктор это специальный метод с рядом требований: — нету явно указанного типа возвращаемого значения, грубо говоря — конструктор ничего не возвращает, в отличие от методов — которые должны явно указать возвращаемый тип, либо void если ничего не возвращает — имя конструктора должно совпадать с именем класса, учитывая регистр — конструктор отрабатывает при создании экземпляра класса пример конструктора:

class Cat  public Cat(String name)  ... > >

здесь мы видим конструктор — нету типа возвращаемого значения , имя конструктора совпадает с именем класса.

Cat cat = new Cat("Vaska");

при создании экземпляра мы указываем аргумент «Васька» который и попадет в конструктор при создании экземпляра. Метод может быть вызван бесконечное количество раз. Конструктор отработает для конкретного экземпляра только один единственный раз — при создании экземпляра объекта

Justinian Judge в Mega City One Master
21 ноября 2020, 20:49

Функция это общекомпьютерный термин, обозначающий подпрограмму, структурно обособленный небольшой кусок кода. В джаве функции называются методами. В каких-то языках программирования это функции, в каких-то называют методы. В джаве это методы. Что можно почитать на тему.. — https://javarush.com/groups/posts/2757-chto-takoe-metodih-v-java — https://javarush.com/groups/posts/1950-metodih-ikh-parametrih-vzaimodeystvie-i-peregruzka — https://javarush.com/groups/posts/1381-metodih-v-java Почитай, будут вопросы — задавай.

Wladyslaw Java Developer Master
22 ноября 2020, 09:00

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

Justinian Judge в Mega City One Master
22 ноября 2020, 10:06

Не вроде 🙂 Есть синтаксис языка, есть JLS. На уровне синтаксиса, с которым мы работаем, подпрограммы в джаве называются методами. Это чисто название — процедуры в паскале, функции в С, методы в джаве. Нужно очень четко расграничивать, где мы говорим о языке как синтаксисе и конкретно о джаве. И где мы выходим на другой уровень абстракции, где называем классы — программами , методы — функциями, и рассуждаем в общекомпьютерной плоскости, что такое функции, что такое чистые функцие и тд. Я часто встречаю, как те у кого бекграунд на других языках,, то методами называют, т о функциями, странно, почему не процедурами 🙂 Это не является корректным в принципе. В каждом языке свои правила, и взаимозаменяемое использование терминов может путать и других и себя. Ну назвали класс классом, метод методом, пусть так и будет. Смешивать различные уровни абстракции не является корректным занятием с точки зрения формальной логики. Оно может и допустимо иногда но в ограниченном количестве случаев. п.с. кстати, конструкторы это по сути методы, точно так же, как методы — функции. Но опять же, если все начнут на конструкторы методы говорить ) поправил метод, вызвал метод, опять же, по сути это верно. Но путаницу вызвать может. Я вот об этом аспекте имею ввиду

Wladyslaw Java Developer Master
22 ноября 2020, 10:16

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

Justinian Judge в Mega City One Master
22 ноября 2020, 10:32

quod licet jovi или как там )) Я исходил из того, что на начальном этапе нужно четко разграничить терминологию, чтобы не путаться. Поэтому тебе можно 🙂 Тем кто только начал изучать, нет 🙂 Они должны фокусироваться на главном, и так слишком всего много на них наваливается, глаза разбегаются, важно дать/найти какую-то стабильность, островки понимания, и постепенно расширять плацдарм. А тут только копни, методы, функции, чистые функции, виртуальные функции и тд ))

  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
  • Задачи-игры

Сообщество

JavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *