О стиле кодирования - страница 5

 

Где в MQL4 классы, С-4? Да и вроде разработчики сказали, что пока наследования в пятере не будет.

 
Mathemat >>:

Где в MQL4 классы, С-4? Да и вроде разработчики сказали, что пока наследования в пятере не будет.

Уже есть, со всеми сопутствующими прелестями. И это можно увидеть даже в Тетрисе (в исходниках mq5).

 

Ух интересно-то как. Три месяца как уже опубликована игрушка, а узнал только что...

 
Mathemat >>:

Ух интересно-то как. Три месяца как уже опубликована игрушка, а узнал только что...

я кажется чтото пропустил....

в чем смысл восклицания "ух-ты"? разьве гдето есть МТ5 что бы потестить исходники?!!! если есть - не сочтите за труд дать ссылочку на скачку.

 

Ну нет, МТ5 еще не видно (простым смертным), но хоть на код глянуть можно. Примерно понятно, что можно ожидать.

 

а не подскажет ли кто прожку которая сумеет распарсить MQL-исходник и в каком то виде выдать имена используемых переменных\функций и количество их "упоминаний" в тексте?

например чтобы можно было отловить остатки неиспользуемых больше переменных от выброшенных текстов, и для того чтобы случайно не переименовать какоето сильно сокращенное имя в более длинное и понятное, которе окажется уже использованым именем глобальной переменной про которую ты уже давно забыл что она есть гдето в коде.

 
YuraZ >>:

предпочитаю

if ( a > c )

codret = 3;

if ( l < b )

codret = 5;

...

...

if ( h != b )

codret = 100;


// особенно если перед return делаются некие дополнительные общие для всех выходов действия

... например тут занимаемся еще чем то

retrun( codret);

}

Вы как раз показали яркий пример того, почему я использую множественные выходы return. В Вашем примере функция вернет последнее сработавшее if(), а не первое. В моем примере функция вернет первое совпадение. В практие я часто сталкивался с тем, что необходимо возвращать именно первое удовлетворяющее условию  значение, и почти никогда мне не приходилось возвращать последнюю сработавшую проверку. В этом примере наличие одного return, вовсе не упрощает отслежывание значений возвращаемых функцией, скорее наоборот,от одного return можно ожидать всего что угодно.

И кстати, лично я не люблю отделять важный знак ";" от выражения:

extern double max_price[100]                                           ; //Хранит цены максимумов последних ста баров

extern double max_price[100] ;                                           //Хранит цены максимумов последних ста баров - Я пишу только так

 
В 70-е годы было очень модно направление под названием "Структурное программирование". Было написано много книг по этому поводу. Из запомнившихся сентеций: функция должна умещаться на одном листе (тогда не был дисплеев), долой goto и так целая книга. Потом, якобы, это все превратилось в объектно-ориентированное программирование. Может быть опять изобретаем велосипед?
 

Нет, тут мы говорим просто о стиле. Кстати, в некоторых случаях я совсем не против goto.

 
C-4 >>:

Зачем нужно объявлять функцию в функции? Лично, мне как выросшему исключительно на Си, Си++ непонятен этот прием.

Инкапсуляция... Когда пишешь шаблоны и хочешь спрятать очень локальную функцию или функтор или класс, очень даже полезно.

А чаще всего можно обойтись безымянным пространством имен.

2. Ненавижу очень распрастранненый стиль ставить фигурные скобки таким образом:

Очень зря. Рассадник разных ляпов со скобками. Раньше то оправданием была экономия места и правило размера кода функций.

А сейчас в век терабайтных веников чего места жалеть?

5. Использую функции в функции:

Неэффективно (при нескольких вызовах одной), размазанно и длинно. Тем паче один из UB, рассадник злостных нетривиальных ошибок.


Далее -- насчет копипастов. Очень засадная фигня :). Каюсь пользую и часто из-за него допускаю ошибки. Пример? забыл переименовать переменную, поменять коммент, да мало ли что.

Поэтому ревью кода оч. полезная вещь.


Насчет Паскаля :) . До сих пор главный олимпиадный язык. По одной простой причине -- мало ключевых слов, логическая стройность.

Долго не верил, что Паскаль (вернее Делфи) хуже С++, пока не узнал С++ лучше.

Сейчас считаю, что Паскаль лучше одним: на нем сложнее написать быдлокод.


Далее -- насчет комментов -- да фигня все это, особенно про 30%.

Пишите самодокументируемый код и будет вам щасте. В виду отсутствия классов, на MQL4 это сделать сложновато. Но с классами должно стать полегче.


Все остальное -- отступы, принципы именования, выравнивания -- не более чем рекомендации.

Кстати насчет функций. А какой шрифт должен быть? А что если на строчку больше? Главное, чтобы понятно было, ч в ней делаеццо, остальное лишь рекомендации.


Самое главное сделать код максимально понятным для тех, кто его возможно будет сопровождать.

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