Que valor seria esse que void nao retorna?

31 respostas
leandro-maanaim

Estou com uma duvida o void nao retorna nenhum valor ja outra operaçoes como boolean retorna, que valor seria esse que ele não retorna? não estou conseguindo entender qual seria esse valor estou muito confuso. Alguem poderia me da uma explicação melhor sobre esse assunto? se posivel fazer alguma comparações.

31 Respostas

T

“void” quer dizer, em inglês, “vazio”.
Em vez de ter uma palavra-chave diferente para denotar funções que retornam um valor e funções que não retornam nada (como no Pascal, onde são respectivamente “function” e “procedure”), o Java, C++, C#, C e outras linguagens usam a convenção de usar a palavra “void” para os métodos que não retornam nada.
(Em C e C++ o “void” tem outros usos, mas isso não vem ao caso aqui.)
É só isso. Não há nada “mágico”.

Lavieri

tem tb o Objeto java.langVoid, que deve representar o mesmo que o tipo primitivo void…

ja vi usando ao sobrescrever assinatura, para retornar vazio, onde a assinatura pedia um retorno do tipo Object

c alguem puder dar um luz melhor sobre o objeto Void ^^

T

A classe java.lang.Void tem um uso muito reduzido; serve, basicamente, para isso mesmo que o Lavieri mencionou.

class Base {
    public Object abc (int xyz) { return xyz; }
}

class Subclasse extends Base {
    @Override
    public Void abc (int xyz) { System.out.println ("abc"); return null; }
}

class TesteJavaLangVoid {
    public static void main(String[] args) throws Exception {
        (new Subclasse()).abc (10);
    }
}
leandro-maanaim

nao consegui entender ainda :S talves teria que me da uma explicação melhor ainda, talvez fazendo uma comparação com um objeto do mundo real. e pega leva nas explicações pq estou comesando agora e pode ser bastante confuso pramin agora entender.

Lavieri

é que assim... um método é um ação.... existem ações que retornam um resultado a quem pediu para ação ser feita, e acções que não retornam um resultado a quem pediu a ação...

por exemplo...

public double calcularMedia(int[] notas);
esse método tem um retorno Double pois ele calcula uma média e retorna o valor da média,

porem existem métodos que não tem retorno, pois eles executam uma ação, porem não existe um resultado a retornar, por exemplo...

public void imprimeMedia(double media);
este segundo método simplismente imprime o resultado, e não retorna nada, ou seja, seu retorno é vazio... vc pode usar + ou - assim
int[] notas = {10,7,9,9,9,8};

double media = calcularMedia(notas);

imprimeMedia(media); //aqui como imprime média não ter resultado não da pra fazer variavel = imprimeMedia(media)
rdgms

Então um metodo void não retorna um valor imagine que voce quer apenas cadastrar uma pessoa voce pode fazer isso utilizando void:

public void cadastrar(Pessoa pessoa)
{
  //logica
}

e quando for utilizar isso voce faz assim:

obj.cadastrar(new Pessoa("Rodrigo"));

ou voce pode querer saber como foi o cadastro se ocorreu algum erro ou alguma coisa ai você pode retornar um boolean:

public boolean cadastrar(Pessoa pessoa)
{
  //logica
}

e quando for utilizar isso voce faz assim:

boolean foi = obj.cadastrar(new Pessoa("Rodrigo"));
  if (foi)
  {
      //deu tudo certo
  }
   else
  {
   //alguma coisa deu errado!
}

FLW ^^

T

OK.

A sintaxe do Java, C, C++, C# é bem parecida.

Ela requer que você ponha, para declarar um método:

  • A palavra que indica o acesso (public, private, protected). Essa palavra é opcional.
  • O tipo do retorno. Essa palavra não é opcional. Por exemplo: int, long, String
  • O nome do método. Isso também não é opcional. Por exemplo: processarRegistros
  • Um parêntese “(”.
  • Se houver parâmetros, os tipos e nomes dos parâmetros.
  • Um parêntese “)”.

Isso é simplesmente uma definição: no Cobol a convenção é outra, no VB a convenção é outra, e no Pascal (Delphi) é ainda outra.

Como foi estipulado que o tipo de retorno não é opcional, ele deve sempre ser especificado.
Acontece que nem sempre um método retorna alguma coisa.
Por exemplo: você pode ter um método “fazerCoisaNenhuma” que simplesmente não retorna nada para você.
Então foi convencionado que, para esse caso em que o método não retorna nada, o tipo do retorno é “void”, ou seja, não há retorno.

Veja que “void” é só uma convenção - quer dizer: “este método não retorna nada”.

leandro-maanaim

Pra ser bem sincero não deu pra entender legal ainda nao tá, ta um pouco embaçado, tavez seria melhor uma explicação melhor isso é se existe né rsrs se alguem poder me da essa explicação mais clara, é oque eu estava falando, se fizer alguma comparação tenho mais facilidade em aprender e entender comparando assim com alguma coisa do mundo real.

OBRIGADO.

T

Tá bom, vou explicar com uma história.

Você telefona para o vendedor de carros e fala assim:

  • Quando você tiver um carro bom para mim que custe no máximo 20.000,00 , me telefona e me dá um retorno.
    Isso é equivalente a:
class Vendedor {
     Carro venderCarroBom (double preco) {
          return new Gol();
     }
}

O vendedor tem um método “venderCarroBom” que aceita um preço e retorna um Carro.

Você agora tenta telefonar para a sua operadora de telefonia celular e tenta cancelar seu plano. Você fica duas horas pendurado no telefone e eles não resolvem seu problema. Então a atendente lhe diz, só para você ficar menos bravo:

  • Se o supervisor conseguir resolver seu problema, lhe retorno.
    Obviamente ela nunca vai lhe retornar - você tem o equivalente a:
class CallCenter {
    void resolverProblema () {
        System.out.println ("Ha ha ha");
    }
}

Ou seja, a moça do Call Center da operadora tem um método “resolverProblema” que não retorna p*** nenhuma, portanto é declarado como “void”.

Kura

Um método String, int, double, etc tem que, por definição, retornar um valor.
Caso você precise calcular uma fórmula, por exemplo, e você não quer deixar no seu método principal, você usa um método pra fazer o cálculo e pra retornar o valor, certo?

Mas se por exemplo você quiser só inserir algo no banco de dados (como o colega acima disse), mas não quiser colocar esse código de inserção no seu método principal (o que seria estéticamente certo), você faria um método pra isso.

E esse método seria o void.
Entende?
Você não é obrigado a criar um método pra inserção, mas também ficaria horrível uma inserção no seu método principal, concorda?
Levando em consideração que vc não quer deixar se código feio e quer faze-lo estéticamente correto, você deve criar um método só pra inserção.
Já que serve só pra isso, já que o método não precisa retornar nada pra você continuar o código, só vai inserir, você usa o método void.

M

thingol:
Tá bom, vou explicar com uma história.

Você telefona para o vendedor de carros e fala assim:

  • Quando você tiver um carro bom para mim que custe no máximo 20.000,00 , me telefona e me dá um retorno.
    Isso é equivalente a:
class Vendedor {
     Carro venderCarroBom (double preco) {
          return new Gol();
     }
}

O vendedor tem um método “venderCarroBom” que aceita um preço e retorna um Carro.

Você agora tenta telefonar para a sua operadora de telefonia celular e tenta cancelar seu plano. Você fica duas horas pendurado no telefone e eles não resolvem seu problema. Então a atendente lhe diz, só para você ficar menos bravo:

  • Se o supervisor conseguir resolver seu problema, lhe retorno.
    Obviamente ela nunca vai lhe retornar - você tem o equivalente a:
class CallCenter {
    void resolverProblema () {
        System.out.println ("Ha ha ha");
    }
}

Ou seja, a moça do Call Center da operadora tem um método “resolverProblema” que não retorna p*** nenhuma, portanto é declarado como “void”.


:lol: :lol:

Que exemplo fantástico! Mais realista que esse é difícil.

Lavieri

AUHuhaauhuha

muito bom esse exemplo do Thingol

71C4700

Melhor exemplo que vi sobre este assunto…
Muito boa…

dfsilva86

Belo exemplo :lol:

marciof3

Muito bom o exemplo, parabéns…

O

Concordo que foi um excelente exemplo, bastante inteligente, mas pra quem já conhece o conceito. Não foi muito didático. Foi como uma piada, só ri quem entende do assunto tratado na mesma.
Não estou querendo ser maldoso, aliás, acho que o próprio thingol há de concordar comigo. Ele tá ganhando em originalidade, mas o Lavieri tá ganhando em didática. É claro que ninguém melhor que o autor do tópico pra fazer o julgamento.

leandro-maanaim, tenta explicar com suas próprias palavras o que você conseguiu “pegar” do conceito até agora. Talvez, partindo da sua linha de raciocínio fique mais fácil de saber como explicar pra você entender.

Marky.Vasconcelos

hAUhAU… que excelente.

Kura

Esse tópico virou um joguinho pra aumentar pontos, não virou não?

T

Concordo sim.

Vou me justificar - é que tinha visto que o Leandro não tinha entendido nem com a explicação do Lavieri, então eu dei o exemplo “piada” mesmo. É que quando as pessoas estão meio dormindo uma piada ajuda a acordar.

Marky.Vasconcelos

Sempre estamos dando nossa opnião… no caso de uma piada nossa melhor expressão é a risada. xD
e no que pontos ajudaria?

leandro-maanaim

Não sei se estou nervozo dimais para aprender ou pq sou muito burru pra K***** UAHuHauHauHAuhAuA… eu entendi perfeitamente, mais que RAIU de retorno é esse eno java? agora complicou mais ainda os codigos pq entrou os set e o get, alguem teria condição de me acompanhar nesse aprendizado? se nao tiver não tem problema eu fecho esse topico e eu falo que entendi e nao entendo P**** nenhuma e tudo certo ou podemos dar continuidade a essa duvida.
Obrigado pela atenção de todos.

71C4700

Leandro pense da seguinte forma, em Java vc pode ter dois diferentes tipos de metodos(com relação ao Retorno).

Um é quando vc precisa saber da resposta (Retorno) dele;
O Outro é quando vc precisa apenas pedir pra ele fazer algo pra vc;

Um metodo que retorna void é que voce ta pedindo pra ele fazer algo pra vc, tipo: atribuir um valor a um atributo, instanciar um objeto, realizar alguma outra operação do sistema. Nestes metodos onde a RESPOSTA não é necessario o tipo de retorno do metodo deve ser void,pois nao tem nenhum valor pra retornar.

Quando vc precisa saber do valor de resposta do metodo ai quando vc chama-o ele retorna pra vc um valor. Assim, imagine vc pergunta a alguem o seu nome a pessoa diz,pronto o nome da pessoa foi o retorno que ela lhe deu quando voce CHAMOU este metodo. Em Java ficaria.

String nomeDaNamorada = minhaNamorada(); // Recebe o valor que vier do metodo

public String minhaNamorada(){
      return "Estou solteiro"; // Este return é vc dissendo o nome de minha namorada é Fulana,certo?
}

Este valor que o RETURN esta lançando é a resposta que o metodo lhe deu apos seu processamento.

E quando o metodo retorna void teriamos em Java.
public void limparCasa(){
 // Aqui vc limpa a casa
}

Como quando voce esta limpando a casa vc nao precisa respoder nada a ninguem a resposta do metodo é void.

E no seu codigo java vc teria

String nome="Leandro"; limparCasa();

E quanto a ajuda, aqui no forum as pessoas realmente desejam ajudar,pois o conhecimento só tem valor se for desciminado. E outra todos passamos por estes momentos de aprendizado. Bons estudos e boa sorte!

Kura

Leandro. o método void não retorna nada. Não retorna String, int, boolean… nada.
você só coloca o “void” no código pra definir que não retorna nada.

T

leandro-maanaim:
Não sei se estou nervozo dimais para aprender ou pq sou muito burru pra K***** UAHuHauHauHAuhAuA… eu entendi perfeitamente, mais que RAIU de retorno é esse eno java? agora complicou mais ainda os codigos pq entrou os set e o get, alguem teria condição de me acompanhar nesse aprendizado? se nao tiver não tem problema eu fecho esse topico e eu falo que entendi e nao entendo P**** nenhuma e tudo certo ou podemos dar continuidade a essa duvida.
Obrigado pela atenção de todos.

Retorno é alguma coisa que foi produzida por um método, ou seja, um resultado.
Parâmetro é alguma coisa que um método usa para produzir (retornar) alguma coisa.

Por exemplo, um moedor de carne mói carne, ou seja:
ele recebe carne, e produz carne moída.
Em outras palavras:
O moedor de carne recebe como parâmetro carne, e retorna como resultado carne moída.

public class MoedorDeCarne {
    CarneMoida moer (Carne c) {
        return new CarneMoida (c);
    }
}

No programa acima definimos um método “moer” para a classe “MoedorDeCarne”. Ele recebe um parâmetro do tipo “Carne”, e retorna um resultado do tipo “CarneMoida”.

Por outro lado, o governo recebe dinheiro, e não dá nada em troca. Em ontras palavras:
O governo recebe como parâmetro dinheiro, e não retorna nada como resultado.

public class Governo {
    void cobrarImpostos (Dinheiro d) {
        
    }
}

No programa acima, definimos um método “cobrarImpostos” para a classe “Governo”. Ele recebe um parâmetro do tipo “Dinheiro”, e não retorna nada. Em Java, para dizer que nada é retornado, usa-se a palavra-chave “void” (que quer dizer “vazio” em inglês.)

Kura

Acredite, cara. Você está achando que é um negócio muito mais complicado do que realmente é.

T

Tou achando que o Leandro é parecido com muita gente que conheço, que quando empaca em uma coisa não consegue avançar.
Eu não acho que isso seja bom (empacar); acho que é melhor saber que não está entendendo alguma coisa (no caso é o tal do valor de retorno), mas passar adiante, sabendo que tal coisa não foi entendida.
Depois, com o tempo e sabendo outras coisas, o entendimento às vezes aparece “do nada” - é o cérebro que ficou “fermentando” a explicação - como se fosse alguém que escutou uma piada, mas não a entendeu na hora. Depois de algum tempo você tem aquela luz:

  • Puxa, agora entendi a piada!
Kura

hahahahaha!
Bom… é verdade.
Varias vezes entendi certas coisas do nada. O próprio void foi assim. Também tive essa duvida no inicio.
E depois de pouquissimo tempo, claro (claro pq é algo tão usado…), acabei tendo a luz =P

Leandro, vai ter uma hora que você vai precisar de um método void. Ai a ficha vai cair.

M

O exemplo mais simples possível:

System.out.println("Olá mundo!");

Com isso fazemos a chamada ao método println, que tem o tipo de retorno como void. Isto é, o comando apenas imprime a frase na saída padrão e não retorna coisa alguma (vazio). Sacou?

leandro-maanaim

Vou fazer oque o thingol esta falando não vou ficar agarrado muito nisso não pq realmente isso não é bom qualquer coisa eu volto a postar.

Agradeço ajuda de todos vcs e um bom final de semana para todos.
Obrigado.

T

só pra complementar…que isso também é válido…

public void cadastrar(String nome ){

     if(nome.equals(""))
           return; // ISSO EH VALIDO - USADO PARA PARAR O PROGRAMA (nao eh melhor forma de parar execucao, mas funciona)
     else
         Pessoa pessoa = new Pessoa(nome);
}


public void cadastrar(String nome ){

     if(nome.equals(""))
             return ""; // ISSO EH INVALIDO, NEM COMPILA POIS "" EH STRING
     else
         Pessoa pessoa = new Pessoa(nome);
}
celso.martins

O google está com uma função de dicionário, sensacional (foi a primeira vez que eu vi - não é a ferramenta de idiomas, que eu já conhecia).

Então, colocando a palavra void em ferramenta de idiomas ele me deu esse retorno:

Mais direto, impossível.

Abraços.

EDIT: A própria pergunta já se responde: Que valor seria esse que void nao retorna?
Resposta: valor nenhum.

Simples assim.

Criado 18 de fevereiro de 2009
Ultima resposta 27 de fev. de 2009
Respostas 31
Participantes 13