Quando eu diferencio se um método deve ser void ou não?

Olá a todos. Eu sei que essa é uma pergunta das mais bestas em Java, só que as explicações que já me foram dadas não sanaram essa dúvida. Eu não entendi bem quando um método deve ser void ou não. Se alguém puder me ajudar, ficarei muito grato.

um metodo deve ser void quando não tem que retornar valor algum

Boa noite FabricioPJ,

Seu método será do tipo “void” todas as vezes que que ele não tiver tipo de retorno.

Assim sendo, quando o método tiver um tipo de retorno você terá que especificar o que ele irá retornar.

Ex: um método que recebe como parametro dois números do tipo “int” e retorna a sua soma ficaria da seguinte forma.

public int soma (int n1, intn2){…}

Espero ter ajudado.

Antigamente na programação estruturada trabalhávamos com dois tipos de de rotina: função e subrotina. A subrotina era um programa menor dentro do programa maior e servia para isolar algum código que fosse necessário para um determinado fim. A função fazia a mesma coisa com a diferença que seu objetivo era calcular/resolver algum problema e retornar uma resultado.
A função é como a função da matemática, dados n argumentos retorna uma valor. Exmplos de função seriam o calculo da raiz quadrada , o seno, etc… mas o programador tem o poder de criar a sua propria função como o fatorial, por exemplo (um classico)


long factorial (long n){

      if (n &lt=1){
          return 1;
      } else {
           return n * fatorial (n-1);
      }
 
}

Entenda que existe a necessidade da função retornar um valor. Por isso eu sou obrigado a declarar o tipo de variável que esse valor é e a usar a palavra "return" seguida de um valor desse tipo.

Uma subrotina seria mais ou menos assim


atribuinome (Pessoa p, String nomeCompleto){

     String[] nomes = nomeCompleto.split(" ");
     p.setPrimeiroNome(nomes[0]);
     p.setUltimoNome(nomes[nomes.length-1]);
}

Repare que não ha nada para retornar aqui. Espera-se que seja executado um trabalho e não que seja encontrado um valor.

Bom, mas a subrotina é nada mais que uma função que não retorna nada. Ou melhor, é uma função que retorna nada. Ela retorna vazio, vácuo , em inglês void. Então, uma subrotina é uma função que retorna void (vácuo).

Quando criaram as linaguagens OO era necessário manter estes conceitos de rotina e função , mas ao mesmo tempo eles sempre teriam que estar associados a objetos. Então apareceu o conceito de método. Um método é a fusão dos conceitos de rotina e função. Ou seja, um método é um pedaço de codigo que recebe parametros e retorna coisas. Ele pode não receber nenhum parametro e/ou retornar vazio.

Então a assinatura de um método é:

[modificadores de acesso] [tipo do retorno] nomeDoMetodo ( [tipo de argumento] [nome do argumento] , [tipo de outro argumento] [nome do outro argumento] , … )

[tipo de retorno] pode ser void, quando não ha nada a retorna e qq classe ou tipo primitivo quando ha algo a retornar.

Enfim, vc tem que saber a finalidade do método e a finalidade lhe dirá se precisa ou não retornar alguma coisa. Se não precisar, vc tem que informar o java disso declarando que o tipo de retorno é "void" (vácuo, vazio)

2 curtidas

Entrando no assunto, mas qual a finalidade de se retornar um valor ?

Pelo pouco que entendo, esse retorno será armazenado no método, ai quando você chamar esse método, ele mostrará este valor que foi retornado e armazenado.

Me corrijam se estiver errado.

Por exemplo, você tem uma classe Cliente com um atributo privado Nome. Como você pode obter o valor desse atributo fora da classe?? Com um método público:

[code]public class Cliente {
private String nome;

public Cliente(String nome) {
    this.nome = nome;
}


public String getNome() {
    return nome;     
}

}

class TesteCliente {
public static void main(String[] args) {
Cliente c = new Cliente(“Diego”);
System.out.println("Cliente: " + c.getNome());
}
}[/code]

T+

Não entendi :frowning:

int x = fatorial(4); System.out.println(x); //Imprime 24

Você consegue imaginar a função “fatorial” do código acima, sem que ela retorne valor do fatorial, que no caso desse código é 24?

Uma implementação simples dessa função poderia ser:

public int fatorial(int number) { int fat = 1; for (int i = 2; i <= number; i++) fat *= number; return fat; //Usamos o retorno para dizer o resultado da função! }

Um exemplo de método void, onde não há sentido termos um valor de retorno:

public void writeToConsole(String text) { System.out.println(new Date().toString() + " " + text); }

Olá todos, sou iniciante em programação especialmente em Java por isso peço que me corrijam caso diga alguma bobagem. Pelo que sei métodos void são aquele que não possuem um retorno. Mas o que é retorno? O que é possuir retorno ou não? Vejamos, supondo que você queira fazer um programa para cadastrar seus amigos e eles podem ser classificados de duas formas: “teDevemAlgo” ou “naoTeDevemNada”. Seguindo boas práticas de programação OO haverá uma classe para cadastrar, buscar, ver pendências desses seus amigos certo? Vamos supor que os métodos da sua classe “controladorAmigos” sejam: inserirAmigo /para cadastrar um amigo novo/, setarComoDevedor/* atribui um valor devedor a um amigo já cadastrado*/, consutarSeDeve /* consultar se um amigo é devedor ou não.

Repare que o primeiro método - inserirAmigo - precisa de uma informação para realizar sua tarefa, e essa informação é exatamente o nome do amigo a ser inserido. Note que após inserir o novo amigo o método fez tudo que cabia a ele fazer e NÃO retornou nada à quem o invocou (ou utilizou), ou seja, ele deve ser setado como void.

Veja que o mesmo aconteçe com o segundo método. Você diz ao método: “defina o amigo X como devedor”. Depois disso o método não te diz mais nada. Esse método deve ser setado como void, também.

Agora repare muito bem no último método - consultarSeDeve-. Ao invocar esse método você pergunta a ele se um determinado usuário (você tem que indicar quem é esse usuário) é ou não devedor. O método vai receber o nome do seu amigo, verificar se ele é ou não devedor e depois RETORNAR (ou responder) dizendo: “sim” ou “não”, ou seja o método está retornando uma variável cujo tipo é booleana (sim/não) e se esse método é de retorno boolean, obrigatoriamente não pode ser setado como void.

Espero ter ajudado, um abraço a todos.

2 curtidas

Hum, então é importante usar algum valor de retorno certo?

OBS: Grande Vinicius belezinha cara :slight_smile:

É importante quando necessário, tudo depende de suas necessidades.

Exemplo: quando se faz uma operação matemática é de se esperar que você queira o resultado da mesma. Porém você pode ter situações que não te sujerem um retorno.

Comece a escrever funções na prática e você vai ver que não é tão difícil assim definir se elas precisam ou não de um valor de retorno.

Se a tarefa de sua função é um cáculo, existem altas chances dela ter um valor de retorno.

Uma função que só execute um processamento, como um método setter ou uma função de impressão, por exemplo, não precisará de valor de retorno.

para ver como funciona

// sem retorno
public void soma(int i1, int i2){
int x = i1+i2;
}
System.out.println(soma(10,10));
//Erro de compilação
//soma return type is void

//com retorno
public int soma(int i1,int i2){
int x = i1+i2;
return x;
}
System.out.println(soma(10,10));
//imprime 20
1 curtida