O documento discute funções e procedimentos em Java. Resume-se em 3 frases:
1) Funções são blocos de código que retornam um valor ao serem chamados, enquanto procedimentos executam ações mas não retornam valores. 2) Funções e procedimentos organizam e reutilizam código, evitando repetições. 3) O documento fornece exemplos de como declarar e usar funções e procedimentos em Java.
2. Procedimentos – são estruturas que agrupam um
conjunto de comandos, que são executados
quando o procedimento é chamado.
Funções – são procedimentos que retornam um
valor ao seu término.
A Linguagem Java não faz distinção.
Prof. Adriano Teixeira de Souza
3. Evitam que os blocos do programa fiquem grandes
demais e mais difíceis de ler e entender.
Ajudam a organizar o programa.
Permitem reaproveitamento de códigos construídos
anteriormente.
Evitam repetição de trechos de
códigos, minimizando erros e facilitando
alterações.
Prof. Adriano Teixeira de Souza
4. <tipo> nome_da_função (<tipo> arg1, <tipo>
arg2, ..., <tipo> argN)
{
<corpo da função>
return valor_de_retorno;
}
Prof. Adriano Teixeira de Souza
5. Exemplo de uma função:
int soma(int a, int b)
{
int c;
c = a + b;
return c;
}
Prof. Adriano Teixeira de Souza
6. Toda função deve ter um tipo Os argumentos (ou parâmetros)
(String, int, float), o qual indicará o indicam o tipo e quais valores são
tipo de seu valor de retorno esperados para serem manipulados
(saída). pela função (entrada).
int soma(int a, int b)
{
int c;
Corpo da função
c = a + b;
return c;
}
Prof. Adriano Teixeira de Souza
7. Uma função pode não ter argumentos, basta
não informá-los. Exemplo:
int random()
{
Random rand = new Random();
return rand.nextInt(100);
}
Prof. Adriano Teixeira de Souza
8. A expressão contida no comando return é
chamado de valor de retorno da função.
Esse comando é sempre o último a ser executado
por uma função. Nada após ele será executado.
As funções só podem ser declaradas fora de outras
funções. Lembre-se que o corpo do programa
principal (main(String[] args)) é uma
função!
Prof. Adriano Teixeira de Souza
9. Uma forma clássica de realizarmos a invocação (ou
chamada) de uma função é atribuindo o seu valor a
uma variável:
resultado = soma(x,y);
Na verdade, o resultado da chamada de uma
função é uma expressão, que pode ser usada em
qualquer lugar que aceite uma expressão:
System.out.println("Soma: ”+ soma(a,b) );
Prof. Adriano Teixeira de Souza
10. Função que calcula a soma dos valores de x e
y:
static int x, y, resultado;
static int soma(int a, int b){
return (a + b);
}
public static void main(String[] args){
x = 3;
y = 5;
resultado = soma(x, y);
System.out.println(resultado);
}
Prof. Adriano Teixeira de Souza
11. As variáveis x e y no exemplo anterior são
chamadas de parâmetros reais.
Conforme exemplo anterior, os argumentos não
possuem necessariamente os mesmos nomes que
os parâmetros que a função espera.
Seus valores são apenas copiados para a função
chamada, sem ser afetados pelas alterações nos
parâmetros dentro da função.
Prof. Adriano Teixeira de Souza
12. É utilizado em procedimentos.
É um tipo que representa o “nada”, ou seja:
◦ uma variável desse tipo armazena conteúdo
indeterminado,
◦ uma função desse tipo retorna um conteúdo
indeterminado.
Indica que uma função não retorna nenhum
valor, ou seja, é um procedimento.
Prof. Adriano Teixeira de Souza
14. Exemplo de procedimento:
void imprime_dobro(int x)
{
System.out.println("Dobro de x: ”+ 2*x);
}
Prof. Adriano Teixeira de Souza
15. Para invocarmos um procedimento, devemos
utilizá-lo como qualquer outro comando:
procedimento(parâmetros);
Compare a diferença de invocação de uma função:
resultado = função(parâmetros);
Prof. Adriano Teixeira de Souza
16. static int x, y, resultado;
static void soma()
{
resultado = x + y;
}
public static void main(String[] args)
{
x = 3;
y = 5;
soma();
System.out.println(resultado);
}
Prof. Adriano Teixeira de Souza
17. Parâmetros ou argumentos são os valores
recebidos e/ou retornados por uma função.
Podem ser divididos em duas categorias:
◦ Formais: correspondem aos parâmetros utilizados na
definição da função.
◦ Reais: correspondem aos parâmetros da função chamadora
utilizados para chamar a função.
Prof. Adriano Teixeira de Souza
18. Parâmetros formais
static int soma(int a, int b)
{
return (a + b);
}
public static void main(String[] args)
{
int x = 3;
int y = 5;
System.out.println(soma(x + y));
}
Parâmetros reais
Prof. Adriano Teixeira de Souza
19. É o mecanismo de informar sobre quais valores o
processamento definido na função deve ser realizado.
Os parâmetros são passados para uma função de
acordo com a sua posição.
Os parâmetros formais de uma função se comportam
como variáveis locais (criados na entrada e destruídos
na saída)
No caso do Java, esta variável pode representar um tipo
primitivo ou um objeto.
Existem duas categorias:
◦ Por valor
◦ Por referência
Prof. Adriano Teixeira de Souza
20. 0001 1001
Os valores das
0101 1010
1111 0101
variáveis externas 1011 0011
0000 0001
(função chamadora) var 0001 1001
são copiados para as
0101
0000 1010
0001
1111
0001 0101
1001
variáveis internas da 1011
0101
0000
1111
0011
1010
0001
0101
função chamada. 0001 1001
0101 1010
1111 0101
Alteração no valor das 1011 0011
0000 0001
variáveis terá efeito var_interna 0001 1001
local à função
0101 1010
1111 0101
chamada. 1011 0011
0000 0001
0001 1001
0101 1010
1111 0101
1011 0011
Prof. Adriano Teixeira de Souza
21. Quando passamos uma variável do tipo
primitivo para um método chamamos esta
passagem de passagem por valor.
A variável original que foi informada na
chamada da função não é alterada. Uma
cópia do valor da mesma é passada para ser
utilizada dentro do método.
Por isso chamamos de passagem por valor.
22. Exemplo de passagem de parâmetro por valor
public class PassagemValor {
public static int quadrado(int x) {
x=x*x;
return x;
}
public static void main(String args[]) {
int x = 3,y;
y = quadrado(x);
System.out.println(“quadrado de ”+x+“=”+y);
}
}
23. Toda passagem de parâmetros no Java
é feita por valor!
A cada chamada de método, os parâmetros
são copiados e estas cópias são utilizadas na
execução do mesmo.
24. Os valores das variáveis externas não são passados
para a função, mas sim os seus endereços.
Ocorre alteração no valor das variáveis externas.
Prof. Adriano Teixeira de Souza
26. Uma desvantagem da passagem por valor é que, se
um item de dados grande está sendo
passado, copiar esses dados pode consumir um
tempo de processamento considerável.
Prof. Adriano Teixeira de Souza
27. No caso de objetos, a referência dos
mesmos é passada por valor, portanto não é
possível alterar a referência de uma variável
através de um método.
Mas o conteúdo dos objetos podem ser
alterados e estes são mantidos mesmo após
a execução do método. Por isso merecem
um tratamento diferenciado.
28. Quando passamos uma variável do tipo
objeto, na realidade apenas a referência do
objeto é passada para o método. O objeto em
questão está ativo e acessível através desta
referência.
Os atributos dos objetos podem ser alterados
e estas alterações serão mantidas mesmo
após a execução do método.
29. public class PassagemObjetos {
public static void alteraMsg(StringBuffer sb) {
sb.append(“ alterada”);
}
public static void main(String args[]) {
StringBuffer sb = new StringBuffer(“mensagem”);
alteraMsg(sb);
System.out.println(sb.toString());
}
}
30. Outra forma de se utilizar objetos para passar
parâmetros é utilizando “arrays”.
Ao invés de passar uma variável diretamente
por parâmetro utilizamos um vetor da
seguinte forma:
31. public class PassagemObjetosArray {
public static void quadrado(int i[]) {
i[0]=i[0]*i[0];
}
public static void main(String args[]) {
int i[] = new int[1];
i[0]=3;
quadrado(i);
System.out.println(“resultado=”+i[0]);
}
}
Note que utilizamos um vetor de uma posição só. Não é uma solução
elegante, pois à primeira vista do programa podemos
equivocadamente imaginar que o vetor possui uma função diferente.
Pois o conceito de vetor não foi idealizado para esta finalidade.
32. 1) Faça um programa que:
◦ Leia um vetor “turma” de 5 alunos
◦ Cada registro/objeto de aluno deve ter o numero de
matrícula do aluno e suas notas de 4 bimestres.
◦ Faca um procedimento que Imprima a lista de
matrícula e notas de cada aluno
◦ Faca uma funcao que tenha como parametro um
objeto Aluno e retorne a média das 4 nota
◦ Percorra o vetor de alunos e imprima a matricula e
a média calculada( pela funcao criada) para cada
aluno.
Prof. Adriano Teixeira de Souza
33. 2) Escreva um programa em Java que manipule um vetor de
registros com dados de 10 trabalhadores de uma empresa,
conforme a estrutura a seguir:
◦ int id;
◦ String nome;
◦ char sexo;
◦ float salario;
O programa deve ter as seguintes funções:
◦ a) uma função para ler os dados dos 10 funcionários.
◦ b) uma procedimento que receba por referência a lista e exiba os dados
dos 10 funcionários.
◦ c) uma função que receba, como parâmetro, um caractere correspondente
ao sexo e a lista para exibir os dados somente dos funcionários do
respectivo sexo.
◦ d) uma procedimento que receba por referência a lista de funcionários e
atualize o salário de todos os funcionários de acordo com o percentual
informado como parâmetro.
Prof. Adriano Teixeira de Souza