Função, procedimento e método - Diferenças
1.690 views0
por Eric Cancellgliere · Published 23/10/2015 · Updated outubro 21, 2015
Função, procedimento e método são conceitos muitas vezes confundidos na área de desenvolvimento de software, principalmente por programadores iniciantes ou inexperientes. Mas isto é normal, já que os conceitos são muito parecidos, diferindo uns dos outros de forma muito sutil, como veremos logo a seguir.
Porém, antes de definirmos função, procedimento e método, é necessário falar um pouco sobre a importância da utilização destes em nossos programas, uma vez que facilitarão (e muito) o desenvolvimento de algoritmos mais completos e complexos.
Função, procedimento e método: Por que usar?
Acesse o canal o YouTube do blog Programação em Foco e veja a lista de vídeos que é exibida ali. Como vocês acham que o YouTube cria a lista de vídeos de um canal? Acham que o programador que fez a página repetiu o código que lista os vídeos diversas vezes para cada um dos canais? Ou será que ele fez o código uma vez e este código é acionado sempre que houver vídeos para listar?
Bom, é claro que o processo de listagem dos vídeo do YouTube é automático e já foi programado para ser daquela forma. E sim, o código que lista os vídeos para cada canal é um só e é acionado sempre que um usuário acessa determinado canal. Além disso, este código também é utilizado para quando pesquisamos um vídeo.
O que estou querendo dizer é que foi criado um código de listagem de vídeos que se repete em várias partes do site. Porém, é um único código que é chamado sempre que houver esta necessidade: "listar vídeos". Em outras palavras, foi criada uma função, procedimento ou método que realiza tal listagem. A isto é dado o nome de modularização (divisão do programa em partes).
A modularização serve justamente para que não precisemos ficar repetindo (copiando e colando) um determinado bloco de código por todo nosso programa sempre que precisarmos dele. No caso da listagem de vídeos, por exemplo, há uma função, procedimento ou método chamado "ListarVideos" com todas as linhas de código necessárias para fazer a listagem. E este módulo é chamado sempre que o site precisar exibir uma lista de vídeos.
Os módulos nos ajudam a otimizar nossos programas, principalmente para economizar linhas de código e facilitar a manutenção dos sistemas que desenvolvemos, já que é muito mais fácil corrigir um erro que esteja um só lugar do que um erro que esteja espalhado em todo o sistema (e quanto maior o sistema, pior será).
Função, procedimento e método: Definições e conceitos
Agora que sabemos a importância de utilizar uma função, procedimento ou método, vejamos as particularidades de cada um.
Um procedimento é uma sequência de instruções específicas. Criamos procedimentos quando houver a necessidade de repetir, por diversas vezes, um mesmo trecho de código em um programa. Veja o exemplo abaixo de um programa escrito em linguagem C com um procedimento recursivo que exibe um menu de opções:
Procedimento que exibe um menu de opções
/* * Programa: Procedimento que exibe um menu de opções * Data de criação: 19/10/2015 * Autor: Eric Cancellgliere (http://programacaoemfoco.com.br) * Versão: 1.0 * Última modificação em [19/10/2015] feita por [Eric Cancellgliere] */ //bibliotecas #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <windows.h> void menu () { //variáveis int opc; do{ system ("cls"); printf ("Digite:\n\n1 - Cadastro\t2 - Consulta\t3 - Sair\n\nOpção: "); scanf ("%d", &opc); //Seleção de opções switch (opc){ case 1: printf ("\nVocê selecionou a opção de cadastro!\n\n"); system ("pause > NULL"); break; case 2: printf ("\nVocê selecionou a opção de consulta!\n\n"); system ("pause > NULL"); break; case 3: printf ("\nFim do programa!\n\n"); break; default: printf ("\nOpção inválida!\n\n"); system ("pause > NULL"); } }while(opc!=3); } int main(void){ //variáveis int m = 0; //comando de regionalização setlocale(LC_ALL, "Portuguese"); //título do programa SetConsoleTitle("Menu de opcoes"); menu();//chamada do procedimento system ("pause"); return 0; }
* Programa: Procedimento que exibe um menu de opções
* Data de criação: 19/10/2015
* Última modificação em [19/10/2015] feita por [Eric Cancellgliere]
printf ("Digite:\n\n1 - Cadastro\t2 - Consulta\t3 - Sair\n\nOpção: ");
//Seleção de opções
printf ("\nVocê selecionou a opção de cadastro!\n\n");
printf ("\nVocê selecionou a opção de consulta!\n\n");
printf ("\nFim do programa!\n\n");
SetConsoleTitle("Menu de opcoes");
menu();//chamada do procedimento
Este programa mostra um menu com três opções: Cadastro, Consulta e Sair. Há uma estrutura de loop (repetição) que controla a exibição do menu. Se o usuário selecionar qualquer uma das opções disponíveis (1, 2 ou 3), uma mensagem é exibida. No caso das opções Cadastro e Consulta, após a exibição da mensagem, o programa aguarda o pressionamento de uma tecla e, por conta da condição especificada no loop, volta a executar o menu. O mesmo acontece se o usuário digitar qualquer outro número que não seja o das opções disponíveis. Finalmente, quando o usuário pressiona o número 3 (referente a opção de sair) o programa é encerrado.
Um procedimento também pode receber parâmetros. Veja:
Procedimento que verifica se um numero é par ou ímpar
/* * Programa: Procedimento que verifica se um numero é par ou ímpar * Data de criação: 19/10/2015 * Autor: Eric Cancellgliere (http://programacaoemfoco.com.br) * Versão: 1.0 * Última modificação em [19/10/2015] feita por [Eric Cancellgliere] */ //bibliotecas #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <windows.h> void ParOuImpar (int x) { if (x % 2 == 0){ printf ("\n\n%d é par!\n\n", x); } else{ printf ("\n\n%d é ímpar!\n\n", x); } } int main(void){ //variáveis int numero; //comando de regionalização setlocale(LC_ALL, "Portuguese"); //título do programa SetConsoleTitle("Par ou Impar"); printf ("Informe um número: "); scanf ("%d", & numero); ParOuImpar (numero);//chamada do procedimento system ("pause"); return 0; }
* Programa: Procedimento que verifica se um numero é par ou ímpar
void ParOuImpar (int x) {
printf ("\n\n%d é par!\n\n", x);
printf ("\n\n%d é ímpar!\n\n", x);
printf ("Informe um número: ");
scanf ("%d", & numero);
ParOuImpar (numero);//chamada do procedimento
Aqui o procedimento recebe um número capturado na função main(), verifica se o número é par ou ímpar e exibe uma mensagem.
Uma função não é apenas uma sequência de instruções como os procedimento. Nós utilizamos funções quando precisamos retornar algum valor, o que é algo muito parecido com o que fazemos na matemática. Vamos ver o exemplo a seguir:
Função para calcular a raiz quadrada de um número
/* * Programa: Função para calcular a raiz quadrada de um número através da equação de Pell * Data de criação: 19/10/2015 * Autor: Eric Cancellgliere (http://programacaoemfoco.com.br) * Versão: 1.0 * Última modificação em [19/10/2015] feita por [Eric Cancellgliere] */ //bibliotecas #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <windows.h> int raizQ (int x) { //variáveis int n = 0; int i = 1; //loop que fará o cálculo da raiz quadrada while (x >= i){ x -= i; i = i + 2; n = n + 1; } return n;//retorno do valor desejado } int main(void){ //variáveis int m = 0; //comando de regionalização setlocale(LC_ALL, "Portuguese"); //título do programa SetConsoleTitle("Raiz de um numero"); printf ("Informe o número que deseja saber a raiz quadrada: "); scanf ("%d", &m); printf ("\n\nA raiz de %d é %d\n\n", m, raizQ(m));//exibição do retorno da função system ("pause"); return 0; }
* Programa: Função para calcular a raiz quadrada de um número através da equação de Pell
int raizQ (int x) {
//loop que fará o cálculo da raiz quadrada
while (x >= i){
return n;//retorno do valor desejado
SetConsoleTitle("Raiz de um numero");
printf ("Informe o número que deseja saber a raiz quadrada: ");
printf ("\n\nA raiz de %d é %d\n\n", m, raizQ(m));//exibição do retorno da função
Repare que as funções possuem um tipo, assim como as variáveis. Desta forma, uma função do tipo inteiro retornará um valor do tipo inteiro. Se o retorno for atribuído a uma variável, deve ser colocado em uma variável de mesmo tipo (ou exibido diretamente como fizemos acima no printf).
Um método pode ser tanto uma função quanto um procedimento. Chamamos uma função ou procedimento de método na programação orientada a objetos quando estes estão associados a um objeto ou uma classe (veja paradigmas de programação aqui). Vejamos aqui um exemplo de métodos escrito em linguagem C++ retirado do site WikiBooks (link aqui):
struct MyData { int n; char data[10]; float nReal; bool write_data(int pos, char c) { if (pos >= 0 && pos < 10) { data[pos]=c; return true; } return false; } char read_data(int pos) { if (pos >= 0 && pos < 10) { return data[pos]; } return '\0'; } };
Neste exemplo temos uma estrutura com métodos para controlar a escrita e a leitura de dados do vetor data[10], apenas para garantir que a digitação e a leitura não ultrapassem o limite do vetor (10 posições).
Vimos que a utilização de funções e procedimentos trazem diversas facilidades como evitar códigos duplicados, facilitar a leitura e entendimento do código e também tornar mais simples o trabalho de manutenção e adaptação do código.
Além disso, entendemos que método é o nome que se dá a funções e procedimentos em linguagens orientadas a objetos, apenas por uma questão conceitual destas linguagens. No fundo, acabam sendo a mesma coisa.