Чем функция отличается от метода в программировании
Перейти к содержимому

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

  • автор:

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

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

13 февраля 2023

Метод по сути это та же функция, но так как она определена внутри класса, и первым её аргументом является 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 

Методы и функции в C#?

Может я чего-то не понимаю, но разве синтаксис функций и методов в С# не одинаковый? И что вообще называют методами и функциями? Спасибо за ответы.

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

Комментировать
Решения вопроса 1
Victor Bomberow @majstar_Zubr
C++, C#, gamedev

Есть термины функция, процедура, метод в рамках парадигм программирования, но терминология в C# иная.

В C# нет функций и процедур, есть только методы и делегаты.
Лямбда-выражения, в зависимости от контекста, «под капотом» приводятся к анонимным делегатам с телом или к Func, Predicate, Action.
Все утыкается в объектную модель, которую поддерживает абстрактная машина языка C#.
Единицей трансляции является класс, и свободных функций в namespace быть не может, так же как и указателей на функцию в принципе — вместо указателей на функцию в C# используются делегаты. Делегат реализован как абстрактный класс, это позволило реализовать типобезопасные ссылки на методы, которые можно складывать и вычитать, позволило удобно реализовать асинхронность.

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

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

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

freeExec

Участник OpenStreetMap

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

Функция

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

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

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

«IT-специалист с нуля» наш лучший курс для старта в IT

IT-специалист с нуля

Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.

картинка - 2023-03-14T191232.869

Профессия / 8 месяцев
IT-специалист с нуля

Попробуйте 9 профессий за 2 месяца и выберите подходящую вам

vsrat_7 1 (2)

Для чего нужны функции

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

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

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

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

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

Что можно делать с функциями

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

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

Вызывать. Когда программист задает функцию, она не выполняется сразу — это просто описание. Чтобы функция сработала, ее нужно вызвать: написать в нужном участке кода команду вызова. Команда обычно состоит из названия функции и двух скобок. Например, так: myFunction().

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

  • при создании функции описать, что она будет получать на входе — какие-то переменные с любым удобным разработчику именем;
  • при вызове указывать в круглых скобках значения аргументов, фактических значений, которые будут передаваться в функцию. Это могут быть числа, строки, объекты и так далее.

Например, функция multiply умножает заданное число на 2. Чтобы она могла каждый раз получать новое число, при создании функции указывают параметр number: function multiply(number). Это значит, что на вход функция будет получать какой-то number и иметь возможность с ним работать. А при вызове вместо number будут писать в скобках нужное число или переменную. Например, так: multiply(2) или multiply(myMoney). 2 и myMoney — аргументы, которые передаются в параметр.

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

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

Курс для новичков «IT-специалист
с нуля» – разберемся, какая профессия вам подходит, и поможем вам ее освоить

Как работают функции

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

  • Чаще всего при передаче параметра в функцию отправляется копия значения. Это значит, что если внутри функции изменить переданное значение, то во внешнем коде оно останется прежним.
  • В некоторых языках программирования разработчик сам может выбрать, что передать в функцию: копию значения или изначальную переменную. Во втором случае, если поменять переданную переменную в функции, она изменится и во внешнем коде.

Внутри самой функции тоже можно создавать переменные и работать с ними. Но эти переменные будут доступны только в функции — получить к ним доступ из внешнего кода нельзя. Можно сказать, что внутреннее содержимое функции «закрыто» от основного кода. Наружу она выдает только то, что указано в return.

Как задают функции

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

  • декларативное — стандартный вариант, существующий практически во всех языках. Функцию описывают отдельно от других действий, описание начинают со слова function или другого в зависимости от языка. Такая функция не исполняется сразу, а существует как отдельный блок кода и «ждет», пока ее вызовут;
  • через выражение — вариант, который распространен в языке JavaScript. Функцию создают прямо внутри какого-то выражения, например a = function… и так далее. Такая функция выполнится сразу после появления, в рамках этого же выражения;
  • стрелочное — функцию описывают без ключевого слова function, вместо него используют стрелку =>. У такого описания свой синтаксис, и обычно его применяют для простых функций в одну-две строчки.

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

Что такое чистая функция

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

Например, если функция просто каждый раз складывает 2+2, ее можно назвать чистой. Правда, практической ценности у такой функции обычно минимум.

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

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

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

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

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

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

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

Есть еще два понятия, которые связаны с функциями, — метод и процедура. Это похожие на функции конструкции, но у них есть свои особенности.

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

  • Свойства — это переменные, которые описывают объект. Например, вес персонажа, цвет предмета и так далее.
  • Методы — это действия, которые объект может выполнять. Скажем, объект «кот» может выполнять действия «бегать», «прыгать», «спать», «есть», «вылизываться» и так далее.

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

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

Как начать работать с функциями

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

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

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

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

Комментировать
Решения вопроса 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 функциями)

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

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