Почему в MQ записывают методы класса раздельно? - страница 2

 
Laryx:

У меня ВСЕ классы имеют исключительно mqh-mq5 структуру. Для примера, моя реализация вашего класса CLogFile:

Файл .MQ5:

#property library

То есть это библиотека. И это, похоже, единственный способ разделить объявления от реализации на два файла в MQL. Но библиотеки имеют свои ограничения, например в них почему-то нельзя передавать дескрипторы файлов (раньше точно было так, может, уже поправили? ). Кстати, не пробовал, а как они в плане отладки и профилировщика?

Из Visual Studio можно делать компиляцию через запуск компилятора из командной строки. Или скачать отдельные компиляторы

https://download.mql5.com/cdn/web/metaquotes.software.corp/mt5/mql.exe

https://download.mql5.com/cdn/web/metaquotes.software.corp/mt5/mql64.exe

Или запустить редактор

metaeditor.exe /compile:"path to source" /inc:"path to MQL5 directory"

 
VDev:

То есть это библиотека. И это, похоже, единственный способ разделить объявления от реализации на два файла в MQL.

Да, верно.

VDev:

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

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

Правда, я не люблю дескрипторы файлов, я использую указатели на объекты, для файлов - это класс файла.

И отладка и профилирование - никаких проблем вроде не замечал. 

VDev:

Из Visual Studio можно делать компиляцию через запуск компилятора из командной строки. Или скачать отдельные компиляторы

https://download.mql5.com/cdn/web/metaquotes.software.corp/mt5/mql.exe

https://download.mql5.com/cdn/web/metaquotes.software.corp/mt5/mql64.exe

Или запустить редактор

metaeditor.exe /compile:"path to source" /inc:"path to MQL5 directory"

Вот это надо будет поглядеть. Действительно, в MSVC  браузер объектов весьма и весьма удобен.
 
Laryx:
Вот это надо будет поглядеть. Действительно, в MSVC  браузер объектов весьма и весьма удобен.

Тогда советую добавить расширения MQL в VS, пусть думает, что это С++ )) Иначе подсветки не будет.


 
VDev:

Я вот на C# давно программирую и бардака не ощущаю...

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

tol64:

Представление классов в таком виде воспринимаю как бардак. Это терпимо, если методов немного. Но если список их велик, то при таком способе представления не видно чёткой структуры класса и изучение его затрудняется. 

Хорошим примером считаю стандартную библиотеку MQL. Всё очень аккуратно оформлено. Можно даже сказать - идеально.

Написал тонны кода в разном стиле. Могу сказать что преимуществ написания методов отдельно нет. Многие классы все равно слишком большие, что бы на одном экране вместить все свои прототипы методов, комментарии к ним и приватные переменные.
 
C-4:

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

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

Речь не о том, чтобы уместить всё на одном экране, а о том, что ориентироваться человеку, который видит этот класс впервые, намного легче. Когда в теле класса помещены только названия методов, то его можно сравнить с содержанием книги. Проще ведь для начала посмотреть только содержание, а не листать всю книгу. А от объявления к определению метода уже можно перейти одним нажатием Alt+G, установив курсор на объявление метода. По моему преимущество очевидно.

 
tol64:

Речь не о том, чтобы уместить всё на одном экране, а о том, что ориентироваться человеку, который видит этот класс впервые, намного легче. Когда в теле класса помещены только названия методов, то его можно сравнить с содержанием книги. Проще ведь для начала посмотреть только содержание, а не листать всю книгу. А от объявления к определению метода уже можно перейти одним нажатием Alt+G, установив курсор на объявление метода. По моему преимущество очевидно.

Для этих целей необходимо генерировать документацию с помощью специальных программ. Например, если обрамлять каждую функцию комментариями из '///' Doxygen сможет создать документацию класса в html или chm формате:


 
C-4:

Для этих целей необходимо генерировать документацию с помощью специальных программ. Например, если обрамлять каждую функцию комментариями из '///' Doxygen сможет создать документацию класса в html или chm формате:

Для удобной навигации по коду и возможности видеть чёткую структуру (содержание) класса, непосредственно в коде, лепить документацию? Не убедительно. Документация конечно тоже нужна, но не для этих целей, а для разъяснения нюансов по использованию некоторых специфических функций и примеров их использования.

 
tol64:

Для удобной навигации по коду и возможности видеть чёткую структуру (содержание) класса, непосредственно в коде, лепить документацию? Не убедительно. Документация конечно тоже нужна, но не для этих целей, а для разъяснения нюансов по использованию некоторых специфических функций и примеров их использования.

А вот для удобной навигации по коду раздельное написание методов как раз таки не поможет, скорее затруднит. Здесь важно наличие продвинутого intellisense + кнопки "список функций" и "переход к определению". А вообще конечно в MetaEditor очень не хватает коллапса функций.
 
C-4:
А вот для удобной навигации по коду раздельное написание методов как раз таки не поможет, скорее затруднит. Здесь важно наличие продвинутого intellisense + кнопки "список функций" и "переход к определению".

Мне не усложняет, а наоборот очень помогает. А вот отсутствие содержания, как раз таки усложняет. Список функций (Alt+M) практически не использую. В редакторе ME они представлены в алфавитном порядке и голым списком без кратких комментариев, а в содержании класса методы можно группировать по категориям, что даёт ещё большее представление о классе и облегчает его изучение. Опция Список функций больше подходит, как дополнение для самого автора кода, а не для тех, кто видит этот код впервые.

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

P.S. И фолдинг тоже конечно очень нужен. Но код всё равно должен быть таким, чтобы удобство его изучения не зависело от среды, в которой он изучается. Хоть в блокноте открой, всё должно быть в идеале красивым и понятным даже в наипростейшем текстовом редакторе. ))

 
tol64:

Представление классов в таком виде воспринимаю как бардак. Это терпимо, если методов немного. Но если список их велик, то при таком способе представления не видно чёткой структуры класса и изучение его затрудняется. 

Хорошим примером считаю стандартную библиотеку MQL. Всё очень аккуратно оформлено. Можно даже сказать - идеально.

Пожалуй соглашусь с tol64.

Нынешнее структурирование объявлений\определений методов в MQL является наиболее оптимальным. Жалко, что практически никак разработчик не спешит улучшать навигацию, фолдинг и подобные фичи. Писал тут.


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


Золотые слова!

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