Перейти к содержимому

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

  • автор:

В чем отличие метода и функции?

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

Остальные ответы

Метод, методология это КАК вы что-то собираетесь делать.
Функция, функциональность это ЧЕМ вы это собираетесь делать. Какие функциональные особенности у предмета.
Топорное изьяснение).

fd fdУченик (137) 3 года назад
типичный ответ гуманитария) сказать ни о чем но сделать вид будто чтото сказал
fd fdУченик (137) 3 года назад
человек же про программирование спрашивает

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

doctor Brain

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

Итак, функция существует сама по себе:

const bark = () => < console.log('wof!') >bark() 
function bark() < console.log('wof!') >bark() 

В свою очередь, метод — это функция, назначенная свойству объекта:

const dog = < bark: () => < console.log('wof!') >> dog.bark() 

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

const dog = < name: 'Roger', bark: function() < console.log(`I am $. wof!`) > > dog.bark() 

Спасибо за внимание.

Новые публикации

Photo by CHUTTERSNAP on Unsplash

JavaScript: сохраняем страницу в pdf

Photo by David Everett Strickler on Unsplash

2021-07-12

HTML: Полезные примеры

Photo by Pankaj Patel on Unsplash

2021-07-11

CSS: Ускоряем загрузку страницы

Photo by Evan Fitzer on Unsplash

2021-07-10

JavaScript: 5 странностей

Photo by Markus Spiske on Unsplash

2021-07-10

JavaScript: конструктор сортировщиков

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.

© 2021 dr.Brain .
мир глазами веб-разработчика

Чем отличается «метод» от «функции»

Неоднократно видел использование термина «метод» для обозначения функций-членов классов в противоположность термину «функция» для обозначения «свободных» функций нечленов. С другой стороны, в текстах о Си++, часто всё называют «функцией» и члены и нечлены. Собственно, какова разница между терминами «метод» и «функция», почему в Си++ члены не называют «методами»?

Отслеживать
задан 30 окт 2017 в 7:28
6,853 2 2 золотых знака 23 23 серебряных знака 43 43 бронзовых знака

почему в Си++ члены не называют «методами»? — так и хочется пошутить про потому что они ч. но не буду

30 окт 2017 в 7:34
Метод — это функция, которая член класса. И это вся разница вроде)
30 окт 2017 в 7:34
@andreymal можно как ответ делать. терминология-faq с эпичным ответом)
30 окт 2017 в 7:40

@АлексейШиманский я не уверен, что так во всех языках, и предпочту воздержаться от ответа. Эпичный ответ с примерами и исключениями (если таковые существуют) от кого-нибудь уверенного будет более полезным)

30 окт 2017 в 7:43
@andreymal А процедура — член класса тогда как называется?
30 окт 2017 в 8:25

6 ответов 6

Сортировка: Сброс на вариант по умолчанию

И чего так много слов то? Все просто:

Метод всегда является функцией, а функция не всегда является методом.

Отслеживать
ответ дан 30 окт 2017 в 9:12
81.3k 7 7 золотых знаков 72 72 серебряных знака 153 153 бронзовых знака
Это как «Большой палец — всегда палец, но палец не всегда большой?» (c) ТБВ
30 окт 2017 в 9:46
Точно, именно так 🙂
30 окт 2017 в 10:14

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

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

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

почему в Си++ члены не называют «методами»?

Во многих языках 60-70 годов не было ООП в том понимании, которое известно сейчас. С++ изначально был просто «фронтом» (то есть надстройкой) над обычным Си. Был долгий период, когда это уже был не Си, но и ещё и не C++. Компилятора C++ не было, а был транслятор в Си. Видимо, поэтому там закрепилось функция класса/переменная класса. Сейчас Страуструп предлагает N4174, и если его примут, то грань между обычными функциями и функциями класса размоется ещё больше.

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

Собственно, какова разница между терминами «метод» и «функция»

Правильный ответ — историческая. Как правильно называть сущности в разных языках, нужно уточнять в их документации.

многие автора книг по с++ называют функции класса методами. Как быть?

Тут все сложно. Например, Эккель так делает видимо потому, что он ещё и много книг о Java написал. Также не стоит забывать, что многие книги мы читаем в переводе, а они «исправляют», потому что переводчику так понятнее.

так можно ли называть функции класса с++ методами?

Это точно так же, как использовать мат/обсценную лексику в высшем обществе. Или пытаться объясниться с гопниками языком Тургенева и стихами Пушкина/Блока.

P.S. метод — слово многозначное и вполне можно услышать от C++ программистов такое «это метод для получения данных с сервера, реализован в виде 5 функций и двух классов».

Vanilla JS

Разница между функцией, методом и вызовом конструктора объектов.

Функция — обычный вызов независимой функции.

function hello(username) return «hello, » + username;
>
hello(«Boris»); // «hello, Boris»

Функция может обращаться к глобальному объекту.

var username = ‘Boris’;

function hello() return «hello, » + this.username;
>

hello(); // «hello, Boris»

Однако в строгом режиме ES5 this = undefined.

function hello() «use strict»;
return «hello, » + this.username;
>
hello(); // error: cannot read property «username» of undefined

Метод — функция привязанная к объекту.

var obj = hello: function() return «hello, » + this.username;
>,
username: «Boris»
>;
obj.hello(); // «hello, Boris»

Метод одного объекта можно привязать к другому объекту.

var obj2 = hello: obj.hello, // метод из первого объекта
username: «Boo»
>;
obj2.hello(); // «hello, Boo»

Также методом объекта может быть обычная функция, поскольку this всегда будет являться этот объект или window.

function hello() return «hello, » + this.username;
>

var obj1 = hello: hello,
username: «Gordon Gekko»
>;
obj1.hello(); // «hello, Gordon Gekko»

var obj2 = hello: hello,
username: «Biff Tannen»
>;
obj2.hello(); // «hello, Biff Tannen»

Функция конструктор объектов всегда вызывается с оператором new и всегда создает объект <>!

function User(name, passwordHash) this.name = name;
this.passwordHash = passwordHash;
>

var obj = new User(«sfalken», «0ef33ae791068ec64b502d6cb0191387»);

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

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

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