Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Informática para Internet / Programação Estruturada / Aula
Vamos ao segundo tipo de rotina que podemos criar, os chamados procedimentos, que são as rotinas que não retornam valor. É isso mesmo, essa é a única diferença entre funções e procedimentos! Por isso, é comum algumas pessoas no dia a dia se referirem a funções e procedimentos como uma coisa só. Evite isso! Use sempre a terminologia certa para cada tipo de rotina.
Você já deve ter percebido que já faz uso de um procedimento. Sabe de qual procedimento estou falando? Identifique-o no programa a seguir:
import java.util.Scanner;
public class ProgramaOla {
public static void main(String[] args) {
Scanner leitor = new Scanner(System.in);
System.out.println("Digite seu nome:");
String nome = leitor.nextLine();
System.out.println("Olá, " + nome);
}
}
Conseguiu identificar? É a rotina main. Ela é um procedimento! É uma rotina que recebe como argumento um array de Strings e que não retorna nada. Isso pode ser verificado pela palavra chave void que está no lugar do tipo de retorno. O void representa o conjunto vazio, indicando que não há valor válido a ser retornado. Em outras palavras, o void indica que a rotina não retorna nada, ou seja, que ela é um procedimento.
Dessa forma, o que muda na forma geral de se declarar um procedimento é a presença do void no lugar do tipo de retorno:
public static void <nome_do_procedimento> (declaração_de_parâmetros)
{
corpo_da_função;
}
Vejamos um exemplo de código que faz uso de outros procedimentos além do main:
import java.util.Scanner;
public class ProgramaFuncaoMedia3 {
public static final String APROVADO = "Aprovado";
public static final String REPROVADO = "Reprovado";
public static final String RECUPERACAO = "Em recuperação";
public static void main(String[] args) {
Scanner leitor = new Scanner(System.in);
pegarNotas(leitor);
}
private static void pegarNotas(Scanner leitor) {
System.out.println("Digite a primeira nota:");
double nota1 = leitor.nextDouble();
System.out.println("Digite a segunda nota:");
double nota2 = leitor.nextDouble();
System.out.println("Digite a terceira nota:");
double nota3 = leitor.nextDouble();
System.out.println("Digite a quarta nota:");
double nota4 = leitor.nextDouble();
double media = calcularMedia(nota1, nota2, nota3, nota4);
System.out.println("Sua média foi: " + media);
System.out.println("Resultado, você está " + verificarSituacaoAluno(media));
}
public static String verificarSituacaoAluno(double media) {
if (media >= 7) {
return APROVADO;
} else if (media < 3) {
return REPROVADO;
} else {
return RECUPERACAO;
}
}
public static double calcularMedia(double nota1, double nota2, double nota3, double nota4) {
return (nota1 + nota2 + nota3 + nota4)/4;
}
}
Essa nova versão do programa que calcula a média de 4 notas e da situação do aluno agora tem um procedimento chamado de pegarNotas. Esse procedimento está encapsulando o código que lê as notas, que chama as funções calcularMedia() e verificarSituacaoAluno(), e que imprime as informações na tela.
Vamos agora observar dois pontos importantes no código do ProgramaFuncaoMedia3. Em primeiro lugar, observe que uma rotina (função ou procedimento) pode chamar outra rotina. No caso, a rotina main está chamando a rotina pegarNotas() que por sua vez chama as rotinas calcularMedia() e verificarSituacaoAluno(). É muito comum em sistemas grandes observarmos essas situações de funções e procedimentos que chamam outras funções e procedimentos.
O segundo ponto que você pode inclusive estar se perguntando é se vale à pena criar o procedimento pegarNotas(). Essa questão é um pouco mais complicada. Olhando só o código mostrado, temos uma simplificação extrema da rotina main. Para algumas pessoas, isso pode não ser um benefício suficiente para justificar a criação de uma nova rotina. Porém, a criação da rotina pegarNotas() permite que outras partes do sistema (outras classes) façam uso dela. Se isso for necessário, passa a ser interessante a criação dessa rotina pegarNotas().
Versão 5.3 - Todos os Direitos reservados