Algoritmos Desenvolvimento Modularização: Funções e Procedimentos

Entenda o conceito de modularização e a utilização de funções e procedimentos no desenvolvimento de software.

Wesley Gado 14 de dezembro de 2020

Nos artigos anteriores aprendemos sobre variáveis e constantes, operadores de comparação, estrutura condicionais e de repetição agora vamos entender o uso do conceito de modularização.

Lógica de Programação Completo
Curso de Lógica de Programação Completo
CONHEÇA O CURSO

Modularização

Devido as funções e procedimentos nós podemos modular a construção de nosso software, ou seja, dividir várias partes do sistema em partes menores que possuem tarefas específicas. O uso deste recurso traz muitas vantagens como a reutilização do código, a facilidade de manutenção, melhor legibilidade facilitando a compreensão do código por outros desenvolvedores, entre outras. Portanto, o conceito de dividir o seu código em blocos que se comunicam entre si e que cada parte tenha uma responsabilidade especifica pode ser chamado de modularização.

A modularização é mais vista na programação estruturada, mas os conceitos são muito importantes para quem está aprendendo lógica, pois outros paradigmas utilizam algumas características similares.

Funções e Procedimentos

Funções

Uma função é um conjunto de comandos que pode ser separado por um “bloco” de código visando o processamento de uma tarefa específica, onde esta função recebe parâmetros e retorna um valor, por exemplo: ao desenvolver uma calculadora simples nós teremos, ao menos, quatro operações como adição, subtração, multiplicação e divisão. Cada operação pode ser traduzida em uma função específica que será chamada de acordo com a necessidade do usuário a qualquer momento.

A função somar ficaria da seguinte forma utilizando a linguagem C:

int somar(int n1, int n2){
    int soma;
    soma = n1 + n2;
    return(soma);
}

Vamos analisar o código acima, podemos ver que a função somar tem a responsabilidade única de somar dois valores (que são recebidos como parâmetros) e retornar o resultado da soma destes dois valores, como podemos ver na linha return(soma). Logo em seguida veremos como podemos chamar a função somar em nossa função principal, a main:

void main() {
    int n1, n2;
    printf("Digite o primeiro valor:");
    scanf("%d", &n1);
    printf("Digite o segundo valor:");
    scanf("%d", &n2);

    printf("\\nA soma e %d.", somar(n1,n2));
}

A função main é a função principal que executa o nosso código. Na função main, é chamada a função somar da seguinte maneira: somar(n1,n2) onde temos o nome da função e logo em seguida a entrada dos parâmetros.

Perceba que a função somar possui a característica int antes de seu nome, isso significa que ela irá retornar um valor inteiro, valor este que é exibido em nossa função principal. Sendo assim, em qualquer parte de nosso algoritmo que formos somar dois valores nós não precisamos repetir o mesmo código, será necessário somente chamar a função e alterar os parâmetros.

Os parâmetros são os valores que a função irá pedir para executar a sua tarefa, neste caso ao criar a função estamos informando que é necessário passar os valores n1 e n2, ambos inteiros, para que desta forma a função faça a soma destes dois valores, e retorne a variável ´soma´.

Podemos ver o resultado do código acima:

Resultado Terminal exemplo função

Lógica Orientada a Objetos Completo
Curso de Lógica Orientada a Objetos Completo
CONHEÇA O CURSO

Procedimentos

Os procedimentos, ou procedures, são similares as funções tanto na sua criação como no conceito de ter uma responsabilidade específica, porém nós utilizamos os procedimentos quando não há retorno, para mostrar uma mensagem por exemplo.

Para entender melhor podemos complementar o exemplo acima com um procedimento que diga se um número é par ou ímpar, para isso, vamos criar o procedimento parOuImpar:

void parOuImpar(int n1){
    float resto;
    resto = n1 % 2;
    if (resto != 0) {
        printf("\\nO numero %d e impar.", n1);
    } else {
        printf("\\nO numero %d e par.", n1);
    }
}

Criamos o procedimento parOuImpar que recebe um único valor de parâmetro, onde a responsabilidade dele é verificar e exibir a mensagem se o valor é par ou ímpar, sem a necessidade de retornar algum valor, perceba que se tratar de um procedimento nós iniciamos a criação dele com o tipo void.

Ao final, nosso código completo ficará da seguinte forma:

int somar(int n1, int n2){
    int soma;
    soma = n1 + n2;
    return(soma);
}

void parOuImpar(int n1){
    float resto;
    resto = n1 % 2;
    if (resto != 0) {
        printf("\\nO numero %d e impar.", n1);
    } else {
        printf("\\nO numero %d e par.", n1);
    }
}

void main() {
    int n1, n2;
    printf("Digite o primeiro valor:");
    scanf("%d", &n1);
    printf("Digite o segundo valor:");
    scanf("%d", &n2);

    printf("\\nA soma e %d.", somar(n1,n2));
    parOuImpar(somar(n1,n2));
}

Outro ponto que vale ressaltar, em nossa função principal main, veja que curioso, chamamos o procedimento parOuImpar e como parâmetro nós passamos a função somar, afinal, ela retorna um valor inteiro, que é o que o nosso parâmetro pede.

O resultado para o código acima será:

Resultado terminal exemplo procedimento

Funções e Procedimento em outras linguagens

Em C podemos diferenciar a função do procedimento utilizando void já que o procedimento não retornará nenhum valor, porém em Pascal, por exemplo, devemos declarar de forma diferente, onde as funções terão que ser declaradas utilizando function e os procedimentos utilizando procedure, como podemos ver no exemplo abaixo:

Program exemploIdade;
var
idade :integer;

procedure maioridade(idade :integer);
begin
    if (idade >= 18) then
      Writeln('Maior de idade')
    else
        Writeln('Menor de idade');
end;

begin
    Write('Informe a idade: ');
    readln(idade);
    maioridade(idade);    
end.

Ao criarmos a procedure maioridade, ela não irá retornar nenhum valor, mas sim exibir as mensagens de acordo com o valor da idade digitada pelo usuário, podendo ser maior de idade para a idade igual ou acima de 18 anos, ou menor de idade para valores menores de 18. Podemos criar uma função com a mesma responsabilidade que esse procedimento, porém ficaria da seguinte forma:

Program exemploIdade;
var
idade :integer;

function maioridade(idade :integer):boolean;
begin
    if (idade >= 18) then
      maioridade:=true
    else
        maioridade:=false;
end;

begin
    Write('Informe a idade: ');
    readln(idade);

    if maioridade(idade)=true then
      Writeln('Maior de idade')
    else 
        Writeln('Menor de idade');            
end.

Perceba que a função maioridade não exibe nenhuma mensagem, mas sim retorna um valor booleano, ou seja, se é verdadeiro ou falso, e com isso ao chamar a função é exibida a mensagem de acordo com o retorno obtido pela função.

Conclusão

Utilizando o conceito de modularização podemos facilitar a construção de sistemas mais complexos dividindo as responsabilidades em blocos menores e específicos utilizando as funções e procedimentos como vimos neste artigo, lembrando que este conceito não está ligado a somente a Linguagem C ou Pascal, mas sim a lógica de programação como um todo. Outro artigo fundamental para entender os conceitos da área de desenvolvimento é guia de introdução a programação, aconselho fortemente a leitura.

Projeto de Banco de dados - Fundamentos
Curso de Projeto de Banco de dados - Fundamentos
CONHEÇA O CURSO
Deixe seu comentário

Conheça o autor desse artigo

  • Foto Autor Wesley Gado
    Wesley Gado

    Formado em Análise e Desenvolvimento de Sistemas pelo Instituto Federal de São Paulo, atuou em projetos como desenvolvedor Front-End. Nas horas vagas grava Podcast e arrisca uns três acordes no violão.

    Posts desse Autor

Artigos relacionados