Вот это стиль! :)

 

Предистория: За долгие годы кодинга у меня выработался "свой" стиль оформления текстов (вот тут). Тексты уже давно оформляются "на автомате" и к тому же Astyle приходится прибегать только когда начинаеш работу с каким то "чужим" текстом.

Я могу объяснить почему я так форматирую свои тексты: количество табуляций (сдвижка вправо вглубь текста) соответствует уровню вложенности. Каждая открывающая { начинает новый уровень, поэтому располагается на отдельной строке с тем же отступом что предыдущий текст, а весь текст после нее идет с дополнительным отступом вправо. Каждая закрывающая } возвращает текст на одну табуляцию назад. Это позволяет легко находить парные скобки (они по вертикали должны быть в той же позиции и количество нажатий клавиши Tab соответствует уровню вложенности текста. Внутренние + - > < отбиваются пробелами, чтобы текст не сливался в сплошную кашу. Как для меня - все разумно и понятно.


Теперь история: Вчера мне прислали исходник ml5 с каким то странным (с моей точки зрения) форматированием: фигурные скобки сдвинуты вправо, внутрь текста на 2 позиции, а текст внутри них тоже вправо, но всего на одну позицию. Я попробовал табулятором попасть в туже позицию где стоит открывающая { чтобы поставить закрывающую } - не получилось. как оказалось, так оформляет тексты Metaeditor5 своей командой Styler.

Может мне кто то (может сами разработчики) объяснить логику форматирования Metaeditor5?

Вот кусочек кода из MACD Sample.mq5 по-ихнему и по-моему:

Styler5                                  -|- Мой стиль
-------                                  -|- ---------
bool CSampleExpert::LongModified()       -|- bool CSampleExpert::LongModified()
  {                                      -|- {  
   bool res=false;                       -|-   bool res = false;
//--- check for trailing stop            -|-   //--- check for trailing stop
   if(InpTrailingStop>0)                 -|-   if (InpTrailingStop > 0)
     {                                   -|-   { 
      if(m_symbol.Bid()-m_position.Price -|-     if (m_symbol.Bid() - m_position.Pric
        {                                -|-     {
         if(m_position.StopLoss()<m_symb -|-       if (m_position.StopLoss() < m_symb
           {                             -|-       {
            double sl=m_symbol.Bid()-m_a -|-         double sl = m_symbol.Bid() - m_a
            double tp=m_position.TakePro -|-         double tp = m_position.TakeProfi
            //--- modify position        -|-         //--- modify position
            if(m_trade.PositionModify(Sy -|-         if (m_trade.PositionModify(Symbo
               printf("Long position by  -|-           printf("Long position by %s to
            else                         -|-         else
              {                          -|-         {
               printf("Error modifying p -|-           printf("Error modifying positi
               printf("Modify parameters -|-           printf("Modify parameters : SL
              }                          -|-         }
            //--- modified and must exit -|-         //--- modified and must exit fro
            res=true;                    -|-         res = true;
           }                             -|-       }
        }                                -|-     }
     }                                   -|-   } 
//---                                    -|-   //---
   return(res);                          -|-   return(res);
  }                                      -|- }
 

ForexTools писал(а) >>

как оказалось, так оформляет тексты Metaeditor5 своей командой Styler.

Может мне кто то (может сами разработчики) объяснить логику форматирования Metaeditor5?

Присоединяюсь к вопросу, тоже всегда было интересно.

 

Не ищите логику там где ее нет. Лучше оформляйте багрепорт.

=)

 

Тоже всегда вызывало вопросы. :(

Я, правда, придерживаюсь стиля похожего на Java.

 
sol >>:

Не ищите логику там где ее нет. Лучше оформляйте багрепорт.

=)

Читайте Help, ибо там все сказано:


 
sol >>:

Лучше оформляйте багрепорт.

Ну это же все таки не баг (в чистом виде). Просто "они так видят" :)

Мне сначала хочется понять логику, если она там конечно есть.

 
Rosh >>:

Читайте Help, ибо там все сказано:

в хелпе написано КАК это делается, но не написано ПОЧЕМУ это считается правильным, удобным, эффективным, ....

для такой операции вообщето нужно былобы просто сделать опции настройки стилизатора (для примера - гляньте доку по тому же Astyle)

открывающие скобки:

- смещать вправо: количество пробелов

- перевод строки: до или после

ну и т.д.

 
ForexTools >>:

Мне сначала хочется понять логику, если она там конечно есть.

Логика в том, что код выравнивается в соответствие с уровнем вложенности. Тут разногласий нет, как мы видим.

А вот открывающие и закрывающие скобки не являются кодом, а являются элементами оформления,и поэтому слегка выступают за границы кода на один символ.

 

Rosh писал(а) >>

А вот открывающие и закрывающие скобки не являются кодом, а являются элементами оформления,и поэтому слегка выступают за границы кода на один символ.

Как мне кажется, блочные скобки являются важной частью кода и выделяют логический или функциональный блок. Так почему их не располагать так, чтобы они действительно выполняли эту функцию? Про пробелы вокруг операторов и т.д. пока не будем говорить.

 
Rosh >>:

Логика в том, что код выравнивается в соответствие с уровнем вложенности. Тут разногласий нет, как мы видим.

Разногласия есть в том что вы считаете и что считают удобным для себя другие пользователи ;)

Я думаю что проблема ЛЕГКО СНИМАЕТСЯ дополнительными настройками стилизатора. Я уверен что, это самая НЕсложная для реализации задача.

 

Спасибо TheXpert, я как то даже не заметил этот "пассаж"

А вот открывающие и закрывающие скобки не являются кодом, а являются элементами оформления

ну не тяните за уши оправдания тому что было както сделано и теперь надо хоть как то объяснить ;)

элементы оформления - это комеентарии. их можно удалить без потерь функциональности!!! попробуйте как удалить хоть один такой "элемент" (я имею в виду } ) - куда вас пошлет компилятор? :))))

Причина обращения: