Estilizador
O estilizador permite que você traga rapidamente o estilo do código fonte ao padrão recomendado. Isso torna o código fácil de ler e faz que pareça profissional. Um código bem apresentado é muito mais fácil de ler e analisar, no futuro, pelo seu autor e outros usuários. Para iniciar o estilizador, clique em " Estilizador" no menu "Ferramentas" ou "Ctrl+".
- Alterações no design do código, feitas pelo estilizador, podem ser revertidas. Clique em " Desfazer" no menu "Editar" ou "Ctrl+Z".
- O estilizador oferece suporte a muitos padrões de codificação. Você pode mudar o estilo nas configurações do editor. As regras de layout para o estilo MetaQuotes recomendado são detalhadas abaixo.
|
Descrição geral
Para formatar corretamente o código no estilizador, são fornecidos os seguintes tipos de ação com o código:
- Substituir as linhas especificadas por outras;
- Alinhar operadores de linguagem;
- Inserir comentários no cabeçalho do arquivo;
- Inserir comentários antes de funções, estruturas, classes e seus métodos;
- Inserir comentários no final do arquivo.
Com base nos tipos de ações mencionados, o estilizador faz o seguinte ajuste:
Espaços e linhas em branco
Remoção de espaço em branco desnecessários permite compactar o código, melhorando assim sua percepção. Além disso, o estilizador substitui cada caractere de tabulação por três espaços para evitar possível distorção de sua formatação quando aberto em programas de terceiros.
O estilizador limpa os espaços em branco:
- No final das linhas;
- Antes do caractere ";";
- Entre "if" e "(", "while" e "(", "for" e "(", "switch" e "(", "return" e "(".
- Após ";" dentro de "for()";
- Após "!";
- Ao lado de "(" e ")";
- Ao lado de "<" e ">";
- Ao lado de "|" e "^";
- Ao lado de "+", "-", "/" e "%";
- Ao lado de "[" e "]";
- Ao lado de "==" e "==";
- Ao lado de "!=" e "!=";
- Ao lado de "<=" e ">=";
- Ao lado de "+=" e "+=";
- Ao lado de "-=" e "-=";
- Ao lado de "*=" e "*=";
- Ao lado de "/=" e "/=";
- Ao lado de "<<" e ">>";
- Um espaço à direita e à esquerda de "," e "=".
O estilizador define:
- Um espaço à direita e à esquerda para "||" e "&&" (resultado: " || " e " && ").
Outras substituições:
- Em construções do tipo "int* a", os caracteres "*" e "&" se referem à variável, e não a um tipo, portanto, essa construção é substituída por "int *a";
- Linhas em branco duplas são substituídas por uma.
Antes da formatação
|
Após a formatação
|
void myFunction()
{
if (I < 10)
{
printf (Hello\n) ;
if (I < 5 )
{
printf (i<5 !\n) ;
if (i < 3)
{
printf (i<3 !\n) ;
if (i < 2)
{
}
}
}
}
}
|
void myFunction()
{
if(I<10)
{
printf(Hello\n);
if(I<5)
{
printf(i<5 !\n);
if(i<3)
{
printf(i<3 !\n);
if(i<2)
{
}
}
}
}
}
|
O tamanho da tabulação do estilizador é sempre igual a três espaços, independentemente das opções do MetaEditor.
|
Exceções para substituições ao formatar levando em conta ao alinhamento de entre linhas
As regras de substituição do estilizador, mencionadas acima, não se aplicam em alguns casos. Isso é fornecido para não violar a justificação autoral nas linhas adjacentes. O estilizador reconhece o alinhamento entre linhas na linha seguinte para as seguintes palavras-chave e símbolos:
- "//" – símbolos de comentário "C";
- "{" – chave esquerda;
- "}" – chave direita;
- "return" – operador "return";
- "delete" – operador "delete";
- "=" – símbolo de igualdade;
- ":" – dois-pontos;
- "." – ponto.
Se, durante a análise de linha, o estilizador encontrar uma dessas palavras ou símbolos, mencionados acima, na mesma posição da linha anterior ou subsequente, nenhuma substituição será feita nela.
Formatação de funções e operadores
- Antes dos símbolos "{" e "}", que abrem e fecham a função/operador, são definidos dois espaços a partir da declaração do tipo de função/operador.
- Antes de cada linha entre os símbolos "{" e "}" da função/operador, três espaços são definidos desde o início da instrução.
- Caso não existam caracteres "{" ou "}" de fechamento num operador com texto, esses símbolos e texto serão enviados para linhas diferentes.
- Além disso, o alinhamento leva em conta o conteúdo da linha anterior. Se na linha anterior o colchete não está fechado ou a expressão aritmética não está completa, então a linha atual começará com a primeira posição após o "(" ou "=" da linha anterior.
- Condição "else" é sempre definida em pé de igualdade com "if";
Antes da formatação
|
Após a formatação
|
void myFunction() {
int k[10],t=0;
for(int i=0;i<10;i++){
k[i]=i;
t+=i;}
if (button==name) {
bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
if(!state)
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
else {
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
}
|
void myFunction()
{
int k[10],t=0;
for(int i=0;i<10;i++)
{
k[i]=i;
t+=i;
}
if(button==name)
{
bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
if(!state)
ObjectSetInteger(0,name,OBJPROP_STATE,false);
}
else
{
ObjectSetInteger(0,name,OBJPROP_STATE,false);
}
}
|
Alinhamento ao declarar estruturas, classes e enumerações
Em esse tipo de expressões, é usada a tabulação de dois níveis:
- Três espaços são definidos antes de especificar o tipo de membro/método descrito;
- Os nomes dos membros ou métodos descritos da estrutura ou classe são indicados a partir da posição 22 na linha;
- Qualificadores de acesso a membros e métodos ("private", "protected", "private" e "virtual") são alinhadas pela palavra "class".
Antes da formatação
|
Após a formatação
|
class CTradePad {
private:
int m_rows;
int m_columns;
int m_button_width;
int m_button_height;
int m_top;
int m_left;
int m_left_previous_header;
};
|
class CTradePad
{
private:
int m_rows;
int m_columns;
int m_button_width;
int m_button_height;
int m_top;
int m_left;
int m_left_previous_header;
};
|
Alinhamento de comentários
Há uma diferença no alinhamento de comentários em declarações e definições:
- Comentários do primeiro nível, na definição da função ou método, são alinhados à esquerda (sem recuo);
- Os comentários de primeiro nível, na declaração, são alinhados à terceira posição na linha.
- Os comentários dos níveis seguintes são alinhados igualmente no nível correspondente dos operadores em que são indicados.
Antes da formatação
|
Após a formatação
|
void myFunction() {
//--- comentários de primeiro nível
int k[10],t=0;
for(int i=0;i<10;i++){
k[i]=i;
t+=i;}
if (button==name) {
bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
//--- comentários de segundo nível
if(!state)
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
else {
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
}
|
void myFunction()
{
//--- comentários de primeiro nível
int k[10],t=0;
for(int i=0;i<10;i++)
{
k[i]=i;
t+=i;
}
if(button==name)
{
bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
//--- comentários de segundo nível
if(!state)
ObjectSetInteger(0,name,OBJPROP_STATE,false);
}
else
{
ObjectSetInteger(0,name,OBJPROP_STATE,false);
}
}
|
class CTradePad
{
private:
int m_rows;
//--- número de linhas
int m_columns;
//--- número de colunas
int m_button_width;
//--- largura de compartimento
};
|
class CTradePad
{
private:
int m_rows;
//--- número de linhas
int m_columns;
//--- número de colunas
int m_button_width;
//--- largura de compartimento
};
|
Inserir comentários
Um comentário do tipo a seguir é inserido no cabeçalho do arquivo, se estiver faltando:
//+------------------------------------------------------------------+
//| ProjectName |
//| Copyright © 2009, CompanyName.|
//| http://www.companyname.net |
//+------------------------------------------------------------------+
|
Comentários do seguinte tipo são inseridos antes de funções, classes, estruturas, etc. na sua ausência:
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
|
No final do arquivo, é inserido um comentário de corte do seguinte tipo:
//+------------------------------------------------------------------+
|