Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
т.е. самой "с" в теле функции Gipo нет. "С" осталось в вызвающей проге. Также "С" может быть глобальной.
Очень удобно. Это кусочек Си - косвенная адресация, Си-мышление.
Одна печаль, поскольку об этой адресации нет в описании языка (но есть в трансляторе),
постольку косвенная адресация может когда нибудь незаметно исчезнуть. (Может об этом разработчиков спросить?).
Это означает, что вместо значения "С" передается ссылка-адрес "&С",
т.е. самой "с" в теле функции Gipo нет. "С" осталось в вызвающей проге. Также "С" может быть глобальной.
Очень удобно. Это кусочек Си - косвенная адресация, Си-мышление.
Одна печаль, поскольку об этой адресации нет в описании языка (но есть в трансляторе),
постольку косвенная адресация может когда нибудь незаметно исчезнуть. (Может об этом разработчиков спросить?).
https://docs.mql4.com/ru/basis/variables/formal
Существует возможность передавать параметры по ссылке. В этом случае модификация таких параметров отразится на соответствующих переменных в вызываемой функции, переданных по ссылке. Нельзя передавать по ссылке элементы массивов. Параметры по ссылке можно передавать только в пределах одного модуля, для библиотечных функций такая возможность не предусмотрена. Для того чтобы указать, что параметр передается по ссылке, после типа данных необходимо поставить модификатор &.
Пример:
Массивы также можно передавать по ссылке, все изменения отразятся в исходном массиве. В отличие от простых параметров массивы можно передавать по ссылке и в библиотечные функции.
Параметры, передаваемые по ссылке, нельзя инициализировать значениями по умолчанию.
Приятно что не уберут, оказывается в документации это есть.
Хотя кто то из великих в 2008г. предлагал ссылку на переменную описывать как массив... Ну да ладно.
также, с учетом возмoжного человеческого непонимания:
в описании функции эквивалентно и абсолютно правильно будет все вот это:
(Даже не спрашиваем зачем в описании функции допустимо array[50]))))
Приятно что не уберут, оказывается в документации это есть.
Хотя кто то из великих в 2008г. предлагал ссылку на переменную описывать как массив... Ну да ладно.
также, с учетом возмoжного человеческого непонимания:
в описании функции эквивалентно и абсолютно правильно будет все вот это:
(Даже не спрашиваем зачем в описании функции допустимо array[50]))))
Не будет. В смысле эквивалентно не будет. Вотличие от С, где массивы не передаются по значению (только по ссылке), в МКЛ есть возможность передачи по значению. Разница в том, что массиву
нельзя присвоить значение внутри процедуры - компилятор такую конструкцию даже не пропустит ;).Вы ж, вроде, ратовали за то, что МКЛ это не совсем С и его нужно изучать как отдельный язык ? или я чего перепутал ?
//---------------------------------------------------------------------------------------
Всему есть Единственная и по сущуству правильная Объяснительная - это специализированный язык,
на котором былые Си-привычки только вредят. Не сравнивайте MQL-4 и Си, - только настроение себе испортите.
//---------------------------------------------------------------------------------------
ЗЫ Вы и Компостер повеселили меня слегка. Вы разбазариванием рессурсов ( теперь точно знаю, что амеры таки тупые, как говорит Задорнов. Эти "тупари" с УоллСтрит почему-то уверены, что большее стат преимущество имеет не столько тот у кого лучше система прогнозирования, а тот у кого быстрее выполняются алгоритмы и короче пинг до брокера :) . Вы вообще-то в курсе, что МТ не получает поток котировок пока проводит расчеты экспертов\скриптов\индикаторов ? Да еще разработчики численных методов тоже тупые - зачем-то выдумывают хранение матриц в профильном виде да еще и без нулевых элементов, да еще и алгоритмы обработки ускоряют - во "придурки" рессурсов то хватает :) ). А вот я сомневаюсь, что бы кто-то из профи спецом ухудшал свой стиль программирования специально для МТ ;).
А Компостер сравнением вызова процедуры с операцией присваивания, да еще и утверждением что вызов процедуры чуть ли не самая быстрая операция (это слегка утрирую :) Интересно, он окромя книжек по МКЛ чего нить вообще читал по программированию ? знает, например, скока операций производится при вызове процедуры, как формируются стеки, чем ФИФО от ЛИФО отличается ? И как потом очищаются .... и все это сравнить с операцией присваивания - одной из самых быстрых (если интеджеры) ?
Ваши с Компостером подходы к разработке вселяют оптимизму. Вот бы это еще в уши и руки разработчиков фильтров котировочного потока на сервере - тока помечтать остается :).
ЗЗЫ а ссылку на массивы предлагали не от хорошей жизни -в МКЛ отсутствует адресная арифметика и параметр по ссылке передать из библиотеки невозможно (может Вы просто еще их не использовали ?) - выход передавать по ссылке не параметр, а ссылку на массив и обращаться к нулевому элементу - это работает.
ИМХО, Прежде чем чего-нить "втирать" новичкам неплохо бы изучить матчасть, дабы не вводить их в заблуждение ;).
Успехов.
ЗЗЗЫ Специально для Компостера - в аттче скрипт, которы наглядно демонстрирует, что обращение к вызовам функций на порядки медленнее. Изучайте, разбирайтесь (в зависимости от скорострельности компа увеличивайте размерность параметра N, пока не останется нулевого времени исполнения циклов - тогда реально увидите разницу) и не позорьте программистов тупыми сравнениями, особенно когда сами не в теме, а есть тока ссылки на то, что кто-то когда-то пробовал, тока Вы не разобрались что к чему :).
А Компостер сравнением вызова процедуры с операцией
присваивания, да еще и утверждением что вызов процедуры чуть ли не самая быстрая операция (это слегка утрирую :)
Интересно, где я приводил это сравнение?
VladislavVG писал (а):
Интересно, он окромя книжек по МКЛ чего нить вообще читал по программированию ? знает, например, скока операций производится при вызове процедуры, как формируются стеки, чем ФИФО от ЛИФО отличается ? И как потом очищаются....
Я и книжки по MQL не читал =)
Я никогда не говорил что являюсь профессиональным программистом. Более того, постоянно признаю что учиться мне еще долго (не "на публику", для себя).
По крайней мере, я не понтуюсь и не говорю о том, чего не знаю.
VladislavVG писал (а):
ИМХО, Прежде чем чего-нить "втирать" новичкам неплохо бы изучить матчасть, дабы не вводить их в заблуждение ;).
ИМХО, "втирает" здесь пока один человек, и это не я.
VladislavVG писал (а):
ЗЗЗЫ Специально для Компостера - в аттче скрипт, которы наглядно демонстрирует, что обращение к вызовам функций на порядки медленнее. Изучайте, разбирайтесь (в зависимости от скорострельности компа увеличивайте размерность параметра N, пока не останется нулевого времени исполнения циклов - тогда реально увидите разницу) и не позорьте программистов тупыми сравнениями, особенно когда сами не в теме, а есть тока ссылки на то, что кто-то когда-то пробовал, тока Вы не разобрались что к чему :).
Поосторожнее на поворотах, мы не на зоне...
Замерять время выполнения программы с помощью TimeLocal() - оригинально. Запишу себе с пометкой "совет профессионального программиста".
Чтоб вы не утруждали себя поисками упомянутой мной темы, приведу цитату здесь:
Rosh писал (а) (19.02.2008 18:15):
Вот скрипт для проверки разницы.
А вот результаты работы скрипта.
Как видите, использование отдельной функции вполне оправдано - разница по времени для цикла в миллиард проходов всего одна секунда. Зато насколько проще разрабатывать код!
А Компостер сравнением вызова процедуры с операцией
присваивания, да еще и утверждением что вызов процедуры чуть ли не самая быстрая операция (это слегка утрирую :)
Интересно, где я приводил это сравнение?
Здесь. Я же написал, что сравнение "слегка утрирую".
//----------------------------------------------------------------
sasa999 писал (а):
и еще непонятно - если вызов функции самая медленная операция, тогда почему например КimIV в своих примерах използует почти все только из набора функций?
Это Ваш ответ :
Вас дезинформировали =)
На вызове функции теряется очень мало (недавно Rosh приводил результаты сравнения).
//----------------------------------------------------------------
Речи о том, когда и какие куски кода стоит, а когда не стоит оформлять как функции и сколько теряется времени на проектирование и на работу, на сколько я помню, не было. А вызов функции действительно самая медленная операция.
По поводу "мерять производительность" - При такой разнице все равно чем пользоваться.
Для того, чтобы сравнить величины порядка метров с величинами порядка десятков метров не обязательно брать линейку с миллиметровой шкалой.
По поводу зоны не понял ?
ЗЫ если Вы считате, что я чего-то "втираю" потрудитесь привести неверные высказывания и количественные оценки. Пока же я Вам показал на основании чего я сделал свои выводы.
Успехов.
И что "этот человек", т.е. я втирает?
Раз уж человеком обозвали, объяснюсь)))
Вообще то ветка началась с того, что новичек, "при вступлении во Храм", не нашел своего логического объяснения,
-почему return каждый раз разный, почему некто параметры для функций присваивает отдельно, а не в вызове.
Ну я привел пример, как транслятор исправляет ошибки в описании функции.
А ранее, прошелся по &ссылке, опять же потому,
что в некотором кол-ве постов некие ГУру предлагают простую переменную в описании обзывать массивом.)))
Никаких терок тут нет.
Добавлю следующее. Сила и красота Си в развитой передаче параметров. От этого вся сила Си.
в функциях сила!!!
Например опять же у меня программирование давно уже не знания, а рефлексы.)))
Здесь поясняю: при программировании,
первое что делаю - проектирую входные/выходные данные, тестирую.
Второе - изобретаю метаязык из функций или же объектов.
Третье - пишу на метаязыке верхнюю часть проги, и уточняю объекты/функции, уточняю удоство передачи параметров.
Четвертое - пишу уточненные объекты/функции.
Иначе не могу. Стошнит.
Так вот, этот MQL-4 НЕ ПОЗВОЛЯЕТ работать так привычно.
-Спроектируешь вход/выход, ан адресации такой в MQL-4 нет.
-изобретешь метаязык под задачу, И опять же нельзя выполнить задумку, формальные параметры так не адресуются.
Но настоящий то ум не спрячешь. В нем Думатель взрощен.
Думатель - Он видит, - везде фигурные скобки, Думатель напрягается чтобы их не пропустить }}},
И ВКЛЮЧАЕТ взрощенный Думатель РЕФЛЕКС, этО якобы сИ.
по рефлексу начинается проектирование мозжечком, а то вот так то сделать, а здесь эдак. но - опаньки....MQL-4
Речи о том, когда и какие куски кода стоит, а когда не стоит оформлять как функции и сколько теряется времени на проектирование и на работу, на сколько я помню, не было. А вызов функции действительно самая медленная операция.
Я понял что вас задело. Действительно, формально я сказал неправду (если считать то, что говорите вы про вызов функций правдой. Я не владею вопросом и опровергать ваше утверждение не буду).
Но есть несколько "но":
1. Я действительно говорил о целесообразности применения функций. И более чем уверен, топик-стартера интересовал именно этот вопрос (можем у него спросить). То, что увидели вы в моих словах - лично ваши проблемы. Особенно, учитывая тот факт, что увидели "это" только вы.
2. Я не сравнивал вызов функции с операцией присваивания.
К этим "но" прибавляем несколько ваших высказываний:
А Компостер сравнением вызова процедуры с операцией присваивания, да еще и утверждением что вызов процедуры чуть ли не самая быстрая операция (это слегка утрирую :)
и все это сравнить с операцией присваивания - одной из самых быстрых (если интеджеры) ?
1. Сравнения не было.
2. Утверждения не было.
3. Фраза "слегка утрирую" с улыбочкой - плохое оправдание откровенной клевете. По крайней мере, не достаточное для меня.
Наезды в стиле "у кого больше" я опустил, их комментировать смысла не вижу.
Есть еще одно, на дессерт:
и не позорьте программистов тупыми сравнениями особенно когда сами не в теме, а есть тока ссылки на то, что кто-то когда-то пробовал, тока Вы не разобрались что к чему :)
1. Сравнение, которого не было, оказывается, тупое. И я, соответственно, тупой?
2. "Тока" надо было сначала разобраться в чем я разобрался, а в чем нет. А пока - только безосновательная клевета.
3. Улыбочка, опять же, не оправдание.
VladislavVG писал (а):
ЗЫ если Вы считате, что я чего-то "втираю" потрудитесь привести неверные высказывания и количественные оценки.
Под термином "втирание" лично я подразумеваю навязывание своего мнения окружающим.
Надеюсь, я достаточно подробно ответил что именно в ваших высказываниях я считаю "втиранием".