Função e procedimento

O que é uma função/procedimento
Podemos dizer que funções/procedimentos são sub-rotinas que executam uma tarefa particular. Todas as linguagens de programação atuais possuem formas de se criar sub-rotinas incluindo C++, JAVA, C# e Object Pascal (Delphi). Além do programador poder criar suas próprias sub-rotinas, a própria linguagem de programação tem sub-rotinas que facilitam o trabalho do programador. Como exemplo podemos citar funções matemáticas para calculo de seno, coseno e tangente, funções de texto que podem pegar partes de um texto(substring), contar a quantidade de caracteres, transformar tudo em maiúsculo, etc.

Qual sua utilidade
Elas são muito utilizadas para organizar a programação, criando sub-rotinas que poderão ser reutilizadas em várias partes do programa, evitando assim que um mesmo código de programação tenha que ser reescrito várias vezes. Outra característica importante é o fato de que quando criamos uma função ou procedimento, caso ela possua algum erro é mais fácil de corrigir pois teremos que mudar apenas a sub-rotina e dessa forma, todos os locais onde são chamados essas sub-rotinas já estarão corrigidos. Isso facilita a manutenção do programa.

Qual a diferença entre uma função e um procedimento
A principal diferença entre uma função e um procedimento está no fato de que uma função obrigatoriamente retorna um valor, enquanto que um procedimento não retorna valor algum, ou seja o procedimento apenas executa uma ação. No caso do Pascal(Object Pascal/Delphi) o comando para criar uma função é diferente do comando para criar um procedimento, como veremos abaixo.

Como criar uma função ou procedimento
Uma função/procedimento é constituída por 3 partes:
  • Cabeçalho: No cabeçalho você define o nome da função/procedimento, os parâmetros que serão passados para a mesma(não é obrigatório) e no caso da função, qual o tipo de retorno que ela terá.
  • Variáveis: Caso seja necessário pode-se definir variáveis de apoio que só serão poderão ser utilizadas dentro da sub-rotina(variáveis locais). Os valores dessas variáveis são automaticamente descartadas quando a sub-rotina é finalizada.
  • Programação: Este é o local que contém o código de programação da sub-rotina.
Pascal (Object Pascal, Delphi)
Procedimento
procedure NomeDaProcedure(Parâmetro1: Tipo; ParâmetroN: Tipo);
var
{declaração de variáveis locais, quando necessárias}
Begin

   {bloco de instruções}

end;
Exemplo:
program ProcTesteSoma;

procedure soma(n1,n2:integer);
begin
   Write('A soma dos números é: ',(n1+n2));
   readln;
end;

begin
   Soma(10,20);
end.
Função
Diferente do procedimento, devemos definir que tipo de dado a função vai retornar, e dentro do bloco de instruções devemos incluir um comando para retornar o valor da função, no caso do pascal usamos o próprio nome da função, em Object Pascal podemos utilizar o nome da função ou o comando Result, que é o mais recomendado quando estamos trabalhando orientado a objetos.
function NomeDaFunção(Parâmetro1: Tipo; ParâmetroN: Tipo): Tipo de retorno;
Var
{declaração de variáveis locais, quando necessárias}
Begin

   {bloco de instruções}
   NomeDaFunção := [ValordeRetorno]; ou Result := [Valor de Retorno];

end;
Exemplo:
program FuncTesteSoma;

function soma(n1,n2:integer):integer;
begin
   soma := (n1+n2); 
end;

begin
   Write('A soma dos números é: ',Soma(10,20));
   readln;   
end.

Outras Linguagens

Em outras linguagens de programação, para criação de uma função usamos o mesmo comando a diferença está no retorno da sub-rotina.

PHP
[+/-] Mostrar/Ocultar
Procedimento
function NomedaProcedure($parametro1,$parametroN){
    
   /* bloco de instruções */

}
Exemplo:

Função
function NomedaFuncao($parametro1,$parametroN){
    
   /* bloco de instruções */
   return([ValordeRetorno]);
}
Exemplo:

Java
[+/-] Mostrar/Ocultar
Na linguagem java não existe funções e procedimentos e sim métodos, os métodos podem ou não retornar um valor, semelhante aos procedimentos e funções, utiliza-se palavra reservada void para indicar que o método não tem retorno.

Procedimento
    public void nomeDaProcedure(tipo parametro1, tipo paramentroN){
       
      /* bloco de instruções */

    }
Exemplo:
public class ProcTesteSoma {

     public static void main(String[] args) {
        soma(10,20);
    }
    
    public static void soma(int n1, int n2){
       System.out.println("A soma é: "+(n1+n2));
    }
    
}

Função
    public int nomeDaFunção(tipo parametro1, tipo paramentroN){
       
      /* bloco de instruções */
      return [valorDeRetorno];

    }
Exemplo:
public class FuncTesteSoma {

     public static void main(String[] args) {
       System.out.println("A soma é: "+soma(10,20));
    }
    
    public static int soma(int n1, int n2){
       return n1+n2;
    }
    
}
C#
[+/-] Mostrar/Ocultar
Assim como na linguagem java, em C# não existe funções e procedimentos e sim métodos, e utiliza-se a palavra reservada void para indicar que o método não tem retorno.

Procedimento
    public void nomeDaProcedure(tipo parametro1, tipo paramentroN)
   {
       
      /* bloco de instruções */

    }
Exemplo:
using System;

namespace ProcTesteSoma
{
 class MainClass
 {
  public static void Main (string[] args)
  {
     Soma(10,20); 

  }
  
  public static void Soma (int n1, int n2)
  {
   Console.WriteLine("A soma dos numeros é: "+(n1+n2));
  }
 }
}

Função
    public int nomeDaFunção(tipo parametro1, tipo paramentroN){
       
      /* bloco de instruções */
      return ([valorDeRetorno]);

    }
Exemplo:
using System;

namespace FuncTesteSoma
{
 class MainClass
 {
  public static void Main (string[] args)
  {
     Console.WriteLine("A soma dos numeros é: "+Soma(10,20)); 

  }
  
  public static int Soma (int n1, int n2)
  {
   return (n1+n2);
  }
 }
 
}
Para entender sobre passagem de parâmetros clique aqui. Link

10 comentários:

Cs TeaM - Brasil disse...

belo post...vlw ajudou muito

Anônimo disse...

otimo

Anônimo disse...

obrigado voces me ajudaram a nao tomar recuperaçao '-' muito obrigado mesmo

Anônimo disse...

gostei ajudou muito para o meu trabalho escolar

Anônimo disse...

e visualg?

Vanilson-sama disse...

Companheiro, estudo programação já há alguns anos, mas os professores da faculdade nunca me explicaram direito o que significa "retornar" um valor. Significa imprimi-lo diretamente na tela? Armazenar este valor em uma variável? Se pudesse, me ajudaria muito. Desde já, obrigado.

Anônimo disse...

vc explicou o que ficou vago na merda do livro do Sebesta ... vc é foda valeuuu mesmo....

extremo_k47 disse...

Ótima explicação. um resumo de tudo que li.
Vlws me ajudo muito..!!

D13G1NN disse...

Muito bom post.
Muito obrigado pela dica.
Sou estudante de programação pelo curso adv aqui no rio de janeiro, www.cursoadv.com.br
Estou sempre em busca de material completar.

Marco de Oliveira disse...

Ótimo post! De forma clara e concisa ajudou a fixar e tirar as dúvidas que ainda tinha sobre funções e procedimentos.