Cursos / Redes de Computadores / Programação Estruturada / Aula

arrow_back Aula 08 - Funções e procedimentos

3. Funções

Você sabe o que são funções? Funções são estruturas de código que permitem o usuário organizar seus programas em partes menores e mais simples. Se elas não existissem, os programas seriam mais complexos, com bastante duplicação de código, etc. De fato, isso ocorria nas primeiras linguagens de programação. Era uma tarefa difícil detectar e corrigir os erros lógicos e de sintaxe da linguagem. Para fazermos programas grandes e complexos, temos de construí-los em blocos, dessa forma, teremos um código de mais fácil compreensão e melhor organizado.

Mas, vamos ver como isso funciona na prática. Imagine um programa que calcula a média obtida por um aluno nas suas quatro notas de uma matéria. Esse é um problema pequeno e simples, vamos ver como você resolveria com os conhecimentos mostrados até agora:

O ProgramaMedia lê quatro notas do teclado e calcula a média aritmética obtida com as quatro notas digitadas. Muito bem, imagine agora que em outras partes do seu programa você vai ter que fazer esse mesmo cálculo. Você teria que escrever novamente essa fórmula, certo? Vai escrever a fórmula uma vez em cada lugar que ela precisar ser utilizada. Isso é ruim, porque você estará duplicando código. Caso você precise alterar a fórmula, vai ter que alterar em vários lugares. Por exemplo, caso você queira mudar de média aritmética para média ponderada, vai ter que alterar a fórmula em vários lugares. Além do maior trabalho de procurar e trocar a fórmula diversas vezes, você corre o risco de esquecer-se de alterar uma delas e de o programa ficar inconsistente!

Para solucionar esse problema, você pode estruturar melhor o programa com o uso de uma função. Veja só como fica:

Note que no ProgramaFuncaoMedia existe a rotina main e agora uma rotina calcularMedia(). Essa rotina é chamada de função porque ela retorna um valor, a média calculada de acordo com as notas passadas como parâmetro. Ao definir a função calcularMedia(), você pode executá-la a partir da rotina main, como mostrado na linha 14 do programa.

Se você observar bem, em termos de número de linhas de código, o programa até aumentou nesse exemplo específico. Porém, agora você pode chamar a execução da função calcularMedia(), a partir de qualquer parte do seu programa. Isso faz com que você evite a duplicação do código que está dentro da função. Dizemos aqui que o código de calcular a média está encapsulado dentro da função, já que a rotina main agora só faz chamar a função, sem saber como ela está implementada. Isso permite que você altere o corpo da função sem precisar alterar o corpo da rotina main.

Entrando em mais detalhes, uma função em Java tem a seguinte forma geral:

O tipo-de-retorno é o tipo do valor que a função vai retornar. Já o nome da função indica o nome pelo qual o bloco de código correspondente à função será chamado. É através do nome da função que acionamos sua execução a partir de outras partes do código, como a partir da rotina main. As regras para nomear uma função são as mesmas que utilizamos para nomear as nossas variáveis.

No corpo da função, podemos declarar variáveis (chamadas de variáveis locais) e comandos da linguagem. Uma variável local somente pode ter seu valor acessado dentro da função em que foi declarada. Um módulo pode também não ter nenhuma variável local. Por fim, a declaração de parâmetros é uma lista com a seguinte forma geral:

Repare que o tipo deve ser especificado para cada uma das N variáveis de entrada. É na declaração de parâmetros que informamos ao compilador quais serão as entradas da função (assim como informamos a saída – tipo de retorno).

Vejamos um outro exemplo de código organizado em funções:

Vamos fazer uma análise do ProgramaFuncaoQuadrado. Esse programa declara uma função chamada quadrado, que, dado um número, retorna o valor desse número multiplicado por ele mesmo, ou seja, esse número elevado ao quadrado. Essa função é então chamada em dois locais da rotina main. A função evita assim que a fórmula seja escrita em dois lugares diferentes. Isso é o que chamamos de promover o reuso de código. E apesar de estarmos trabalhando com funções bem simples por enquanto, essas funções poderiam ter, digamos, 200 linhas de código!

Como dito no início da aula, as funções vão permitir que você divida o problema em partes menores que depois possam ser combinadas para resolver um problema maior. Imagine então o caso de um programa que quer saber se um determinado aluno passou por média ou se está na final. Note que esse problema pode ser quebrado em dois. O primeiro trata de calcular a média do aluno. Já o segundo, de verificar se com essa média o aluno está aprovado ou não. Veja como podemos resolver esse problema fazendo o uso de funções:

A primeira novidade que destacamos no ProgramaFuncaoMedia2 é a declaração de constantes que representam o texto que queremos retornar. Essa é uma boa prática de programação, porque se quisermos mudar o texto, basta alterar nas constantes. Além disso, se precisarmos comparar o resultado da função com os possíveis valores que ela pode retornar, fazemos uso das constantes.

Na rotina main, temos as chamadas para duas funções, a calcularMedia() e a verificarSituacaoAluno(). A primeira, nós já comentamos, é igual àquela declarada no ProgramaFuncaoMedia. Já a segunda, recebe uma média, a qual foi calculada pela função calcularMedia() e retorna o texto correspondente ao status do aluno (aprovado, reprovado ou em recuperação).

Note que com o uso das funções, o código da rotina main tende a ser pequeno, assim como o de todas as funções. Esse é um dos benefícios de usarmos funções. Nosso código vai ficando mais simples de ser entendido e alterado.

Versão 5.3 - Todos os Direitos reservados