MQL4 - automated forex trading   /  

Форум

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

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

avatar
6788
Mathemat 02.07.2007 13:41 

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

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

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

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

article

Строки: таблица символов ASCII и её использование

В этой статье мы детально рассмотрим таблицу символов ASCII и как её можно использовать. Также мы рассмотрим несколько новых функций, принцип работы которых основан на специфике строения таблицы ASCII, и в конце создадим новую библиотеку, в которую включим эти функции. Они достаточно популярны в других языках программирования, но их нет среди встроенных функций. Кроме того мы очень детально разберём основы работы со строками, так что, я думаю, вы обязательно узнаете что-нибудь новое про этот полезный тип данных.


avatar
Модератор
3176
Renat 02.07.2007 15:08 
Лучше используйте включение исходников библиотеки через include, а не через import из EX4 с динамическим связыванием и потерями в скорости.

avatar
6788
Mathemat 02.07.2007 15:35 
Спасибо, Renat, о самом простом способе я и не подумал...

avatar
13989
komposter 02.07.2007 15:53 
Использовать библиотеку, как по мне, есть смысл только если не хочешь выкладывать открытый код, или если нет возможности скомпилировать эксперта, использующего библиотечные функции.

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


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

avatar
332
Aleksey24 02.07.2007 15:57 
Mathemat писал (а):
Спасибо, Renat, о самом простом способе я и не подумал...


Стареешь, Mathemat!

:)


avatar
2430
granit77 02.07.2007 19:11 
Aleksey24 писал (а):
Стареешь, Mathemat!

:)

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

avatar
1276
chv 02.07.2007 21:40 
Mathemat писал (а):

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


Да уж. Глянул я на эксперта в 15,5 тыс. строк кода и подумал, как мозг и компилятор это всё тянут ;)

avatar
6788
Mathemat 02.07.2007 23:18 
komposter писал (а):
Использовать библиотеку, как по мне, есть смысл [...] если нет возможности скомпилировать эксперта, использующего библиотечные функции.
А когда нет такой возможности? Когда не хватает самих библиотек?

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

Вот решу круглое уравнение - тогда и посмотрим, у кого больше ехидства осталось, хе-хе...

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий