Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Одно только пересечение переменных с одним и тем же именем (да еще вперемешку с глобальными переменными) есть _смертный_ грех программирования. Это в чистом виде "могила для самого себя". И гарантировать результат уже мало кто сможет (достаточно усложнить задачу, выставить "программист в данном куске подразумевал вместо одной переменной другую" и теперь опять виноват компилер).
Тот, кто пишет:
.....
if (i > 5) {int s = i*i;}
Print(" S = ", s);
Точно не понимает что он делает и всю его работу можно только выкинуть от греха подальше.
Извиняюсь за категоричность.
и я не понял, причем тут "... и теперь опять виноват компилер".
Жизнь сложнее простых формул, и может случиться всякое.
Например часто в качестве переменной цикла используют один и тот же набор переменных (i,j,...)
а в качестве промежуточных результатов другой (R, t, ...).
При модификации программы в один блок могут вставить другой и переменные могут пересечся и т.д.
Ну что я буду сейчас выдумывать способы по которым смогут глюки возникать .. Просто понятно, что если область видимости переменной не локализована внутри блока, то верятность таких проблем очень высока.
Если же область видимости всегда ограничена блоком, то я смело могу писать
Никаких подобных проблем с переменными у меня возникнуть не может.
Так 99% так и пишут.
Часто не нарочно, просто так у них получается.
Вы что, хотите чтобы на вашей системе работали только сертифицированные программисты высочайшего класса?
Вы же понимаете что это нереально, и работать будут даже не программисты, и часто даже не математики и технари, а всякий разный народ, который первый раз увидел программу (исходник имею в виду) - это будут медики, биологи, химики, не очень крутые пацаны, домохозяйки, студенты всяких профилей, владельцы ларьков и мелкого бизнеса. Т.е. те, кто клюнул на возможность быстрой наживы на форексе, и которым понадобилось нарисовать свой собственный мувинг. И таких будет 99%.
С Уважением !
Я тоже согласен с МАКом. Эта, казалось бы, такая мелочь имеет больший "вес", чем кажется. Во-первых, MQL4 С-подобный. Что это значит? Это значит, что человек знакомый с С тут же начинает программировать, как на С больше ни о чем не задумываясь, потому что для него ситуация ОЧЕВИДНА. А то, что всё-таки язык этот С-подобный, надо подумать отдельно. Т.е. должна возникнуть дополнительная мысь. А часто ли люди з а д у м ы в а ю т с я ? Особенно в ситуациях, которые им кажутся очевидными? С этим ничего не сделаешь, это наша человеческая психология. И учитывать её надо обязательно. Во-вторых, вы со своим продуктом уже на мировой арене (я видел импортные штучки МТ-подобные, слабее даже МТ3.х). Поэтому хотите вы или нет, а доп. ответственность на вас легла. Просто вот сама пришла и легла. И вам либо учитывать её, либо послать подальше. Но если у вас есть честолюбие и вам не наплевать на своё имимдж, вы все-таки учтёте этот момент. И явные "плюшки" всё-таки вычистите. Оно ведь не видно, ну например, что вот здесь в программе это точно С, а вот в этом месте программы не совсем С. И представьте себе такую картинку:
- Сэм, смотри я вот здесь пишу вот так, а здесь вот так. И всё работает! Ха-ха-ха.
- Да ладно тебе, Билли. Что ты привязался к парням? Хорошая ведь вещь. А такие мелочи... Не обращай внимания. У парней хороший потенциал. Со временем научатся.
Нет, даже в этом случае этот вопрос остается.
Такая "фича" делает любой язык потенциально опасным.
В языке либо должны строго и везде соблюдаться области видимости (наверное все компиляторы), либо областью видимости всегда является вся программа или модуль (некоторые интерпретаторы).
Проблему описанную в ветке можно решить либо сделав областью видимости любой блок (это как в Си), либо запретив описания переменных в блоках кроме блоков функций (это не как в Си).