Qual é a diferença entre Função e Método?

Não, não esb, ela é do Senna mesmo.

A não ser que ele tenha copiado do Piquet…hehehe

[]'s!

Dê uma olhada:
Guia dos Curiosos

De qualquer forma, acompanhei a carreira do Senna, li as biografias dele e não me lembro em momento algum dele ter citado tal frase, que por sinal é um tanto quanto estúpida. Já o Piquet sim proferiu tal frase contra corredores da F1, dias antes do seu filho Nelsinho chegar em segundo em uma corrida de estréia em uma categoria de base. Lamentável…

Xiii…então não sei…hehehe.

De qualquer forma vou manter a assinatura, era e ainda sou fã incondicional do Senna.

Valeu!! Até mais!

A diferenças entre Funções e Métodos:

Segundo os conceitos de orientação a objeto, metódo é toda
operação que manipula algum objeto, sendo assim, procedimento
ou função são metódos.

Se for observado os conceitos sobre programação estruturada,
vemos que funcão é toda rotina que retorna algum valor,
e procedimentos não retornam valor algum.

Observação sobre algumas respostas:

Pedrosa:
A afirmação quanto ao Java considero correta, pois tanto procedimentos
quanto funções podem ser consideradas metódos.

Discordo sobre a afirmação em VB, ASP etc, por que VB não é totalmente
Orientada a Objetos, então podemos afirmar que ela se comporta
como estruturada já que ela não implementa Herança e Polimorfismo por exemplo,
nesse caso temos os conceitos de função e procedimentos da programação estruturada.

No caso do ASP, só posso comentar a respeito do ASP.NET, que suporta
as liguagens POO, que tem o mesmo conceito que o Java sobre metódos.

peczenyj:
No caso do C que é uma linguagem estruturada, as funções void se
comportam como procedimentos do Pascal que também é estruturado.
Não é obrigatório o retorno de um valor útil como resultado, pode ser implementada uma função que retorne 0 ou nenhum valor.

Em resumo:

Quando estamos falando de Programação Orientada a Objeto, entenda metódos tanto como Função quanto Procedimento.

Quando estivermos falando de Programação Estruturada, entenda procedimentos como rotina que não retornam valor, e funções como rotinas que retornam valor

Cara isso tem no pascal

as funções Retornam algum valor as procedures não

No java nos temos metodos que Retornam ou não.

Acho que era isso.

abraço

Espero que nao tenha chegado tarde de mais, mas para finalizar a discussão…

Qual a diferença entre método e função? E entre uma estrutura e uma classe?

Um método é idêntico a uma função, com a exceção que está implicitamente associado a uma classe. Destina-se pois à manipulação da informação do objecto pertencente a essa classe.

Uma classe é idêntica a uma estrutura, com a exceção que para além de conter dados contém
também código (os métodos) para manipular esses dados.

Resumindo, método so se estiver definido dentro de uma função.

:slight_smile:

De acordo com o SICP, uma função retorna sempre o mesmo valor se você passar pra ela sempre o mesmo parâmetro.
Por exemplo:

(define (add5 x) (+ x 5))

Enquanto que uma procedure seria algo como (random 10), que nem sempre vai retornar o mesmo resultado.

Um ano e dois meses atrasado :wink:

Essa é a definição matemática de funções. Aliás, esse é o mesmo princípio utilizado pelas linguagens funcionais, e o motivo da extrema escalabilidade delas.

[quote=eliseurm]Espero que nao tenha chegado tarde de mais, mas para finalizar a discussão…

Resumindo, método so se estiver definido dentro de uma função.

[/quote]

Ratificando… :stuck_out_tongue:

Resumindo, método so se estiver definido dentro de uma CLASSE.

O que isso tem a ver com escalabilidade? Me dá uma luz ae! :stuck_out_tongue:

O que isso tem a ver com escalabilidade? Me dá uma luz ae! :P[/quote]

Basicamente, se duas funções dessas não dependerem uma da outra, o código pode ser rodado em qualquer thread, processo, CPU ou outra máquina do sistema simultaneamente com outras, e seu funcionamento é garantido.

Mais ou menos. De qualquer forma isso não se aplica em Java.

Nas linguagens que não são orientadas a objetos existem funcões (retornam um valor) e procedures (Executam e não retornam nada)

Nas linguagens orientadas a objetos criaram os tais métodos que são um misto entre funcões e procedures, podendo retornar ou não um valor.

[quote=juarezna]Nas linguagens que não são orientadas a objetos existem funcões (retornam um valor) e procedures (Executam e não retornam nada)

Nas linguagens orientadas a objetos criaram os tais métodos que são um misto entre funcões e procedures, podendo retornar ou não um valor.
[/quote]

isso nao tem necessariamente a ver com linguagens OO ou nao-OO. A versao curta eh que algumas linguagens fazem distincao entre funcoes, metodos e procedimentos por diversos motivos (paradigma funcional ou convencao, geralmente). Em java isso nao importa.

[quote=pcalcado][quote=juarezna]Nas linguagens que não são orientadas a objetos existem funcões (retornam um valor) e procedures (Executam e não retornam nada)

Nas linguagens orientadas a objetos criaram os tais métodos que são um misto entre funcões e procedures, podendo retornar ou não um valor.
[/quote]

isso nao tem necessariamente a ver com linguagens OO ou nao-OO. A versao curta eh que algumas linguagens fazem distincao entre funcoes, metodos e procedimentos por diversos motivos (paradigma funcional ou convencao, geralmente). Em java isso nao importa.[/quote]

Shoes, como é o esquema de subrotinas em Ruby? Entra até closure no conto?

Edit: Ah, esqueci que era Java Básico… apesar de não ter muito mais a ver especificamente.

Blocos são objetos que capturam o escopo de onde foram declarados. Ruby não é muito diferente de ajava quanto ao uso dos termos ‘função’ e ‘método’.

Uma classe é definida pelos seus membros. Os membros de uma classe podem ser de diferentes categorias: atributos , métodos e construtores.

Atributos são variáveis declaradas no escopo da classe ou do objeto da classe.
Métodos são conjuntos de instruções executáveis a pedido do programador após o objeto ser criado.
Construtores são conjuntos de instruções executados pela JVM antes do objeto ser criado. Construtores não são métodos.

Métodos não existe sem um classe. Nenhuma instrução , em Java, existe fora de uma classe, portanto, todas elas compõem métodos.

Função é um conceito matemático que mapeia elementos de um conjunto (dominio) para elementos de outro conjunto (contra-dominio). Em linguagens não orientadas a objetos ou que não obrigam que instruções sejam incluidas em classes, Função - por semelhança com a matemática - é um conjunto de instruções que é obrigado a retornar um valor. Para destinguir este tipo de conjunto de instruções de outros que não são obrigados a retornar coisa alguma, estes últimos chamaram-se rotinas ou procedimentos ( por extensão do lingo das linguagens de banco de dados)

Os termos “função” e “procedimento” implicam que ha uma distinção intrínseca ao suporte a cada um por parte da linguagem. método significa que é um membro de uma classe.
Método pode ser chamado de função ou procedimento embora isso não seja correto já que o método SEMPRE retorna algo, mesmo que esse algo seja “nada”. Portanto, eles teriam que ser considerados sempre funções, pelo que a dicotomia função-procedimento perderia o sentido. Dito de outra forma, Função e Procedimento são especialidades de Rotina, mas Método não é uma Rotina, logo não pode ser uma função ou procedimento.

Em OO é incorreto chamar os métodos de função ou procedimento ( ou rotina, já agora).

[quote=sergiotaborda]Os termos “função” e “procedimento” implicam que ha uma distinção intrínseca ao suporte a cada um por parte da linguagem. método significa que é um membro de uma classe.
Método pode ser chamado de função ou procedimento embora isso não seja correto já que o método SEMPRE retorna algo, mesmo que esse algo seja “nada”. Portanto, eles teriam que ser considerados sempre funções, pelo que a dicotomia função-procedimento perderia o sentido. Dito de outra forma, Função e Procedimento são especialidades de Rotina, mas Método não é uma Rotina, logo não pode ser uma função ou procedimento. [/quote]

Companheiro, considerando que “nada” em Java é null, métodos nem sempre retornam um valor, é só marcar ele como void. É só tentar fazer isso aí embaixo pra perceber como em Java os métodos nem sempre retornam valores:

Object o = metodoQueRetornaVoid();

Em algumas outras linguagens, como em Ruby, os métodos sempre retornam um valor, que em Ruby seria o NilObject se você não tiver retornado nada no seu método e a última linha avaliar pra “nil”.

No fundo eles são executados logo depois do objeto ser criado, correto? Tanto que da pra fazer aquela bagunca de guardar uma referencia pro objeto mesmo o construtor lancando exception.

[quote=Paulo Silveira][quote=sergiotaborda]
Construtores são conjuntos de instruções executados pela JVM antes do objeto ser criado. Construtores não são métodos.
[/quote]

No fundo eles são executados logo depois do objeto ser criado, correto? Tanto que da pra fazer aquela bagunca de guardar uma referencia pro objeto mesmo o construtor lancando exception.[/quote]

No fundo mesmo, é só um método especial, que é chamado após a construção do objeto e após a execução dos seus blocos de inicialização. O construtor nunca é executado antes do objeto ser criado.