[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 1087

 
itum:

У МЕНЯ ПРОБЛЕМА ....

Когда настраиваю почту в настройках терминала, В SMTP - я использую smtp.gmail.com:25

МНЕ выдает ошибку - Mail: 530 5.7.0 Must issue a STARTTLS command first. l3sm2329679fan.0

SMTP-сервер сервера mail.ru требует аутенфикации RFS-2554. Что это такое я не знаю - но в летучей мыше мне пришлось продублировать пароль и логин ящика на mail.ru, чтоб коннект прокатывал. Без этого работать перестало - несколько лет назад работало, а потом они там что-то поменяли. Попробуйте smtp.rambler.ru с тем же самым 25-м портом - мож у него прокатит.
 

Блин, я запутался в терминах. Я хотел сказать, что если справка привязывает нас жёстко к одному месту в структуре программы, где статическая переменная должна быть объявлена и проинициализирована, причём 1 и только 1 раз, то все остальные попытки присвоить этой переменной какое-то иное значение, да и вообще, присвоить ей хоть какое-то значение, должны рассматриваться компилятором, как синтаксическая ошибка. Иными словами, исходя из определений, данных в справке, статические переменные выполняют роль контейнеров для констант и не могут быть изменены в процессе работы программы. Точка. НО! Увы, мы только что столкнулись с 2 нарушениями этого правила. Выснилось, что объявлять статическую переменную можно где угодно и реинициализировать её можно когда угодно. Ну так и написали бы в справке.

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

Я впервые сталкиваюсь с дуростью объявления глобальной переменной внутри подпрограммы - это вносит путанницу в понимание программного кода. Переменные, которые объявляются внутри подпрограмм, имеют срок жизни равный или меньше срока жизни подпрограммы. Это классика. Зачем понадобился метаквотесам изврат объявления глобальной переменной внутри подпрограмм, остаётся только голову ломать.

 
khorosh:

Ещё в учебнике есть пример использования статической переменной, из которого понятно, что инициализация её производится однократно, иначе счётчик тиков бы не работал.


Автор учебника нарушил правило справки - статическая переменная инициализируется перед функцией init(). Спрашивается, как можно инициализировать переменную, которая ещё не объявлена? Верно - нельзя. Поэтому следовательно, статическая переменная и объявлена должна быть перед блоком init(). Это простой категорический силлогизм. Если А, то Б. А, следовательно Б - утверждающий модус категорического силлогизма. Если существует запрет инициализировать необъявленную переменную (А), то её сперва объявить (Б), запрет существует (А), следовательно предварительное объявление переменной необходимо (Б).

Получается, что автор не только проинициализировал статическую переменную не перед блоком init(), но и объявил её не в том месте программы, где требует справка!

 

Блин, вот она где собака зарыта. Нашёл! https://docs.mql4.com/ru/basis/variables/initialization

Любая переменная при определении может быть инициализирована. Любая переменная инициализируется нулем (0), если явно не задано другое начальное значение. Глобальные и статические переменные могут быть проинициализированы только константой соответствующего типа. Локальные переменные могут быть проинициализированы любым выражением, а не только константой.

Инициализация глобальных и статических переменных производится однократно. Инициализация локальных переменных производится каждый раз при вызове соответствующих функций.

Авторы справки путаются с термином инициализации. В первом абзаце всё правильно - термин "инициализация" применяется в значении операции присвоения - то есть, проинициализировать переменную значением - это присвоить ей значение. Во втором абзаце вместо термина "объявления переменной" ("определения переменной") автор справки ошибочно использовал термин инициализации. Поэтому суждение "Инициализация глобальных и статических переменных производится однократно." должно читаться как "Объявление глобальных и статических переменных производится однократно.". В противном случае мы получим абсурд. Если инициализация будет возможна лишь однократно, то значения этих переменных нельзя ни как будет изменить в ходе выполнения программы. Разработчики, исправьте эти и указанные несколькими постами выше ошибки!

P.S.

И я вслед за вами стал путать "инициализацию переменной" и "объявление переменной". Понасовал не тех терминов постами выше. :(

 
drknn:

Блин, вот она где собака зарыта. Нашёл! https://docs.mql4.com/ru/basis/variables/initialization

Авторы справки путаются с термином инициализации. В первом абзаце всё правильно - термин "инициализация" применяется в значении операции присвоения - то есть, проинициализировать переменную значением - это присвоить ей значение. Во втором абзаце вместо термина "объявления переменной" ("определения переменной") автор справки ошибочно использовал термин инициализации. Поэтому суждение "Инициализация глобальных и статических переменных производится однократно." должно читаться как "Объявление глобальных и статических переменных производится однократно.". В противном случае мы получим абсурд. Если инициализация будет возможна лишь однократно, то значения этих переменных нельзя ни как будет изменить в ходе выполнения программы. Разработчики, исправьте эти и указанные несколькими постами выше ошибки!

P.S.

И я вслед за вами стал путать "инициализацию переменной" и "объявление переменной". Понасовал не тех терминов постами выше. :(

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

Всех с наступающим. Помогите чайнику! Присоветуйте приличного советничка. Счёт центовый Депо пока 60$

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


Да поймите же, что при эквивалентности понятий присвоения и идентификации, их объёмы совпадают! Это значит, что эти 2 термина - синонимы!!!

Идём в глубь вопроса к его первоисточнику. Открываем англорусский онлайн-словарь. Попытка перевода термина identification ни чего не даёт - оно переводится как идентификация. Слово не нашенское, поэтому понять что это такое из онлайн-словаря не удаётся. Идём в гугл и качаем книгу Боровского "Англо-русский словарь по программированию". На странице 128 находим следующее: http://s2.ipicture.ru/uploads/20101230/XwOJxmkn.jpg Осталось лишь выяснить, что такое тождество. Открываем словарь Ожегова. Находим словарную статью:

ТОЖДЕСТВО, -а и ТОЖЕСТВО. -а, ср. 1. Полное сходство, совпадение. Г. взглядов. 2. (тождество). В математике: равенство, справедливое при любых числовых значениях входящих в него величин. II прил. тождественный, -ая, -ое и тожественный, -ая, -ое (к 1 знач.). Тождественные алгебраические выражения.

Чего и требовалось доказать! Ну а поскольку после выполнения операции присвоения значение переменной будет полностью совпадать с тем значением, которое ей только что присвоили, то делаем вывод, что отождествление переменной и идентификация переменной - это одна и та же операция, которая полностью равнозначна операции присвоения. Исходя из этого мы вынуждены сделать вывод: Если правило приписывает одну и только одну идентификацию переменной, причём в строго указаном месте структуры программы, то присвоить этой переменной другое значение (уже после идентификации) мы не имеем права, так как понятие идентификации и понятие присвоения - суть синонимы! Точка.

 
drknn:


Да поймите же, что при эквивалентности понятий присвоения и идентификации, их объёмы совпадают! Это значит, что эти 2 термина - синонимы!!!

Идём в глубь вопроса к его первоисточнику. Открываем англорусский онлайн-словарь. Попытка перевода термина identification ни чего не даёт - оно переводится как идентификация. Слово не нашенское, поэтому понять что это такое из онлайн-словаря не удаётся. Идём в гугл и качаем книгу Боровского "Англо-русский словарь по программированию". На странице 128 находим следующее: http://s2.ipicture.ru/uploads/20101230/XwOJxmkn.jpg Осталось лишь выяснить, что такое тождество. Открываем словарь Ожегова. Находим словарную статью:

Чего и требовалось доказать! Ну а поскольку после выполнения операции присвоения значение переменной будет полностью совпадать с тем значением, которое ей только что присвоили, то делаем вывод, что отождествление переменной и идентификация переменной - это одна и та же операция, которая полностью равнозначна операции присвоения. Исходя из этого мы вынождены сделать вывод: Если правило приписывает одну и только одну идентификацию переменной, причём в строго указаном месте структуры программы, то присвоить этой переменной другое значение (уже после идентификации) мы не имеем права, так как понятие идентификации и понятие присвоения - суть синонимы! Точка.

Вы полагаете, что инициализация и идентификация одно и тоже?
 
khorosh:
Вы полагаете, что инициализация и идентификация одно и тоже?

нет, стоп - не путайте меня. Минутку.
 
drknn:

нет, стоп - не путайте меня. Минутку.
Изначально речь шла о инициализации, но Вы почему то переключились на идентификацию.
Причина обращения: