Разгрузка кода скрипта за счет библиотеки

 

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

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

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

Или все же лучше просто запихнуть все нужные глобальные переменные скрипта в функции библиотеки как параметры и не париться, сделав их "автономными"?

 
Лучше используйте включение исходников библиотеки через include, а не через import из EX4 с динамическим связыванием и потерями в скорости.
 
Спасибо, Renat, о самом простом способе я и не подумал...
 
Использовать библиотеку, как по мне, есть смысл только если не хочешь выкладывать открытый код, или если нет возможности скомпилировать эксперта, использующего библиотечные функции.

В остальных случаях удобнее #include - получается тот же код, но разделенный на несколько файлов.


PS: в каждый из второстепенных включаемых файлов можно вставить строку "#include <главный включаемый файл.mq4>", и тогда их можно будет компилировать ;)
 
Mathemat:
Спасибо, Renat, о самом простом способе я и не подумал...


Стареешь, Mathemat!

:)

 
Aleksey24:
Стареешь, Mathemat!

:)

В такой веселой доброжелательной манере молодые дарования проявляют благодарность своим менторам!
 
Mathemat:

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


Да уж. Глянул я на эксперта в 15,5 тыс. строк кода и подумал, как мозг и компилятор это всё тянут ;)
 
komposter:
Использовать библиотеку, как по мне, есть смысл [...] если нет возможности скомпилировать эксперта, использующего библиотечные функции.
А когда нет такой возможности? Когда не хватает самих библиотек?

Aleksey24 писал (а): Стареешь, Mathemat! :)

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