Por que tanto código é assim?

 

Vejo isso muitas vezes quando as pessoas postam seu código.

if(a==b){
Dothis;
Dothis;
etc;
}

Agora, isto não é um problema ao ler pedaços curtos do código de outras pessoas.

Mas, quando eles são muitos códigos, isso pode tornar quase impossível segui-los.

Eu pensaria que muitos teriam dificuldades para encontrar erros em seu próprio código.

Por que não isto?

if(a==b)
{
Dothis
Dothis
etc
}

//Or

if(a==b)
  {
  Dothis
  Dothis
  etc
  }

 

Não há nada de errado com o estilo anterior ( estilo K & R ) (desde que seja indentado). É muito usado em linguagens com este tipo de sintaxe (C, Java, Perl) .

É, por exemplo, a norma Java e bastante legível IMO (desde que indentada corretamente). [ Como o mql4 toma muito emprestado da sintaxe do estilo C, acho que mencionar estas outras linguagens é relevante ]

No entanto, deve ser indentada:


if(a==b){
   Dothis;
   Dothis;
   etc;
}


O 2º exemplo ( estilo Allman ) também é preferido por alguns, e é geralmente aceite para ser mais legível (mais uma vez com indentação correta).


if(a==b)
{
   Dothis;
   Dothis;
   etc;
}

mas o método que você parece dispensar é bastante popular em outros lugares (por razões de legibilidade)

Seu último exemplo não me agrada em nada.

 

O estilo allman também é mais fácil de identificar os aparelhos que faltam, especialmente em árvores complexas, se mais.

 

O estilo Brace é uma preferência dos programadores, não há realmente nenhum método certo ou errado Imo. O estilo K&R é o melhor ;-). Por que pegar uma linha extra para um brace de abertura .... o que realmente me interessa é a que se (declaração) pertence. Exemplo o que parece melhor e mais fácil de entender.

if(.............................)
    {
    if(.............................)
        {
        if(.............................)
            {
            if(.............................)
                {
                if(.............................)
                    {
                    if(.............................)
                        {
                        if(.............................)
                            {
                            if(.............................)
                                {
                                if(.............................)
                                    {
                                    if(.............................)
                                        {
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

Ou esta versão:

if(.............................){
    if(.............................){
        if(.............................){
            if(.............................){
                if(.............................){
                    if(.............................){
                        if(.............................){
                            if(.............................){
                                if(.............................){
                                    if(.............................){
}   }   }   }   }   }   }   }   }   }

E ainda melhor ainda.

if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
if( !.............................) return
Imo, a última versão parece mais natural à forma como eu escrevo na vida real. Linha por linha.
 

Eu o faço assim:

if(.............................)
{if(.............................)
 {if(.............................)
  {if(.............................)
   {if(.............................)
    {if(.............................)
     {if(.............................)
      {if(.............................)
       {if(.............................)
        {if(.............................)
}}}}}}}}}
 

Eu gosto da discussão.

E quanto à preferência em codificar a outra afirmação. Eu prefiro o primeiro exemplo, embora alguns editores não possam dobrar/dobrar tais blocos. O segundo é um compromisso. O terceiro é ainda mais consistente, mas ilegível.

if (cond) {
   command;
} else if (cond) {
   command;
} else {
   command;
}

O segundo exemplo é um compromisso.

if (cond) {
   command;
}
else if (cond) {
   command;
} 
else {
   command;
}

ou

if (cond) {
   command;
} 
else {
   if (cond) {
      command;
   }   
   else {
      command;
   }  
}
 
Até certo ponto não importa, o principal que importa é a consistência na aplicação do estilo escolhido ... todos nós temos nossas próprias preferências, é claro
 

Eu não uso mais muito mais. Houve um problema em que fui obrigado a usar outro há algum tempo (não consigo me lembrar do problema). Quando usei outra coisa, foi algo assim.

if (cond) { command; } else 
if (cond) { command; } else {
   command;
}

Agora, por mais que meu primeiro ensinou sobre codificação, algo como o acima seria.

if( cond ){ command; return; }
if( cond ){ command; return; }
command;

Sim, eu vou transformar um código de três_ linhas em uma função 8)))

 
SDC:

eu faço, se assim não for

Pessoalmente, acho isso tão claro quanto lama.
 
RaptorUK: Pessoalmente, acho isso tão claro quanto lama.
Isso só me machuca os olhos :{\i1}
 
RaptorUK:
Até certo ponto não importa, o principal que importa é a consistência na aplicação do estilo escolhido ... todos nós temos nossas próprias preferências, é claro

Concordo com o Raptor. Tópico sobre nada. Fico muito mais frustrado quando as pessoas postam seu código aqui sem usar o SRC. Como eles codificam seu programa depende deles, a menos que eles vão pedir ajuda.