Boas práticas

14 respostas
R

Olá pessoal!

Tenho uma dúvida relacionada a bloco de comando.

No Delphi há necessidade de um bagin end somente se houver mais de uma ação. Ex.

If Condicao then 
Begin
Ação 1
Ação 2
end;

Caso seja somente uma ação ficaria somente assim:

If Condicao then 
Acao 1

Com java eu pecebi que é feito conforme a primeira opção mesmo quando há somente uma ação a ser executada:

If Condicao {
Acao 1
Acao 2
}
If Condicao {
Acao 1
}

É dessa forma mesmo, deve ser aberto um bloco ({) independente da quantidade de ações?

Obrigado.

14 Respostas

pedruhenrik

até da p/ fazer sem abrir o bloco,

boolean abc = false; if (abc) System.out.println(abc);

EU não vejo isso como uma boa prática, então EU SEMPRE crio o “bloco” independente de quantas ações serão realizadas.

att,

nel

Oi!

Isso é ponto de vista de cada um, uns dizem ser mais dificíl de entender o código as vezes quando não é usado o caracter “{” e “}” para delimitar um bloco.
Você pode ter vários if´s, for, while, tudo sem usar os delimitadores e obter o mesmo resultado e é ai que pode vir a confusão.

Talvez um simples if, como este:

if(condicao) System.out.println("Teste");

Ou um laço como este:

for(String value : lista) System.out.println(value");

Eu mesmo não coloco :slight_smile:
A regra é simples, o caracter “;” indica uma linha de comando, seja ela qual for, atribuição, invocação de método e etc.
Quando não é usado o caracter delimitador o compilador entende que será executado exclusivamente uma linha para a sua condição, sejam vários if´s, for, while e etc.

Atrapalhei ou ajudei? :slight_smile:
Abraços.

pedruhenrik

eu sou daqueles q se perde todo sem as chaves, e tb o eclipse já gera o “bloco” prontinho e acho q raras vezes tem apenas uma ação dentro do if ou do laço rsrs.

att,

charlesbraw

É boa prática colocar as chaves sempre.

Se você optar por não colocar, vai ter que desabilitar essa verificação em quase todos programas que trabalham com “qualidade de código”.

Também prefiro colocar.

nel
pedruhenrik:
eu sou daqueles q se perde todo sem as chaves, e tb o eclipse já gera o "bloco" prontinho e acho q raras vezes tem apenas uma ação dentro do if ou do laço rsrs.

att,

Entendo.
Um exemplo que pode confundir:

public static void main(String[] args) throws ParseException {
		List<String> lista = new ArrayList<String>();
		lista.add("valor1");
		lista.add("valor2");
		lista.add("valor3");
		lista.add("valor4");
		
		boolean teste = true;
		if(teste) 
			for(String value : lista)
				for(int i = 0; i < lista.size(); i++)
					if(!teste)
						System.out.println("Fim do laço!");
					else
						System.out.println(value);
		
		
	}

Isso é algo que eu também sou contra. Não é algo que "bate o olho" e já compreende.
Mas para apenas um if-else, laço, não vejo problemas.

Abraços!

nel

charlesbraw:
É boa prática colocar as chaves sempre.

Se você optar por não colocar, vai ter que desabilitar essa verificação em quase todos programas que trabalham com “qualidade de código”.

Também prefiro colocar.

O Sonar é um deles :slight_smile:

Mephy
segundo a convenção do Java pela Oracle, o correto seria isso, se não me engano:
if (
  1 > 0) {
    acao();
  }

for (
  int i = 0;
  i < 50;
  i++) {
  acao();
}

preguiça de procurar agora, mas provavelmente no site da Oracle você acha o artigo falando de todas as boas práticas "default" do Java

R

Com a experiência que tenho com Delphi meu parecer é o seguinte:

Só há necessidade de ser iniciar um bloco quando o mesmo for executar mais de uma ação:

Vejamos o exemplo do nel:

boolean teste = true;  
        if(teste)   
            for(String value : lista)  
               for(int i = 0; i < lista.size(); i++)  
                if(!teste)  
                 System.out.println("Fim do laço!");  
                else  
             System.out.println(value);

Nesse caso se não for aberto um bloco na primeira condição e if (teste) = false, o segundo é quem será executado e isso com certeza fica confuso de compreender o que está acontecendo.

romarcio

Eu aconselho a usar as chaves. Como já disseram, é um boa prática.

Mephy

só pra completar, seguem os links da convenção Java pela Oracle
Code Convention: http://www.oracle.com/technetwork/java/codeconvtoc-136057.html
Statements: http://www.oracle.com/technetwork/java/codeconventions-142311.html#449

M

sempre uso as chaves “{}” e sempre uso o ctrl+shift+F é bom pra acostumar…tem a Java code convention pra saber bem as boas praticas (:

flaviojmendes

Fiz um post sobre esse assunto. Onde me baseei no manual da Oracle de boas práticas.

http://www.flaviojmendes.com/blog/2012/02/09/boas-praticas-em-java-guia-definitivo/

rmendes08

rbcastro:
Com a experiência que tenho com Delphi meu parecer é o seguinte:

Só há necessidade de ser iniciar um bloco quando o mesmo for executar mais de uma ação:

Vejamos o exemplo do nel:

boolean teste = true;  
        if(teste)   
            for(String value : lista)  
               for(int i = 0; i < lista.size(); i++)  
                if(!teste)  
                 System.out.println("Fim do laço!");  
                else  
             System.out.println(value);

Nesse caso se não for aberto um bloco na primeira condição e if (teste) = false, o segundo é quem será executado e isso com certeza fica confuso de compreender o que está acontecendo.

Acontece que no Delphi a abertura de blocos é muito verbosa. Geralmente identa-se o begin-end e depois identa-se novamente o bloco de comandos. Isso de fato torna o código poluído. Mas no caso do Java e linguagens com sintaxe C-like, as chaves tornam o código mais leve, além de que pode-se abrir a chave na mesma linha do if ou for, sendo assim, não fica muito caro, em termos visuais, abrir um bloco de chaves mesmo para um comando só.

flaviojmendes

rbcastro:
Com a experiência que tenho com Delphi meu parecer é o seguinte:

Só há necessidade de ser iniciar um bloco quando o mesmo for executar mais de uma ação:

Vejamos o exemplo do nel:

boolean teste = true;  
        if(teste)   
            for(String value : lista)  
               for(int i = 0; i < lista.size(); i++)  
                if(!teste)  
                 System.out.println("Fim do laço!");  
                else  
             System.out.println(value);

Nesse caso se não for aberto um bloco na primeira condição e if (teste) = false, o segundo é quem será executado e isso com certeza fica confuso de compreender o que está acontecendo.

De acordo com as especificações da Sun/Oracle SEMPRE se deve abrir e fechar as chaves, independentemente de haver uma ou mais instruções dentro do bloco.

Criado 4 de agosto de 2011
Ultima resposta 9 de fev. de 2012
Respostas 14
Participantes 9