Desvantagens em usar return vazio em método void

Bom, atualmente estou trabalhando muito da seguinte maneira:

  public void salvar(){
   if (!condicao) 
     return;
   
   if (!condicao2)
    return;
}

Para mim é mais simples trabalhar da forma acima do que fazer da forma abaixo:

 public void salvar(){
  if (condicao && condicao2 && condicao3 && condicao4){

  }

}

Digo isso pois quando a condição é muito grande e preciso mostrar uma mensagem específica para cada condição que der falso, fica muito complicado o código. Gostaria de saber se utilizar da forma (1) com return vazio traz algum prejuízo ao sistema.

Sinceramente, por que você não faz um curso de java? Cara, você tem uns trocentos tópicos abertos, a maioria seria facilmente respondida com um pouco mais de estudo.
Há uma convenção não oficial que diz que você deve ter apenas um return em cada método. Se ele é void, deve-se evitar o mesmo.
Por que?
Quando você usa isto

if(!condicao1){
    return;
}

if(!condicao2){
    return;
}

if(!condicao3){
    return;
}

Poderia fazer

if(condicao1){
    //Faz algo relacionado a condicao1
}

if(condicao2){
    //Faz algo relacionado a condicao2
}

if(condicao3){
    //Faz algo relacionado a condicao3
}

E, se nenhuma condição for atendida, simplesmente sai do processo.
“Ah. mas e quanto a mensagem de erro?” Com o que você apresentou antes, também não havia tratamento.
Outro ponto, uso excessivo de if`s torna teu código muito estruturado e, sendo assim, o ideal seria não fazê-lo como void, mas como int, dependendo do que ocorrer, retorna 0 (execução normal) ou um valor negativo (indicando erro).

Acho que não há problema, mas você pode substituir isso:

public void salvar(){  
if (!condicao)   
   return;  
  
if (!condicao2)  
  return;  

por isso:

public void salvar(){  
if (!condicao) {
 
} else if (!condicao2) { 
 
}

Ou seja, substituir o “return” por “else if”.

[quote=drsmachado]Sinceramente, por que você não faz um curso de java? Cara, você tem uns trocentos tópicos abertos, a maioria seria facilmente respondida com um pouco mais de estudo.
Há uma convenção não oficial que diz que você deve ter apenas um return em cada método. Se ele é void, deve-se evitar o mesmo.
Por que?
Quando você usa isto

if(!condicao1){
    return;
}

if(!condicao2){
    return;
}

if(!condicao3){
    return;
}

Poderia fazer

if(condicao1){
    //Faz algo relacionado a condicao1
}

if(condicao2){
    //Faz algo relacionado a condicao2
}

if(condicao3){
    //Faz algo relacionado a condicao3
}

E, se nenhuma condição for atendida, simplesmente sai do processo.
"Ah. mas e quanto a mensagem de erro? Com o que você apresentou antes, também não ocorre.[/quote]

Os dois códigos não são iguais. No primeiro, garantidamente, só entrará em um “if”; no segundo, pode entrar em mais do que um “if”. O código equivalente ao código com “return” seria com “else if”.

[quote=regis_hideki][quote=drsmachado]Sinceramente, por que você não faz um curso de java? Cara, você tem uns trocentos tópicos abertos, a maioria seria facilmente respondida com um pouco mais de estudo.
Há uma convenção não oficial que diz que você deve ter apenas um return em cada método. Se ele é void, deve-se evitar o mesmo.
Por que?
Quando você usa isto

if(!condicao1){
    return;
}

if(!condicao2){
    return;
}

if(!condicao3){
    return;
}

Poderia fazer

if(condicao1){
    //Faz algo relacionado a condicao1
}

if(condicao2){
    //Faz algo relacionado a condicao2
}

if(condicao3){
    //Faz algo relacionado a condicao3
}

E, se nenhuma condição for atendida, simplesmente sai do processo.
"Ah. mas e quanto a mensagem de erro? Com o que você apresentou antes, também não ocorre.[/quote]

Os dois códigos não são iguais. No primeiro, garantidamente, só entrará em um “if”; no segundo, pode entrar em mais do que um “if”. O código equivalente ao código com “return” seria com “else if”.[/quote]
Se você leu tudo o que o autor do tópico postou, viu que ele colocou isso

if (condicao && condicao2 && condicao3 && condicao4){  
  
} 

O que me leva a crer que se todas as condições forem atendidas, ele faz algo.
De qualquer forma, é uma alternativa ao que ele está pensando em fazer.

Caro drsmachado, na minha opinião fórum é um local de discussões que está aberto para dúvidas e esclarecimentos, seja eles qual for (pertinente ao assunto do mesmo, obviamente).
Se você sentiu-se incomodado com a quantidade de perguntas realizadas, sinta-se a vontade para não responder, vou entender perfeitamente seu ponto de vista.

Enquanto tiver dúvidas, irei perguntar, e se obtiver respostas: Amém, se não, paciência.

De qualquer forma agradeço sua ajuda drsmachado, só acho desnecessário o comentário que foi realizado.

[quote=rlanhellas]Caro drsmachado, na minha opinião fórum é um local de discussões que está aberto para dúvidas e esclarecimentos, seja eles qual for (pertinente ao assunto do mesmo, obviamente).
Se você sentiu-se incomodado com a quantidade de perguntas realizadas, sinta-se a vontade para não responder, vou entender perfeitamente seu ponto de vista.

Enquanto tiver dúvidas, irei perguntar, e se obtiver respostas: Amém, se não, paciência.

De qualquer forma agradeço sua ajuda drsmachado, só acho desnecessário o comentário que foi realizado.

[/quote]
Muito bem colocado, fórum é um lugar para se discutir e não para se aprender. É onde você vai perguntar, tentar esclarecer uma dúvida que surgiu e não focar 100% do teu aprendizado, para isto existem meios mais adequados, como as instituições de ensino.
Suas dúvidas são sim extremamente ridículas e, reitero, com um pouco mais de esforço, ou menos preguiça, você conseguiria resolver praticamente todas.

Se você observar as discussões mais antigas, vai entender o que eu estou falando. Ah, desculpe, você tem preguiça de pesquisar, não é mesmo?
As regras do fórum são bem claras, assim como o how to, no que diz respeito a forma de se fazer perguntas: seja claro, objetivo, indique onde pesquisou e o que não entendeu.

E, o que você acha ou deixa de achar, enquanto não deixar de ser preguiçoso, será tão relevante quanto um zero à esquerda.

Bom, cada um tem sua opinião, e preguiçoso com certeza não é um atributo que me convém.

Se for assim, você está chamando de preguiçoso eu e mais um “bocado” de usuários do forum, visto que muitas (muitas mesmo) das dúvidas são respondidas no GOOGLE rapidamente.

Primeiro vou responder ao post do amigo que está com dúvida:

Pelo que noto nos dias de hoje existe uma certa convenção que diz que não é bom
colocar return sozinho assim, ou seja é bom ter mais detalhes, ou mais OO, ou coisa
do tipo, mas nunca tipo uma verificação e puff… return direto.

Isso porque para alguém que for usar o seu código, poderá ter dificuldades para entender
se tiver muitos ifs, returns e tals.

O ideal é dar uma olhada no livro Java Use a Cabeça, pois ensina Orientação a Objetos, herança
encapsulamento e outras coisas para você evitar fazer códigos muito grandes que usem condições assim.

Mas nada impede que essas verificações sejam feitas dentro de um mesmo contexto, ou seja dentro
de um mesmo meio dentro de uma classe ou objeto.

Por segundo eu gostaria de dizer que não defendo ninguém mas coloco alguns fatos na mesa…

rlanhellas você tem total liberdade para perguntar o que quiser aqui no fórum, seja para aprender,
tirar dúvidas, criticar, mostrar e etc… (Desde que respeite as regras do fórum)

Por falar em regras temos o link abaixo:

http://www.guj.com.br/java/139754-regras-do-forum

Que tem os seguintes dizeres:

[b]Regras de uso do Fórum

Como usuário devidamente registrado no GUJ, você reconhece por este que todas as mensagens postadas nos fóruns expressam os pontos de vista e opiniões dos seus respectivos autores e não dos administradores, moderadores ou o encarregado das páginas (exceto mensagens colocadas por essas pessoas), o quais não são responsáveis pelo conteúdo escrito por outros membros da comunidade.

Apesar dos administradores e moderadores deste fórum tentarem remover ou editar qualquer material indesejável logo que detectado, é impossível rever todas as mensagens.

Você aceita não postar qualquer mensagem abusiva, obscena, vulgar, insultuosa, de ódio, ameaçadora, sexualmente tendenciosa ou qualquer outro material que possa violar qualquer lei em vigor. Isto conduz à sua expulsão imediata e permanente.

Da mesma forma, mensagens de teor político e religioso são desencorajadas, e portanto, passíveis de moderação. Há comunidades específicas para este assunto.

Mensagens com propaganda não autorizada serão excluídas sem prévio aviso.

Os endereços IP de todas as mensagens são registrados para ajudar a implementar essas condições. Você concorda que quem faz e mantém estas páginas, administradores e moderadores deste fórum tem o direito de remover, editar, mover ou encerrar qualquer tópico em qualquer altura que eles assim o entendam.

Como usuário você aceita que qualquer informação que forneceu acima seja guardada numa base de dados. Apesar dessa informação não ser fornecida a terceiros sem a sua autorização, o encarregado das páginas, administradores ou moderadores não podem assumir a responsabilidade por qualquer tentativa de ato de “hacking”, intromissão forçada e ilegal que conduza a essa informação ser exposta.

Ao prosseguir, você concorda em receber os informativos do GUJ (newsletters) que são enviados para os e-mails cadastrados no fórum, tendo como opção solicitar a desativação de envios a qualquer tempo bastando para isso envio de e-mail formal ou MP para o administrador, desta forma seu e-mail será desativado (porém seu cadastro como usuário continuará válido).

O GUJ não faz descadastramento e ou exclusão de nomes/nicks de usuários a pedidos dos usuários. Entendemos que a ação de pessoas utilizando-se de nomes próprios, nicks ou apelidos devem ser registradas e mantidas pois são o histórico de seus atos na Internet. A maneira que oferecemos para deixar de usar nossos serviços é a inativação da sua conta de usuário, que pode ser solicitada aos administradores, porém todos os seus posts permanecerão. Também não removemos nem editamos mensagens a pedidos, sendo estas o histórico dos usuários no GUJ e registro de seus atos na Internet. Porém provemos meios de edição onde os próprios usuários podem editar seus posts quando desejarem (exceto usuários inativos, banidos, tópicos bloqueados ou em áreas restritas).

Ao prosseguir, você concorda em seguir as regras de uso do GUJ que estão descritas em tópico especial, as quais se adequam de tempos em tempos conforme a necessidade.

Este sistema de fóruns usa “cookies” para guardar informação no seu computador. Esses “cookies” não possúem nenhuma da informação acima fornecida, apenas servem para melhorar a sua navegação enquanto visita estes fóruns. O endereço de email é apenas usado para confirmar a informação do seu registo e a senha (bem como para enviar novas senhas caso se esqueça da que acabou de submeter).

No caso de dúvidas ou reclamações, favor contatar um dos administradores ou enviar email para guj@guj.com.br [/b][i]

Sendo assim acredito que o nosso amigo drsmachado está confundindo um pouco as coisas
pois não vejo em nenhuma destas regras algo que diga que a pessoa não pode vir ao fórum se quiser aprender algo
ou ainda dizendo que ela tem que vir só se não achar o conteúdo no google ou que é obrigada a estudar primeiro
para não vir aqui e tomar o “tempo” de pessoas que não gostam de novatos.

drsmachado acho que você assim como outros usuários por aí devem respeitar mais os usuários do fórum
primeiro porque o fórum não é seu, pois se o fosse com certeza o GUJ não teria um nome tão grande
como tem hoje, porque você exclui muito as pessoas e isso meio que as espanta.

Segundo que os responsáveis do fórum são esses:

link:
http://jforum.net/team.jsp

Name Role
Rafael Steil Lead, Project Founder
Rafael Carneiro Lead
monroe Part of the JForum Team in the forums
James Yong Did a lot of helping fixing bugs
Marc Wick HSQLDB implementation and maintanance, as well de_DE translation
Dmitriy Kiriy Base Oracle implementation
Per Johansson Fixes for XTHML
Pieter Olivier A lot of misc help in the very beggining
Sérgio Umlauf Primary website layout
Pablo Marutto The JForum Logo (old version)
Quan Nguyen Vietnamese language support
David Almilli Polls, Hibernate and Lucene
Jake Fear Oracle Fixes, Hibernate and Lucene
Armando Ramos es_ES translation
Vladislav Malyshkin Lots of fixes / improvements
Marcin Nowacki Polish (pl_PL) translation
Kamen Elenkov, Tzvetelin Vassilev Fixes to the Configuration engin
Thomas Siegenthaler Oracle fixes
David Haila XML parsing fixes
Greg Wilkins Italian (it_IT) translatin
Robert Peters Oracle Fixes
Per Lindberg LDAP and SSO
Samuel Santos pt_PT translations
Mark Page JForum integration and additional SSO code
Alexander Sgibnev Russian (ru_RU) translation
Vladimir Slaykovsky Russian (ru_RU) translation
Andowson Chang Traditional Chinese language support, bug fixing and other development
Jakob Vad Nielsen Norwegian translation, bug fixing and new features
GatorBait3 Part of the JForum tem in the forums

e até o momento nunca vi nenhum deles tratando um membro do fórum com tamanho desrespeito e afronta.

por um lado o usuário drsmachado tem bastante mensagens 7603 ao total, mas noto que em vários
posts já vi esse usuário insultando outros usuários no Fórum.

Eu voto a favor de que os membros do fórum que estão sendo desrespeitados pelo usuário drsmachado
ou em algum momento se sentirem ofendidos, que relatem isso aos moderadores e administradores,
pois pessoas assim acabam atrapalhando tanto os iniciantes em java e no fórum, quanto também
as pessoas que querem ajudar, pois eles ficam poluindo o fórum com mensagens iguais as que estamos vendo aqui
onde falam que a pessoa devia fazer isso ou aquilo antes de vir procurar ajuda no fórum.

Se eu fosse Adm já teria expulso o user drsmachado por várias vezes faltar com respeito
principalmente para com os novatos.

Bom essa é minha opinião que tenho direito de expressar pois não faltei respeito dizendo o que penso
nem tão pouco nas palavras do post.

Ao dono do post sinta-se à vontade para perguntar o que quiser quando quiser dentro das normas do fórum.

Aos demais, um abraço e denunciem quando se sentirem ofendidos.

Sem mais palavras. Nosso amigo JavaDreams disse tudo. E eu continuo com minha opinião: Se sente-se ofendido em responder uma dúvida “ridícula”, não precisa responder. Mas não responda ofendendo os usuários.

Na minha opinião ofensa a usuários deveria ter como consequência bloqueio, pelo menos temporário, do usuário que iniciou a ofensa, afinal chamar qualquer um de “Preguiçoso e Zero a esquerda” é uma ofensa grave e que consequentemente pode causar processo.

Sinceramente, eu ri.

rlanhellas, reitero o que eu disse.
Você está vindo com perguntas muito cruas, deixando a entender que não está se esforçando o suficiente para aprender e, mais que isso, conseguir resolver os problemas sozinho.
Como você deve ter visto, a grande maioria dos tópicos que você abriu tiveram minhas respostas. E justamente por ter dado tantas respostas é que eu considero que seja necessário pra ti um curso, no qual você será direcionado adequadamente.
Não vou entrar nas questões de vontade, aptidão ou mesmo condições de fazer um curso, porém, seria muito mais proveitoso.
Por que? Aqui você sempre terá respostas. Porém, há a possibilidade destas serem incompletas e, ao invés de aprender, você estará se enganando.

[quote=rlanhellas]Sem mais palavras. Nosso amigo JavaDreams disse tudo. E eu continuo com minha opinião: Se sente-se ofendido em responder uma dúvida “ridícula”, não precisa responder. Mas não responda ofendendo os usuários.

Na minha opinião ofensa a usuários deveria ter como consequência bloqueio, pelo menos temporário, do usuário que iniciou a ofensa, afinal chamar qualquer um de “Preguiçoso e Zero a esquerda” é uma ofensa grave e que consequentemente pode causar processo.[/quote]

Amigo fique à vontade para perguntar e sempre que puder ajudar alguém ajude da melhor forma que conhecer.
Não tenha medo, pois experiência vem com o tempo e eu também estou aprendendo muito aqui no fórum a cada dia mais e mais.

Abraço e conte comigo sempre.

[quote=drsmachado]rlanhellas, reitero o que eu disse.
Você está vindo com perguntas muito cruas, deixando a entender que não está se esforçando o suficiente para aprender e, mais que isso, conseguir resolver os problemas sozinho.
Como você deve ter visto, a grande maioria dos tópicos que você abriu tiveram minhas respostas. E justamente por ter dado tantas respostas é que eu considero que seja necessário pra ti um curso, no qual você será direcionado adequadamente.
Não vou entrar nas questões de vontade, aptidão ou mesmo condições de fazer um curso, porém, seria muito mais proveitoso.
Por que? Aqui você sempre terá respostas. Porém, há a possibilidade destas serem incompletas e, ao invés de aprender, você estará se enganando.[/quote]

Isso ai,

Concordo plenamente

O fato é que o drsmachado só disse que ele deve fazer um curso gente, não sejam tão “do doi” assim, se falasse isso para mim eu entenderia como algo construtivo,
tente tirar da critica algo construtivo e não se sentir diminuído, por favor, creio que todos somos adultos aqui.

Abraço

Existe uma técnica chamada code guard, que justamente indica a colocação de return ou exceção no início do método, para que ele saia o mais rápido possível caso uma pré-condição não seja atendida. Esta técnica consta até mesmo do livro “refatoração” do Martin Fowler:
http://martinfowler.com/refactoring/catalog/replaceNestedConditionalWithGuardClauses.html

Eu sou extremamente partidário da técnica, pois ela evita indentação desnecessária, como também facilita o entendimento de quem lê o método.
Para mim, é muito preferível um código assim:

double getPayAmount() { if (isDead) return deadAmount(); if (isSeparated) return separatedAmount(); if (isRetired) return retiredAmount(); return normalPayAmount(); };

Do que algo pavoroso assim:

double getPayAmount() { double result; if (isDead) result = deadAmount(); else { if (isSeparated) result = separatedAmount(); else { if (isRetired) result = retiredAmount(); else result = normalPayAmount(); }; } return result; };

Note que no segundo caso, somos quase sempre obrigados a ler o método até o fim, para no final descobrir que ele só toma uma única ação em cada condição do if.
No primeiro, o return deixa isso absolutamente claro.

A recomendação de não colocar mais de um return no método vem de linguagens estruturadas, onde técnicas como classes proxy eram dificílimas de fazer e você era obrigado a garantir o ponto de saída do método, caso quisesse fazer ali alguma verificação.