Ошибки, баги, вопросы - страница 3383

 
fxsaber #:

Пример такого кода в КБ есть? Или в штатной поставке терминала? Странно это все звучит, мягко говоря, истории про правильное и неправильное. Вроде, большие уже все.

я понимаю Ваш антагонизм, сам в нем прибываю

Правильный, неправильный (говнокод, shit code) - это термин не для программистов-одиночек, как Вы или как я. 
Это термин для командной разработки сложных длительных проектов, в которых код каждого участника команды видят и юзают другие, где один программист может уйти, а на смену ему прийти новый, который он будет вынужден окунуться с головой в то, что было написано его предшественником.
Более того, для программистов одиночек этот термин тоже становится актуальным, когда этот программист возвращается к своему коду через несколько лет. 
Говнокод (неправильный) - это вовсе не означает неработающий или неэффективный код. Напротив, самые элегантные (в плане размера и производительности) коды часто оказываются говнокодистыми, так как такой код никто, кроме самого их творца, не может изменить (поддерживать). 
Я сам, когда есть выбор между высокопроизводительным говнокодом и "правильным" кодом, чаще выберу первое.

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

Здесь в КБ не видел 100% правильного кода (возможно потому, что не часто смотрю в чужой код), но в других языках видел (особенно Java очень ревностна к шаблонизации и стилю). Даже все творения Игоря Кима процедурные. 
Впрочем, кстати, у Карпутова видел вполне "правильный" код. 
Хотя, думаю, вполне законно можно назвать "правильным" кодом большинство встроенных библиотек от MQ. 
Например:

Наверное все же должен быть компромис, когда добротно говнокодить можно в своих строго private методах, а в остальном, все должно быть красиво и читаемо для стороннего наблюдателя.
"Правильное" ООП - это исскуство! Когда правильно все - кол-во классов, их имена, иерархия, их методы (защищенные,приватные и публичные), оформление (отступы) и комментарии.

 
Nikolai Semko #:

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

Более того, для программистов одиночек этот термин тоже становится актуальным, когда этот программист возвращается к своему коду через несколько лет.

Для меня в работах этого автора недостижимый мною ООП-стиль программирования, которым могу только восхищаться, но не в состоянии понять его.

Возможно, это результат его профильного образования и огромного опыта. Это, как пример, вроде, "правильного" ООП, но совсем не очевидного.

Там очень хорошо выстроена архитектура, но моя низкая компетенция не позволяет ее увидеть в коде.


Что же касается тех же "позиций в деструкторе" - это проста одна из реализаций, а не иной уровень владения ООП. Как Вы выразились, "говнокод" одиночки.

Сам активно использую виртуальные функции, деструкторы, наследования, перегрузки, статические поля классов, сборщики, синглтоны, указатели на объекты, указатели на функции, шаблоны, макросы и т.д. Но это все равно остается "говнокодом", только несколько сложнее. Использую удобные ООП-возможности для реализации, но в голову не придет это назвать ООП-парадигмой иного уровня понимания.


ЗЫ Trade-библиотека, как стиль, видится избыточной ООП-оберткой. Если ее заставить работать, станет "говнокодом", потому что количество торговых нюансов зашкаливает. Сейчас в ней нет ничего из этого (возможности наследования не помогут), к сожалению. И это одна из причин, почему она читается столь легко.

Stanislav Korotky
Stanislav Korotky
  • www.mql5.com
Профиль трейдера
 
Nikolai Semko #:

я понимаю Ваш антагонизм, сам в нем прибываю

Правильный, неправильный (говнокод, shit code) - это термин не для программистов-одиночек, как Вы или как я. 

Вы наверное пока не встречали настоящего говнокода… (без кавычек). 

 
Nikolai Semko #:
Ах, понимаю о чем Вы.

A100 #:

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

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

Читабельность кода не причем, и на бейсике командами проекты делались, комменты и правильная организационная структура работы.

Поэтому действительно трудно начать решать задачу с описания алгоритма как сущности без привязки к месту)))

Процедурный вариант с классами, это Алгоритм, смотрим что можно разбить на функции, классы, что бы было удобней и реализация в коде.

Типовой, описательный подход ООП, для меня это сперва описание алгоритма как сущности, с логичной разбивкой по повторяемости, и потом его использования где только можно)

Не претендуя на истину, мое восприятие)

 

экспортируемая функция библиотеки Shuffle.ex5:

void ExportFunc (double v) export //аргумент по значению
{
  v = 3.1415926;
}

вызов функции из библиотеки функции с неправильно объявленным аргументом

#import "Shuffle.ex5"
   void ExportFunc (double &v); //аргумент по ссылке
#import

void OnStart()
{
   double result;
   ExportFunc (result);
   Print("Result: ", result);
}

вызовет зависание с последующим падением терминала.

обратная ситуация, когда в библиотеке аргумент по ссылке а вызываем по значению так же вызывает зависание терминала и падение, но в этом случае терминал всё же успевает вывести в лог экспертов следующее:

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

2023.09.09 11:11:08.989    Exception    C0000005 at 00007FF7310D062E read to FFFFFFFFFFFFFFFF


наверное нужна какая то защита в терминале от подобного некорректного вызова функций из библиотеки.

 

Кто-то заметил статистически разницу между тестами/оптимизаций на ssd и hdd?

Прогонял вчера часть советников, сделал тестов 80, разница в пользу hdd в основном по быстроте, иногда ssd NVMe но разницы выигрыша ssd NVMe очень минимальны, а hdd выигрывал с большей разницей.


Подскажите тогда в каких конкретно задачах ssd быстрее hdd чтобы можно было это отследить и мне.


P.S. 1 сферу нашёл теоретически и на практике увидел разницу но хочу и ваши варианты услышать независимые.

 
Во фрилансе, если было подано обращение в арбитраж, но работу таки удалось закрыть по договору (по нормальному, без функционала арбитража), счетчик "арбитражей" не сбрасывается. Можете это подправить?
 
Добрый вечер!
Подскажите пожалуйста, как расчитывается лот при копировании. По балансу или по эквити? (со счёта провайдера на счёт подписчика)
 
Nykyta Shportiuk #:
Добрый вечер!
Подскажите пожалуйста, как расчитывается лот при копировании. По балансу или по эквити? (со счёта провайдера на счёт подписчика)
По балансу провайдера и подписчика, и по плечу аккаунта провайдера и подписчика, плюс учитывается процент использования депозитав настройках подписки сигнала у подписчика в Метатрейдере. И это все в общем виде выводится в журнал/логи у подписчика.
Детали (с примерами и так далее) - см пост
Копирование сигналов - Введите логин и пароль в журнале Метатрейдера
Копирование сигналов - Введите логин и пароль в журнале Метатрейдера
  • 2021.04.14
  • www.mql5.com
Как заранее узнать коэффициент копирования сигналов на мой счет и размер необходимого депозита на счете. Объем у подписчика вычисляется автоматически исходя из балансов подписчика и провайдера. размер депозита одинаковый и даже на счете 2 больше
 

Если в ME строка длинней 3277 с учетом комментария "//", то строка исчезает (становится невидимой)...

//12321..1321321
Причина обращения: