Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Java также не работает вне своей виртуальной машины, там у вас будут те же проблемы, вы не сможете сделать dll, которая может быть загружена и вызвана из программы на C.
Если вам нравится C#, то вам также понравится ObjectPascal (безопасность типов, строгость, вся философия, лежащая в его основе, за исключением VM). В конце концов, разработчик и главный архитектор C# - тот же человек, который когда-то создал Turbo-Pascal и Delphi (ObjectPascal), и это просвечивает. В некоторых отношениях C# похож на ObjectPascal с (уродливым, но сегодня модным) синтаксисом C.
Для взаимодействия непосредственно с машиной и с C-API (как это необходимо для MetaTrader) и при этом с использованием такого мощного языка, как C#, альтернатив ObjectPascal не так много. Некоторые говорят, что C++ не менее мощный язык (и, конечно, может использоваться вместо OP), но он явно не так элегантен, имеет много несоответствий и настолько склонен к ошибкам, что только настоящие эксперты могут по-настоящему овладеть им.
.... возврат внутри функции заставит ее вернуться в то место, откуда была вызвана функция.
Это решающее различие, 7bit: Я говорю о вызове совершенно другой функции, подпрограммы или даже импортированного кода, целых подпрограмм и/или функций ВНЕ всей текущей функции. Концептуальный пример:
Я нахожусь в функции, которая выполняется со строки 100 по строку 20, но я хочу вызвать что-то, что находится за пределами этой области. Возможно, совершенно другую функцию, которая находится в строках с 50 по 60. <=-Это не соответствует параметрам и примеру выше, о чем я и спрашиваю. Это 100% замена старого gosub/return и, кроме того, функция позволяет передавать значения и возвращать значения.
Вы можете иметь несколько операторов возврата в одной функции, а также вы можете выходить из циклов с помощью break .... .
Понятно
Но мне продолжают рассказывать о том, как я могу перемещаться в пределах области видимости конкретной функции, что я понимаю. Но это совсем не то, о чем я спрашиваю , и это было сказано в самом начале всего этого.
Что касается "исключений", то я думаю, вы можете называть их так, если хотите. Как я уже сказал, я пытаюсь найти "обходной путь" для добавления и использования функциональности таких функций, как: GoTo, GoSub (вне функции CURRENT) и т.д., которые не существуют как функции непосредственно в MQL4. Судя по вашим ответам, большинство из вас знают и понимают эти различия в программировании, но не отвечают на заданный вопрос.
FourX:
Я нахожусь в функции, которая выполняется со строки 100 по строку 20, но я хочу вызвать что-то, что находится за пределами этой области. Возможно, совершенно другую функцию, которая находится в строках с 50 по 60.подумайте об этом:
Что теперь произойдет? Начнем с main(), я объясню все шаги во время выполнения (комментарии выделены зеленым цве том, инструкции - черным):
.
Вы видите это? Функции foo нужен локальный стек размером 8 байт плюс адрес возврата, а функции bar - только 4 байта плюс адрес возврата. Их операторы возврата уже встроены компилятором во время компиляции, они вынимают разное количество байт из стека, вы не можете использовать один возврат для выполнения работы другого, каждый работает только для той функции, для которой он был скомпилирован.
Эти старые языки, которые имели GOTO во всей программе, не имели локальной области видимости переменных, и единственное, что вы должны были сделать правильно, это подобрать одинаковое количество GOSUB и RETURN, все их возвраты только выводили адрес возврата и ничего больше, все возвраты вели себя одинаково. Но теперь у нас есть много разных по размеру "GOSUB" (каждый из которых заталкивает в стек разные суммы), а также много разных возвратов, которые забирают из стека разные суммы. И у нас есть локальные переменные в стеке. Это просто не может работать, независимо от того, какие безумные вещи вы пытаетесь встроить в компилятор.
Теоретически вы можете использовать GOTO внутри *одной и той же* функции (и некоторые языки позволяют это), но вы не можете показать мне ни одного куска кода, где это действительно привело бы к более элегантному, более легкому для понимания и более удобному в обслуживании коду, чем правильное структурированное программирование. Все, что это может сделать, это создать ужасный беспорядок. Это никому не нужно, поэтому это не реализовано.
Все мы уже знаем, что в MQL4 нет таких нативных функций, как GoTo ИЛИ 'GoSub -=> ReturnFromGoSub'. С этим не поспоришь. Теперь это превратилось в многократные объяснения и примеры того, что в MQL4 нет таких родных функций. Тут спора нет. Эта тема не об этом и никогда не была. Так что, пожалуйста, мы можем прекратить спорить о том, что мы уже знаем и с чем согласны?
Мы знаем, что эти функции работают в других языках программирования и могут быть очень полезны.
Весь смысл этой темы заключается в том, чтобы выяснить, можем ли мы смоделировать и использовать их с тем, что доступно в MQL4?
Например, допустимой функцией завершения второго случая в первом предложении'GoSub -=> ReturnFromGoSub ' будет: Вернуться в точку программы, в которой был вызван GoSub, и вернуть значения из GoSub в вызывающую точку программы.
Например, правильным завершением функции во втором случае в первом предложении'GoSub -=> ReturnFromGoSub ' будет: Вернуться в точку программы, в которой был вызван GoSub, и вернуть значения из GoSub в вызывающую точку программы.
FourX:
'GoSub -=> ReturnFromGoSub ' будет означать: Вернуться в точку программы, в которой был вызван GoSub, и вернуть значения из GoSub в вызывающую точку программы.
FourX, если вы изучаете mql4, пока ваш разум все еще находится в BBC Basic, думайте о defproc и proc и забудьте GoTo и GoSub.
У меня был BBC micro в начале 80-х ....ahhhh я до сих пор помню радость от попыток заставить программы загружаться с его кассетного накопителя :( мы писали программы на BBC Basic
FourX, если вы изучаете mql4, пока ваш разум все еще находится в BBC Basic, думайте о defproc и proc и забудьте GoTo и GoSub.
У меня был BBC micro в начале 80-х ....ahhhh я до сих пор помню радость от попыток заставить программы загружаться с его кассетного накопителя :( мы писали программы на BBC Basic
LOL . . . У меня был Acorn Electron ... когда он был горячим, он не читал материал с ленты, который я записал, когда он был холодным, и наоборот ... вот это были дни. ;-)
Да, это были те времена :) крутил согнутой отверткой тот маленький винтик возле головки кассеты, одновременно повторяя удары по его боковой стороне хаха