Perguntar aos alunos onde eles pesquisam sobre a linguagem.
Diferença entre retornar e imprimir na tela:
- Imprimir na tela é feito por System.out.println(...);
- retornar ocorre quando um método termina e a execução retorna ao fluxo de execução anterior. Neste momento é possível retornar um valor.
Caso o autor do método não deseje retornar nenhum valor, ele declara o método com tipo de retorno void. O retorno ocorre quando chega-se ao final do método ou quando for executado o comando return.
Caso deseje retornar um valor, ele declara o método com o tipo desejado. Desta forma ele se obriga a dizer o que quer retornar. Isto é feito passando um argumento no comando, ou seja: return <valor de retorno>. Todos os caminhos de computação existentes no código, inclusive os não usados, exigem return. Por exemplo:
int met (int a) {
if (a>0) return 3; // teste 1
if (a<=0) return -3; // teste 2
}
Ocorre erro na compilação do método acima pois há três caminhos de computação possíveis:
1-) teste 1 é true;
2-) teste 1 é false e teste 2 é true;
3-) teste1 e false e teste2 é false;
O caminho de computação 3 não tem return.
Alguém poderia dizer que o caminho 3 não ocorre pois a não pode assumir nenhum valor que torne os dois testes falsos. Concordo, MAS o compilador não analisa a lógica do código até esse nível, logo ele foi construído para exigir esse return.
Então o que retornar?? Já que não é executado, pode ser um valor qualquer?
Não é boa prática retornar um valor qualquer pois a maioria dos programadores espera que valores de retorno signifiquem algo, logo isto atrapalha o entendimento do código;
Nem sempre é tão fácil decidir se um caminho de computação será executado ou não (geralmente é difícil);
Programadores erram (e você também), embora sempre presumam que o que fazem funcionará corretamente. retornar um valor qualquer dificulta a localização de erros, fazendo você perder tempo e passar raiva.
Então o que é melhor fazer?
Reescrever o código para que ele não tenha caminhos que não são executados. Isto sempre é possível. No exemplo acima:
int met (int a) {
if (a>0) return 3; // teste 1
return -3; // se teste 1 é false, teste2 não é necessário pois será sempre true.
}
-----
Quero retornar mais de um valor (primitivo) com um return. Isso é possível?
Sim, você cria um objeto que contenha todos os valores e faz o método "retornar esse objeto".
------
Referências são variáveis através das quais acessa-se alguma outra entidade (por exemplo a instância de uma classe, um método ou outra variável).
Uma variável de tipo primitivo contém um valor que o tipo primitivo pode assumir. Por exemplo em
int a=125;
declaramos uma variável com identificador (nome) a, que contém 125.
Em objetos e tipos abstratos, por exemplo o Scanner normalmente faz-se:
Scanner sc= new Scanner( System.in );
esta linha especifica dois conjuntos de ações, por isso vou separá-la em duas:
Scanner sc;
sc=new Scanner( System.in );
a primeira linha é a declaração de uma variável com identificador (nome) sc, do tipo Scanner;
a segunda linha especifica dois subconjuntos de ações.
O operador de atribuição '=' opera sobre duas entidades (é binário) e armazena no operando da esquerda o valor contido no operando da direita.
O operando da direita é um comando 'new' aplicado a um método 'Scanner ( System.in )'.
O comando 'new' aloca quantidade de memória necessária para armazenar uma instância da classe Scanner, inicializa estruturas de controle, invoca o método e retorna o ENDEREÇO para acessar o local de memória onde foi armazenada a instância.
Nenhum comentário:
Postar um comentário