INCLUDE или LIBRARY

 
Частично сталкивался писать одно и то же, что в MQL, что в PHP, что в ASP и прочее, ну в PHP многим известно есть include, require.. для результата разницы не имеют(почти)... в MQL встретил include, в отличии от library(в Library только описания функций), мне кажется в include больше возможностей, можно использовать глобальные переменные, предопределенные. Но в Library идет все независимо только от входящих переменых в функцию, вобщем хочу услышать мнение... Поясню готовлю крупный проект, функции и "части" проги кладу конечно в инклуд, но может стоит независимым в либ?? короче, че лучше??
 

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

Для своего проекта логичнее использовать включаемые файлы.

 
ERROR-404 :
Частично сталкивался писать одно и то же, что в MQL, что в PHP, что в ASP и прочее, ну в PHP многим известно есть include, require.. для результата разницы не имеют(почти)... в MQL встретил include, в отличии от library(в Library только описания функций), мне кажется в include больше возможностей, можно использовать глобальные переменные, предопределенные. Но в Library идет все независимо только от входящих переменых в функцию, вобщем хочу услышать мнение... Поясню готовлю крупный проект, функции и "части" проги кладу конечно в инклуд, но может стоит независимым в либ?? короче, че лучше??

Если рассматривать вопрос с точки зрения универсальности и масштабирования, то лучше использовать *.ex4 - библиотеку. В неё можно впихнуть любую универсальность, т.е работу как с единичными ордерами, с сетью, так и с набором сетей (если это вообще в Вашем проекте актуально), в то время, как с включаемыми файлами приходится делать несколько вариантов одних и тех же библиотек в зависимости от "нужд" конкретного советника.

 

Я тоже считаю, что использование библиотек предпочтительнее.

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

Во-вторых, библиотека - это уже скомпилированная программа, поэтому сокращается время на компиляцию основного проекта.

В-третьих, динамическая библиотека даёт гибкость в работе. После её модификации не потребуется потом перекомпилировать все проекты, использующие данную библиотеку.

Однако есть и минус. В функциях библиотеки ex4 в качестве параметров почему-то нельзя передавать переменные по ссылке (это касается даже string). Приходится использовать массивы. А это далеко не всегда удобно. Непонятно, зачем разработчики устроили такой гемор. Причём в документации ни слова не сказано об этом.



 
Scriptong :

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

Для своего проекта логичнее использовать включаемые файлы.


Проект для ограниченого круга(не знающих основ программирования). Расростронение тут исключено.
 
Meat : Однако есть и минус. В функциях библиотеки ex4 в качестве параметров почему-то нельзя передавать переменные по ссылке (это касается даже string). Приходится использовать массивы. А это далеко не всегда удобно. Непонятно, зачем разработчики устроили такой гемор. Причём в документации ни слова не сказано об этом.

Я тоже так думал... Документация:

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

Но с мнением "про гемор" полностью солидарен.

 
Понимаете по ссылки передаются параметры, их у меня бывает до 50, естественно они не указываются, они в глобальные заключены
 

Параметры по умолчанию нельзя передавать. У меня, например, все торговые функции заменяются на @Order...(...) - довольно удобно: подсветка, подсказки сохраняются, но, к сожалению, при вызове из библиотеки пришлось бы заполнять все аргументы. А через инклюд код вставлять - вызывает когнитивный диссонанс :)

 
kazakov.v :

Параметры по умолчанию нельзя передавать. У меня, например, все торговые функции заменяются на @Order...(...) - довольно удобно: подсветка, подсказки сохраняются, но, к сожалению, при вызове из библиотеки пришлось бы заполнять все аргументы. А через инклюд код вставлять - вызывает когнитивный диссонанс :)

Ну для таких целей можно функцию @Order... оформить просто как промужуточную прокладку, из которой уже вызывать конечную функцию с полным числом параметров.
 
Однажды я столкнулся с написанием своих инклуд и либрари!) Написал и то и то! Прошло пару месяцев и понадобилось внести небольшие изменения! Начался гемор от начавшегося забывания алгоритма работы! От инклуд отказался! Оставил только либрари! Вобщем мне показалось так удобнее! Т. к. либрари необходимо для работы основых экспертов и разных скриптов!
 
festival :
Однажды я столкнулся с написанием своих инклуд и либрари!) Написал и то и то! Прошло пару месяцев и понадобилось внести небольшие изменения! Начался гемор от начавшегося забывания алгоритма работы! От инклуд отказался! Оставил только либрари! Вобщем мне показалось так удобнее! Т. к. либрари необходимо для работы основых экспертов и разных скриптов!

Где - то читал (в том числе и в доке), что через библу МЕДЛЕННЕЕ тестируется эксп, чем с инклюдами.
Причина обращения: