Veja também sub-rotina vs. função , função vs. procedimento , corotinas .
Quando o valor de uma propriedade é uma função, podemos chamá-lo um método
Qual é o oposto de um método? Essa é a minha pergunta. "Função" é o conceito pai. Método é um tipo de função. Qual é o nome para um tipo de função que não é um método, mas que pode ser chamado diretamente pelo nome?
Seria interessante ver outra explicação descrevendo a diferença entre métodos e funções em r . É interessante, pois o método geralmente contém uma função . Se método é uma função dependente de objeto, a verificação de função para a classe de objeto if(class(object)) { ... } else {stop()}seria conceitualmente equivalente ao método?
A terminologia adequada pode realmente depender da linguagem, portanto pode significar coisas ligeiramente diferentes em diferentes contextos. Mesmo assim, como os programadores que trabalham com um idioma em detrimento de outro estão mais acostumados a certas terminologias. Os programadores também são influenciados pelo uso dos termos pelos colegas de trabalho (corretos ou incorretos). Esses termos são frequentemente usados ​​de forma intercambiável. Veja alguns dos comentários abaixo, por exemplo.
Uma função é um pedaço de código chamado pelo nome. Podem ser transmitidos dados para operar (isto é, os parâmetros) e, opcionalmente, podem retornar dados (o valor retornado). Todos os dados que são passados ​​para uma função são explicitamente passados.
Um método é um pedaço de código chamado por um nome associado a um objeto. Na maioria dos aspectos, é idêntico a uma função, exceto por duas diferenças principais:
Um método é passado implicitamente no objeto no qual foi chamado.
Um método é capaz de operar com dados contidos na classe (lembrando que um objeto é uma instância de uma classe - a classe é a definição, o objeto é uma instância desses dados).
(esta é uma explicação simplificada, ignorando questões de escopo etc.)
Para 1), você também deve adicionar que os métodos em C ++ são chamados de funções de membro . Portanto, a diferença entre funções e métodos nesse contexto é análoga à diferença entre funções e funções-membro em C ++. Além disso, linguagens como Java possuem apenas métodos. Nesse caso, as funções seriam análogas aos métodos estáticos e os métodos teriam o mesmo significado. Em 2), você deve adicionar que um método é capaz de operar nos dados da instância privada (membro) declarados como parte da classe. Qualquer código pode acessar dados da instância pública.
uma função é uma construção matemática. Eu diria que todos os métodos são funções, mas nem todas as funções são métodos
Vindo de um background de programação funcional, sinto que há uma profunda distinção entre função e método. Principalmente métodos têm efeitos colaterais, e que as funções devem ser puros dando assim uma nice propriedade de transparência referencial
@TylerGillies e HHC, eu concordo que seria bom se "função" e "método" significassem o que você queria, mas suas definições não refletem alguns usos muito comuns desses termos.
Por essa definição, um método estático não seria realmente considerado um método porque não tem nada a ver com uma instância específica?
Para Java e C #, existem apenas métodos.
Para C ++ e Python, isso dependeria de você estar ou não em uma classe.
É hora de adicionar C #.
@RosdiKasim Para C #, existem apenas métodos. (uma vez que até mesmo os métodos estáticos têm de ser associados com um objecto)
Que tal métodos estáticos em uma classe? Aqueles seriam independentes de um objeto (em java). Isso não seria uma função então?
— Squeazer
@ Squeazer Há uma pergunta sobre isso recentemente stackoverflow.com/questions/30402169/… A Java Language Specification os difere apenas de "método de classe" (estático) e "método de instância". Então, eles ainda são todos os métodos.
— xji 27/05
Java tem expressões lambda, que são funções que não são métodos
'método' é a palavra orientada a objetos para 'função' . Isso é praticamente tudo o que existe (ou seja, não há diferença real).
Infelizmente, acho que muitas das respostas aqui estão perpetuando ou promovendo a ideia de que há alguma diferença complexa e significativa.
Realmente - não há muito, apenas palavras diferentes para a mesma coisa.
De fato, como Brian Neal apontou em um comentário para essa pergunta , o padrão C ++ nunca usa o termo 'método' quando se refere a funções-membro. Algumas pessoas podem considerar isso como uma indicação de que o C ++ não é realmente uma linguagem orientada a objetos; no entanto, prefiro tomá-lo como uma indicação de que um grupo bastante inteligente de pessoas não achou que havia uma razão particularmente forte para usar um termo diferente.
Um método é um tipo especial de função com um argumento implícito passado (uma instância da classe na qual o método está definido). Isso é importante porque uma função, em termos estritos, não deve usar ou modificar nada que não esteja em sua lista de argumentos.
@ ty1824 nem sempre é o caso de métodos serem passados ​​argumentos implícitos. No Python, o selfargumento é explícito. E muitas linguagens têm métodos estáticos, aos quais não são passadas uma instância.
@mheiber esses são alguns pontos válidos. Com relação a si mesmo, você está correto, é explicitamente definido . A chave é que a chamada está implícita, com base na referência do objeto original. Existem idiomas que suportam a substituição de um thisou self, mas essas construções são geralmente chamadas de funções, em vez de métodos.
— ty1824
@mheiber No que diz respeito aos métodos estáticos - o java os implementou como uma solução alternativa para que as funções pudessem ser implementadas sem a necessidade de um contexto. Eu iria mais longe ao propor que 'método estático' é um termo enganoso e deve ser substituído ... em um mundo teórico ideal :)
@ ty1824 C ++, Scala, Python, Ruby, JavaScript e Scala têm métodos estáticos, então não acho que seja apenas uma coisa de Java. Também não gosto deles: eles usam objetos (feixes de estado) como se fossem espaços para nome.
Em geral: métodos são funções que pertencem a uma classe, as funções podem estar em qualquer outro escopo do código, para que você possa afirmar que todos os métodos são funções, mas nem todas as funções são métodos:
Veja o seguinte exemplo de python:
O exemplo dado mostra uma classe chamada "Door", que possui um método ou ação chamada "open", é chamada de método porque foi declarada dentro de uma classe. Existe outra parte do código com "def" logo abaixo, que define uma função, é uma função porque não é declarada dentro de uma classe, essa função chama o método que definimos dentro de nossa classe como você pode ver e, finalmente, a função está sendo chamado por si só.
Como você pode ver, você pode chamar uma função em qualquer lugar, mas se você quiser chamar um método, você deve passar um novo objeto do mesmo tipo que a classe em que o método é declarado (Class.method (objeto)) ou você deve chamar o método dentro do objeto (object.Method ()), pelo menos em python.
Pense nos métodos como coisas que apenas uma entidade pode fazer; portanto, se você tiver uma classe Dog, faria sentido ter uma função de latido somente dentro dessa classe e isso seria um método; se você também tiver uma classe Person, faria sentido escreva uma função "feed" para que não pertença a nenhuma classe, pois humanos e cães podem ser alimentados e você poderia chamar isso de uma função, pois ela não pertence a nenhuma classe em particular.
Essa resposta - principalmente sua primeira frase - é de longe a melhor resposta mais concisa e geral para a pergunta.
— yourcomputergenius
F unção → F ree (Free não significa pertencer a um objeto ou classe)
M é todo → M brasa (Um membro de um objecto ou classe)
como geralmente é intercambiável, por que você precisa de um mnemônico?
Funções são definidas fora das classes, enquanto Métodos são definidos dentro e parte das classes.
Se você quiser ler aqui, é "Minha introdução aos métodos OO"
A idéia por trás do paradigma Orientado a Objetos é "ameaçar" o software é composto de ... bem "objetos". Objetos no mundo real têm propriedades, por exemplo, se você tem um funcionário, o funcionário tem um nome, uma identificação de funcionário, uma posição, ele pertence a um departamento etc. etc.
O objeto também sabe como lidar com seus atributos e executar algumas operações neles. Digamos que, se quisermos saber o que um funcionário está fazendo agora, perguntaríamos a ele.
Que "whatAreYouDoing" é uma "mensagem" enviada ao objeto. O objeto sabe como responder a essas perguntas, diz-se que possui um "método" para resolver a questão.
Portanto, a maneira como os objetos precisam expor seu comportamento é chamada de método. Os métodos, portanto, são o objeto de artefato que precisam "fazer" alguma coisa.
As funções, por outro lado, são maneiras pelas quais uma linguagem de programação precisa computar alguns dados; por exemplo, você pode ter a função addValues ​​(8, 8) que retorna 16
Como as primeiras linguagens de programação populares (como fortran, c, pascal) não abordaram o paradigma OO, elas apenas chamam esses artefatos de "funções".
Não é "natural" dizer que um objeto tem uma "função" para executar alguma ação, porque as funções estão mais relacionadas a coisas matemáticas, enquanto um Funcionário tem pouca matemática, mas você pode ter métodos que fazem exatamente o mesmo que funções, por exemplo, em Java, essa seria a função addValues ​​equivalente.
Parece familiar? Isso ocorre porque o Java tem suas raízes em C ++ e C ++ em C.
No final, é apenas um conceito; na implementação, eles podem ter a mesma aparência, mas na documentação do OO, eles são chamados de método.
A diferença, então, está no "domínio" onde é aplicado.
AppleScript tem a idéia de "linguagem natural", que em algum momento o OO tinha. Por exemplo, Smalltalk. Espero que seja mais fácil entender métodos em objetos depois de ler isso.
NOTA: O código não deve ser compilado, apenas para servir como exemplo. Sinta-se livre para modificar a publicação e adicionar um exemplo de Python.
Bravo! Exposição brilhante sobre como métodos são comandos para objetos. Isso é fundamental para entender o OO e a falta da retórica exibida nesta resposta é o motivo pelo qual o OO é tão abusado atualmente no setor. Excelente post.
— Moffdub 01/10/08
No mundo OO, os dois são comumente usados ​​para significar a mesma coisa.
De uma perspectiva pura de Matemática e CS, uma função sempre retornará o mesmo resultado quando chamada com os mesmos argumentos (f (x, y) = (x + y)). Um método, por outro lado, é normalmente associado a uma instância de uma classe. Novamente, porém, a maioria das linguagens OO modernas não usa mais o termo "função" na maior parte do tempo. Muitos métodos estáticos podem ser muito parecidos com funções, pois normalmente não têm estado (nem sempre verdadeiro).
Um método é uma função que pertence a um objeto (em alguns sistemas orientados a objetos, é mais correto dizer que pertence a uma classe). Ser "possuído" por um objeto / classe significa que você se refere ao método por meio do objeto / classe; por exemplo, em Java, se você deseja chamar um método "open ()" pertencente a um objeto "door", é necessário escrever "door.open ()".
Geralmente, os métodos também ganham alguns atributos extras que descrevem seu comportamento no objeto / classe, por exemplo: visibilidade (relacionada ao conceito de encapsulamento orientado a objetos), que define a partir de quais objetos (ou classes) o método pode ser chamado.
Em muitas linguagens orientadas a objetos, todas as "funções" pertencem a algum objeto (ou classe) e, portanto, nessas linguagens não existem funções que não sejam métodos.
— Mike Tunnicliffe
Expliquei que os métodos poderiam pertencer a um objeto ou classe, já que o Javascript (que você mencionou na sua pergunta) é uma das linguagens que controla a tendência geral das linguagens orientadas a objetos por ter métodos pertencentes a objetos e não a classes (embora estruturas semelhantes a existem classes).
Métodos são funções de classes. No jargão normal, as pessoas trocam métodos e funções por toda parte. Basicamente, você pode pensar neles como a mesma coisa (não tenho certeza se funções globais são chamadas de métodos).
diz que a função f () retornará o pecado do primeiro parâmetro adicionado ao cosseno do segundo parâmetro. É apenas matemática. Por acaso, sin () e cos () também são funções. Uma função possui outra propriedade: todas as chamadas para uma função com os mesmos parâmetros devem retornar o mesmo resultado.
Um método, por outro lado, é uma função relacionada a um objeto em uma linguagem orientada a objetos. Ele tem um parâmetro implícito: o objeto que está sendo acionado (e seu estado).
Portanto, se você tiver um objeto Z com o método g (x), poderá ver o seguinte:
Nesse caso, o parâmetro x é passado, o mesmo que no exemplo da função anterior. No entanto, o parâmetro para cos () é um valor que vive dentro do objeto Z. Z e os dados que vivem dentro dele (Zy) são parâmetros implícitos no método g () de Z.
— Bradley Mazurek
Função ou método é um trecho de código que pode ser chamado, que executa algumas operações e, opcionalmente, retorna um valor.
Na linguagem C , o termo função é usado. As pessoas de Java e C # diriam que é um método (e uma função neste caso é definida dentro de uma classe / objeto).
Um programador de C ++ pode chamá-lo de função ou, às vezes, de método (dependendo se está escrevendo código c ++ de estilo procedural ou se está usando o C ++ orientado a objetos, também um programador de C / C ++ provavelmente chamaria de função porque o termo 'método' é usado com menos frequência na literatura C / C ++).
— Abdullah Leghari
Historicamente, pode ter havido uma diferença sutil com um "método" sendo algo que não retorna um valor e uma "função" que sim. Cada linguagem tem seu próprio léxico de termos com significado especial.
Em Java , o termo "função" não tem nenhum significado especial. Enquanto "método" significa uma das rotinas que formam a implementação de uma classe.
Em C #, isso seria traduzido como:
Mas, na verdade, reitero que realmente não há diferença nos 2 conceitos. Se você usar o termo "função" em discussões informais sobre Java, as pessoas assumirão que você quis dizer "método" e continuarão. Não o utilize em documentos ou apresentações adequados sobre Java, ou você parecerá bobo.
Na verdade, no seu exemplo, ambos são method... ou eu o chamaria proceduree function.
Função é um conjunto de lógica que pode ser usado para manipular dados.
Enquanto, Method é uma função usada para manipular os dados do objeto ao qual ele pertence. Portanto, tecnicamente, se você tem uma função que não está completamente relacionada à sua classe, mas foi declarada na classe, não é um método; É chamado de design ruim.
Os métodos em uma classe atuam na instância da classe, chamada objeto.
Nas linguagens OO, como Object Pascal ou C ++, um "método" é uma função associada a um objeto. Assim, por exemplo, um objeto "Cão" pode ter uma função "casca" e isso seria considerado um "Método". Por outro lado, a função "StrLen" fica sozinha (fornece o comprimento de uma sequência fornecida como argumento). Portanto, é apenas uma "função". O Javascript também é tecnicamente orientado a objetos, mas enfrenta muitas limitações em comparação com uma linguagem completa como C ++, C # ou Pascal. No entanto, a distinção ainda deve se manter.
Alguns fatos adicionais: o C # é totalmente orientado a objetos, para que você não possa criar "funções" independentes. Em C #, toda função é vinculada a um objeto e, portanto, tecnicamente, é um "método". O ponto principal é que poucas pessoas em C # se referem a elas como "métodos" - elas apenas usam o termo "funções" porque não há nenhuma distinção real a ser feita.
Finalmente - apenas para que nenhum guru de Pascal pule sobre mim aqui - Pascal também diferencia entre "funções" (que retornam um valor) e "procedimentos" que não. O C # não faz essa distinção explicitamente, embora você possa, é claro, optar por retornar um valor ou não.
Desde que você mencionou o Python, o seguinte pode ser uma ilustração útil do relacionamento entre métodos e objetos na maioria das linguagens orientadas a objetos modernas. Em poucas palavras, o que eles chamam de "método" é apenas uma função que recebe um argumento extra (como outras respostas apontaram), mas o Python torna isso mais explícito do que a maioria das linguagens.
Agora compare a função greet_with_greetere o método greet: a única diferença é o nome do primeiro parâmetro (na função eu chamei de "greeter", no método eu chamei de "self"). Então, eu posso usar o greetmétodo exatamente da mesma maneira que uso a greet_with_greeterfunção (usando a sintaxe "ponto" para obtê-lo, pois o defini dentro de uma classe):
Então, eu efetivamente transformei um método em uma função. Posso transformar uma função em um método? Bem, como o Python permite que você mexa com as classes depois de definidas, vamos tentar:
Sim, a função greet_with_greeteragora também é conhecida como método greet2. Isso mostra a única diferença real entre um método e uma função: quando você chama um método "ligando" um objeto ao chamar object.method(args), o idioma o transforma magicamente method(object, args).
(Os puristas do OO podem argumentar que um método é algo diferente de uma função, e se você entrar em Python avançado ou Ruby - ou Smalltalk! - você começará a entender o ponto. Também algumas linguagens dão aos métodos acesso especial aos bits de um objeto. a principal diferença conceitual ainda é o parâmetro extra oculto.)
para mim: a função de um método e uma função é a mesma se eu concordar que:
uma função pode retornar um valor
pode esperar parâmetros
Assim como qualquer pedaço de código, você pode ter objetos inseridos e um objeto que é o resultado disso. Durante o processo, eles podem alterar o estado de um objeto, mas isso não altera seu funcionamento básico para mim.
Pode haver uma definição diferenciada na chamada de funções de objetos ou outros códigos. Mas isso não é algo para diferenciações verbais e é por isso que as pessoas as trocam? O exemplo menciona o cálculo com o qual eu teria cuidado. porque eu contratar funcionários para fazer meus cálculos:
Fazendo dessa maneira, posso confiar que um empregador é responsável pelos cálculos. Se ele quer mais dinheiro, eu o liberto e deixo que a função do coletor de lixo de destituir funcionários não utilizados faça o resto e consiga um novo funcionário.
Mesmo argumentar que um método é uma função de objetos e uma função é uma computação desconectada não vai me ajudar. O próprio descritor da função e, idealmente, a documentação da função me dirão o que precisa e o que pode retornar. O resto, como manipular o estado de algum objeto, não é realmente transparente para mim. Espero que as funções e os métodos entreguem e manipulem o que afirmam sem precisar saber em detalhes como o fazem. Mesmo uma função computacional pura pode alterar o estado do console ou anexar a um arquivo de log.
— Dirk Schumacher
Não vamos complicar o que deveria ser uma resposta muito simples. Métodos e funções são a mesma coisa. Você chama uma função de função quando está fora de uma classe e chama uma função de método quando é gravada dentro de uma classe.
— SamyCode
Pelo meu entendimento, um método é qualquer operação que possa ser executada em uma classe. É um termo geral usado em programação.
Em muitos idiomas, os métodos são representados por funções e sub-rotinas. A principal distinção que a maioria dos idiomas usa para isso é que as funções podem retornar um valor para o chamador e uma sub-rotina não. No entanto, muitas linguagens modernas têm apenas funções, mas, opcionalmente, elas não podem retornar nenhum valor.
Por exemplo, digamos que você queira descrever um gato e gostaria que ele pudesse bocejar. Você criaria uma classe Cat, com um método Yawn, que provavelmente seria uma função sem nenhum valor de retorno.
— marcj
Para uma aproximação de primeira ordem, um método (no estilo C ++ OO) é outra palavra para uma função de membro, que é uma função que faz parte de uma classe.
Em linguagens como C / C ++, você pode ter funções que não são membros de uma classe; você não chama uma função não associada a uma classe de método.
— Capitão Segfault
Função é o conceito que pertence principalmente à programação orientada a procedimentos, onde uma função é uma entidade que pode processar dados e retornar seu valor
Método é o conceito de programação Orientada a Objetos, em que um método é membro de uma classe que processa principalmente nos membros da classe.
As pessoas do IMHO só queriam inventar uma nova palavra para facilitar a comunicação entre os programadores quando queriam se referir às funções dentro dos objetos.
Se você está dizendo métodos, você quer dizer funções dentro da classe. Se você está dizendo funções, significa simplesmente funções fora da classe.
A verdade é que ambas as palavras são usadas para descrever funções. Mesmo que você tenha usado errado, nada de errado acontece. Ambas as palavras descrevem bem o que você deseja alcançar no seu código.
Função é um código que deve desempenhar um papel ( uma função ) de fazer alguma coisa. Método é um método para resolver o problema.
Faz a mesma coisa. É a mesma coisa. Se você quiser ser super preciso e seguir a convenção, poderá chamar métodos como funções dentro dos objetos.
— Morfidon
Não sou especialista, mas é isso que sei:
Função é um termo da linguagem C, refere-se a um trecho de código e o nome da função será o identificador para usar essa função.
Método é o termo OO, normalmente possui um ponteiro this no parâmetro de função. Você não pode invocar esse código como C, é necessário usar o objeto para invocá-lo.
Os métodos de chamada também são diferentes. Aqui, invoque um significado para encontrar o endereço desse pedaço de código. C / C ++, o tempo de vinculação usará o símbolo da função para localizar.
Objetivo-C é diferente. Invoque o significado de uma função C para usar a estrutura de dados para encontrar o endereço. Isso significa que tudo é conhecido em tempo de execução.
Sei que muitos outros já responderam, mas achei que a seguir é uma resposta de linha única simples, porém eficaz. Embora não pareça muito melhor do que outras respostas aqui, mas se você a ler com atenção, ela terá tudo o que você precisa saber sobre o método vs a função.
Um método é uma função que possui um receptor definido, em termos de POO, um método é uma função na instância de um objeto.
— sociedade f
De ler este documento na Microsoft
Os membros que contêm código executável são coletivamente conhecidos como membros da função de uma classe. A seção anterior descreve métodos, que são o tipo principal de membros da função. Esta seção descreve os outros tipos de membros da função suportados pelo C #: construtores, propriedades, indexadores, eventos, operadores e finalizadores.
Portanto, os métodos são o subconjunto das funções. Todo método é uma função, mas nem toda função é um método, por exemplo, um constructornão pode ser dito como um método, mas é uma função.
Propriedades, indexadores e eventos não são funções. Os getters, setters (para propriedades e indexadores), somadores e removedores (para eventos) são funções. Membros da função são membros associados a uma ou mais funções, mas não necessariamente por serem uma função.
Função - Uma função em um trecho de código independente que inclui alguma lógica e deve ser chamada de forma independente e definida fora da classe.
Método - Um método é um trecho de código independente que é chamado em referência a algum objeto e é definido dentro da classe.
Como você chama um pedaço de código em uma classe estática, que também é estática, isso é um método ou uma função? A função estática / método de uma classe não precisa de um objeto da classe é declarada no.
Aqui está uma explicação para o método versus função usando exemplos de JavaScript:
test(20, 50); Esta função define e usa para executar algumas etapas ou retornar algo que pode ser armazenado / usado em algum lugar.
Você pode reutilizar o código: defina o código uma vez e use-o várias vezes.
Você pode usar o mesmo código várias vezes com argumentos diferentes, para produzir resultados diferentes.
var test = something.test(); aqui test () pode ser um método para algum objeto ou um protótipo definido para objetos embutidos, aqui está mais explicação:
Métodos JavaScript são as ações que podem ser executadas nos objetos.
Você pode definir propriedades para String, Array, etc., bem como por exemplo
Algumas referências: Javascript Object Method , Functions , Mais informações sobre prototype
— Lahar Shah
Não poste respostas idênticas para várias perguntas. Poste uma boa resposta e vote / sinalize para fechar as outras perguntas como duplicadas. Se a pergunta não estiver duplicada, adapte suas respostas à pergunta.
Obrigado pelo feedback, não adaptei outra resposta, excluí essa resposta. :-)
Uma função é um pedaço de código para executar.
Um método é uma função dentro de um objeto.
É por isso que dizemos que uma palavra-chave "this" dentro de uma Function não é muito útil, a menos que a utilize com call, apply ou bind .. porque call, apply, bind chamará essa função como um método dentro do objeto ==> basicamente converte função em método
— yogendra saxena
Eles geralmente são intercambiáveis, mas um método geralmente se refere a uma sub-rotina dentro de uma classe e uma função geralmente se refere a uma sub-rotina fora da classe. por exemplo, em Ruby:
Em Java, onde tudo (exceto instruções de pacote e importação) deve estar dentro da classe, as pessoas quase sempre se referem a elas como "métodos".